Fix internal tests 49/44649/4
authorKyungwook Tak <k.tak@samsung.com>
Thu, 23 Jul 2015 06:05:49 +0000 (15:05 +0900)
committerKyungwook Tak <k.tak@samsung.com>
Wed, 29 Jul 2015 07:43:50 +0000 (16:43 +0900)
 * Remove useless files
 * Remove dependency to dpl-test-efl

Change-Id: I723c8c1edb6351260aa25cede0dc428dd8e36250
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
216 files changed:
CMakeLists.txt
packaging/cert-svc.spec
tests/CMakeLists.txt
tests/capi/CMakeLists.txt
tests/capi/api_tests.cpp
tests/capi/api_tests.h
tests/capi/data/root_cacert0.pem [moved from tests/vcore/test-cases/keys/root_cacert0.pem with 96% similarity]
tests/capi/test_suite_01.cpp
tests/capi/test_suite_02.cpp
tests/cert-svc/CMakeLists.txt
tests/dpl/include/dpl/abstract_input.h [moved from vcore/src/dpl/core/include/dpl/abstract_input.h with 100% similarity]
tests/dpl/include/dpl/abstract_input_output.h [moved from vcore/src/dpl/core/include/dpl/abstract_input_output.h with 100% similarity]
tests/dpl/include/dpl/abstract_output.h [moved from vcore/src/dpl/core/include/dpl/abstract_output.h with 100% similarity]
tests/dpl/include/dpl/assert.h [moved from vcore/src/dpl/core/include/dpl/assert.h with 100% similarity]
tests/dpl/include/dpl/availability.h [moved from vcore/src/dpl/core/include/dpl/availability.h with 100% similarity]
tests/dpl/include/dpl/binary_queue.h [moved from vcore/src/dpl/core/include/dpl/binary_queue.h with 100% similarity]
tests/dpl/include/dpl/colors.h [moved from vcore/src/dpl/core/include/dpl/colors.h with 100% similarity]
tests/dpl/include/dpl/errno_string.h [moved from vcore/src/dpl/core/include/dpl/errno_string.h with 100% similarity]
tests/dpl/include/dpl/exception.h [moved from vcore/src/dpl/core/include/dpl/exception.h with 100% similarity]
tests/dpl/include/dpl/foreach.h [moved from vcore/src/dpl/core/include/dpl/foreach.h with 100% similarity]
tests/dpl/include/dpl/free_deleter.h [moved from vcore/src/dpl/core/include/dpl/free_deleter.h with 100% similarity]
tests/dpl/include/dpl/lexical_cast.h [moved from vcore/src/dpl/core/include/dpl/lexical_cast.h with 100% similarity]
tests/dpl/include/dpl/noncopyable.h [moved from vcore/src/dpl/core/include/dpl/noncopyable.h with 100% similarity]
tests/dpl/include/dpl/preprocessor.h [moved from vcore/src/dpl/core/include/dpl/preprocessor.h with 100% similarity]
tests/dpl/include/dpl/scoped_fclose.h [moved from vcore/src/dpl/core/include/dpl/scoped_fclose.h with 100% similarity]
tests/dpl/include/dpl/scoped_free.h [moved from vcore/src/dpl/core/include/dpl/scoped_free.h with 100% similarity]
tests/dpl/include/dpl/scoped_resource.h [moved from vcore/src/dpl/core/include/dpl/scoped_resource.h with 100% similarity]
tests/dpl/include/dpl/singleton.h [moved from vcore/src/dpl/core/include/dpl/singleton.h with 100% similarity]
tests/dpl/include/dpl/singleton_impl.h [moved from vcore/src/dpl/core/include/dpl/singleton_impl.h with 100% similarity]
tests/dpl/include/dpl/test/abstract_input_parser.h [moved from vcore/src/dpl/test/include/dpl/test/abstract_input_parser.h with 100% similarity]
tests/dpl/include/dpl/test/abstract_input_reader.h [moved from vcore/src/dpl/test/include/dpl/test/abstract_input_reader.h with 100% similarity]
tests/dpl/include/dpl/test/abstract_input_tokenizer.h [moved from vcore/src/dpl/test/include/dpl/test/abstract_input_tokenizer.h with 100% similarity]
tests/dpl/include/dpl/test/test_results_collector.h [moved from vcore/src/dpl/test/include/dpl/test/test_results_collector.h with 100% similarity]
tests/dpl/include/dpl/test/test_runner.h [moved from vcore/src/dpl/test/include/dpl/test/test_runner.h with 100% similarity]
tests/dpl/include/dpl/test/test_runner_child.h [moved from vcore/src/dpl/test/include/dpl/test/test_runner_child.h with 100% similarity]
tests/dpl/include/dpl/test/test_runner_multiprocess.h [moved from vcore/src/dpl/test/include/dpl/test/test_runner_multiprocess.h with 100% similarity]
tests/dpl/include/dpl/test/value_separated_parser.h [moved from vcore/src/dpl/test/include/dpl/test/value_separated_parser.h with 100% similarity]
tests/dpl/include/dpl/test/value_separated_policies.h [moved from vcore/src/dpl/test/include/dpl/test/value_separated_policies.h with 100% similarity]
tests/dpl/include/dpl/test/value_separated_reader.h [moved from vcore/src/dpl/test/include/dpl/test/value_separated_reader.h with 100% similarity]
tests/dpl/include/dpl/test/value_separated_tokenizer.h [moved from vcore/src/dpl/test/include/dpl/test/value_separated_tokenizer.h with 100% similarity]
tests/dpl/include/dpl/test/value_separated_tokens.h [moved from vcore/src/dpl/test/include/dpl/test/value_separated_tokens.h with 100% similarity]
tests/dpl/src/assert.cpp [new file with mode: 0644]
tests/dpl/src/binary_queue.cpp [moved from vcore/src/dpl/core/src/binary_queue.cpp with 100% similarity]
tests/dpl/src/colors.cpp [moved from vcore/src/dpl/core/src/colors.cpp with 100% similarity]
tests/dpl/src/errno_string.cpp [moved from vcore/src/dpl/core/src/errno_string.cpp with 100% similarity]
tests/dpl/src/exception.cpp [moved from vcore/src/dpl/db/src/naive_synchronization_object.cpp with 53% similarity]
tests/dpl/src/noncopyable.cpp [moved from vcore/src/dpl/core/src/noncopyable.cpp with 100% similarity]
tests/dpl/src/singleton.cpp [moved from vcore/src/dpl/core/src/singleton.cpp with 100% similarity]
tests/dpl/src/test_results_collector.cpp [moved from vcore/src/dpl/test/src/test_results_collector.cpp with 100% similarity]
tests/dpl/src/test_runner.cpp [moved from vcore/src/dpl/test/src/test_runner.cpp with 100% similarity]
tests/dpl/src/test_runner_child.cpp [moved from vcore/src/dpl/test/src/test_runner_child.cpp with 100% similarity]
tests/dpl/src/test_runner_multiprocess.cpp [moved from vcore/src/dpl/test/src/test_runner_multiprocess.cpp with 99% similarity]
tests/dpl/src/value_separated_policies.cpp [moved from vcore/src/dpl/test/src/value_separated_policies.cpp with 100% similarity]
tests/dpl/src/value_separated_tokens.cpp [moved from vcore/src/dpl/test/src/value_separated_tokens.cpp with 100% similarity]
tests/pkcs12/CMakeLists.txt
tests/pkcs12/new_test_cases.cpp
tests/pkcs12/pkcs12_test.cpp
tests/vcore/CMakeLists.txt
tests/vcore/TestCRL.cpp [deleted file]
tests/vcore/TestCRL.h [deleted file]
tests/vcore/TestCases.cpp
tests/vcore/cert-svc-tests-vcore-ocsp-server.sh [deleted file]
tests/vcore/certificate-generator/.gitignore [deleted file]
tests/vcore/certificate-generator/create_certs.sh [deleted file]
tests/vcore/certificate-generator/demoCA.init/cacert.pem [deleted file]
tests/vcore/certificate-generator/demoCA.init/careq.pem [deleted file]
tests/vcore/certificate-generator/demoCA.init/index.txt [deleted file]
tests/vcore/certificate-generator/demoCA.init/index.txt.attr [deleted file]
tests/vcore/certificate-generator/demoCA.init/index.txt.old [deleted file]
tests/vcore/certificate-generator/demoCA.init/newcerts/00.pem [deleted file]
tests/vcore/certificate-generator/demoCA.init/private/cakey.pem [deleted file]
tests/vcore/certificate-generator/demoCA.init/serial [deleted file]
tests/vcore/certificate-generator/demoCA.init/serial.old [deleted file]
tests/vcore/certificate-generator/demoCA/cacert.pem [deleted file]
tests/vcore/certificate-generator/demoCA/careq.pem [deleted file]
tests/vcore/certificate-generator/demoCA/crlnumber [deleted file]
tests/vcore/certificate-generator/demoCA/crlnumber.old [deleted file]
tests/vcore/certificate-generator/demoCA/private/cakey.pem [deleted file]
tests/vcore/certificate-generator/demoCA/serial [deleted file]
tests/vcore/certificate-generator/demoCA/serial.old [deleted file]
tests/vcore/certificate-generator/openssl.cnf [deleted file]
tests/vcore/test-cases/config/fin_list.xml [deleted file]
tests/vcore/test-cases/config/fin_list.xsd [deleted file]
tests/vcore/test-cases/keys/CAbundle.crt [deleted file]
tests/vcore/test-cases/keys/README [deleted file]
tests/vcore/test-cases/keys/filip_rsa_cert.pem [deleted file]
tests/vcore/test-cases/keys/filip_rsa_key.pem [deleted file]
tests/vcore/test-cases/keys/magda_dsa_cert.pem [deleted file]
tests/vcore/test-cases/keys/magda_dsa_key.pem [deleted file]
tests/vcore/test-cases/keys/ocsp_level0deprecated.crt [deleted file]
tests/vcore/test-cases/keys/ocsp_level1.crt [deleted file]
tests/vcore/test-cases/keys/ocsp_level2.crt [deleted file]
tests/vcore/test-cases/keys/ocsp_rootca.crt [deleted file]
tests/vcore/test-cases/keys/operator.root.cert.pem [deleted file]
tests/vcore/test-cases/keys/operator.second.cert.pem [deleted file]
tests/vcore/test-cases/keys/operator.second.key.pem [deleted file]
tests/vcore/test-cases/keys/operator.second.p12 [deleted file]
tests/vcore/test-cases/keys/root_cakey0.pem [deleted file]
tests/vcore/vcore_tests.cpp
vcore/CMakeLists.txt
vcore/cert-svc/ccert.h [moved from vcore/src/cert-svc/ccert.h with 99% similarity]
vcore/cert-svc/cerror.h [moved from vcore/src/cert-svc/cerror.h with 100% similarity]
vcore/cert-svc/cinstance.h [moved from vcore/src/cert-svc/cinstance.h with 100% similarity]
vcore/cert-svc/cpkcs12.h [moved from vcore/src/cert-svc/cpkcs12.h with 100% similarity]
vcore/cert-svc/cprimitives.h [moved from vcore/src/cert-svc/cprimitives.h with 100% similarity]
vcore/cert-svc/cstring.h [moved from vcore/src/cert-svc/cstring.h with 100% similarity]
vcore/dpl/core/include/dpl/assert.h [new file with mode: 0644]
vcore/dpl/core/include/dpl/colors.h [new file with mode: 0644]
vcore/dpl/core/include/dpl/exception.h [new file with mode: 0644]
vcore/dpl/core/include/dpl/noncopyable.h [new file with mode: 0644]
vcore/dpl/core/include/dpl/singleton.h [moved from vcore/src/dpl/core/include/dpl/abstract_waitable_input.h with 61% similarity]
vcore/dpl/core/include/dpl/singleton_impl.h [new file with mode: 0644]
vcore/dpl/core/src/assert.cpp [moved from vcore/src/dpl/core/src/assert.cpp with 98% similarity]
vcore/dpl/core/src/colors.cpp [new file with mode: 0644]
vcore/dpl/core/src/exception.cpp [moved from vcore/src/dpl/core/src/exception.cpp with 100% similarity]
vcore/dpl/core/src/noncopyable.cpp [new file with mode: 0644]
vcore/dpl/core/src/singleton.cpp [moved from vcore/src/dpl/core/src/type_list.cpp with 81% similarity]
vcore/dpl/log/include/dpl/log/abstract_log_provider.h [moved from vcore/src/dpl/log/include/dpl/log/abstract_log_provider.h with 100% similarity]
vcore/dpl/log/include/dpl/log/dlog_log_provider.h [moved from vcore/src/dpl/log/include/dpl/log/dlog_log_provider.h with 100% similarity]
vcore/dpl/log/include/dpl/log/journal_log_provider.h [moved from vcore/src/dpl/log/include/dpl/log/journal_log_provider.h with 100% similarity]
vcore/dpl/log/include/dpl/log/log.h [moved from vcore/src/dpl/log/include/dpl/log/log.h with 100% similarity]
vcore/dpl/log/include/dpl/log/old_style_log_provider.h [moved from vcore/src/dpl/log/include/dpl/log/old_style_log_provider.h with 100% similarity]
vcore/dpl/log/src/abstract_log_provider.cpp [moved from vcore/src/dpl/log/src/abstract_log_provider.cpp with 100% similarity]
vcore/dpl/log/src/dlog_log_provider.cpp [moved from vcore/src/dpl/log/src/dlog_log_provider.cpp with 100% similarity]
vcore/dpl/log/src/journal_log_provider.cpp [moved from vcore/src/dpl/log/src/journal_log_provider.cpp with 100% similarity]
vcore/dpl/log/src/log.cpp [moved from vcore/src/dpl/log/src/log.cpp with 100% similarity]
vcore/dpl/log/src/old_style_log_provider.cpp [moved from vcore/src/dpl/log/src/old_style_log_provider.cpp with 100% similarity]
vcore/server/include/cert-server-logic.h [moved from vcore/src/server/include/cert-server-logic.h with 100% similarity]
vcore/server/src/cert-server-logic.c [moved from vcore/src/server/src/cert-server-logic.c with 99% similarity]
vcore/server/src/cert-server-main.c [moved from vcore/src/server/src/cert-server-main.c with 99% similarity]
vcore/src/CMakeLists.txt [deleted file]
vcore/src/cert-svc/ccrl.h [deleted file]
vcore/src/cert-svc/cocsp.h [deleted file]
vcore/src/dpl/core/include/dpl/char_traits.h [deleted file]
vcore/src/dpl/core/include/dpl/file_input.h [deleted file]
vcore/src/dpl/core/include/dpl/optional.h [deleted file]
vcore/src/dpl/core/include/dpl/optional_typedefs.h [deleted file]
vcore/src/dpl/core/include/dpl/scoped_array.h [deleted file]
vcore/src/dpl/core/include/dpl/string.h [deleted file]
vcore/src/dpl/core/include/dpl/thread.h [deleted file]
vcore/src/dpl/core/include/dpl/type_list.h [deleted file]
vcore/src/dpl/core/include/dpl/waitable_event.h [deleted file]
vcore/src/dpl/core/include/dpl/waitable_handle.h [deleted file]
vcore/src/dpl/core/include/dpl/waitable_handle_watch_support.h [deleted file]
vcore/src/dpl/core/include/dpl/workaround.h [deleted file]
vcore/src/dpl/core/src/char_traits.cpp [deleted file]
vcore/src/dpl/core/src/file_input.cpp [deleted file]
vcore/src/dpl/core/src/string.cpp [deleted file]
vcore/src/dpl/core/src/thread.cpp [deleted file]
vcore/src/dpl/core/src/waitable_event.cpp [deleted file]
vcore/src/dpl/core/src/waitable_handle.cpp [deleted file]
vcore/src/dpl/core/src/waitable_handle_watch_support.cpp [deleted file]
vcore/src/dpl/db/include/dpl/db/naive_synchronization_object.h [deleted file]
vcore/src/dpl/db/include/dpl/db/orm.h [deleted file]
vcore/src/dpl/db/include/dpl/db/orm_generator.h [deleted file]
vcore/src/dpl/db/include/dpl/db/orm_interface.h [deleted file]
vcore/src/dpl/db/include/dpl/db/orm_macros.h [deleted file]
vcore/src/dpl/db/include/dpl/db/sql_connection.h [deleted file]
vcore/src/dpl/db/include/dpl/db/thread_database_support.h [deleted file]
vcore/src/dpl/db/src/orm.cpp [deleted file]
vcore/src/dpl/db/src/sql_connection.cpp [deleted file]
vcore/src/dpl/db/src/thread_database_support.cpp [deleted file]
vcore/src/dpl/test/include/dpl/test/process_pipe.h [deleted file]
vcore/src/dpl/test/src/process_pipe.cpp [deleted file]
vcore/src/vcore/CRLCacheInterface.h [deleted file]
vcore/src/vcore/CertificateStorage.h [deleted file]
vcore/src/vcore/IAbstractResponseCache.h [deleted file]
vcore/src/vcore/RevocationCheckerBase.cpp [deleted file]
vcore/src/vcore/RevocationCheckerBase.h [deleted file]
vcore/src/vcore/SSLContainers.h [deleted file]
vcore/src/vcore/VerificationStatus.cpp [deleted file]
vcore/src/vcore/VerificationStatus.h [deleted file]
vcore/src/vcore/WacOrigin.cpp [deleted file]
vcore/src/vcore/WacOrigin.h [deleted file]
vcore/vcore/Base64.cpp [moved from vcore/src/vcore/Base64.cpp with 87% similarity]
vcore/vcore/Base64.h [moved from vcore/src/vcore/Base64.h with 100% similarity]
vcore/vcore/CertStoreType.cpp [moved from vcore/src/vcore/CertStoreType.cpp with 100% similarity]
vcore/vcore/CertStoreType.h [moved from vcore/src/vcore/CertStoreType.h with 100% similarity]
vcore/vcore/Certificate.cpp [moved from vcore/src/vcore/Certificate.cpp with 100% similarity]
vcore/vcore/Certificate.h [moved from vcore/src/vcore/Certificate.h with 100% similarity]
vcore/vcore/CertificateCollection.cpp [moved from vcore/src/vcore/CertificateCollection.cpp with 85% similarity]
vcore/vcore/CertificateCollection.h [moved from vcore/src/vcore/CertificateCollection.h with 93% similarity]
vcore/vcore/CertificateConfigReader.cpp [moved from vcore/src/vcore/CertificateConfigReader.cpp with 100% similarity]
vcore/vcore/CertificateConfigReader.h [moved from vcore/src/vcore/CertificateConfigReader.h with 100% similarity]
vcore/vcore/CertificateIdentifier.h [moved from vcore/src/vcore/CertificateIdentifier.h with 100% similarity]
vcore/vcore/CertificateLoader.cpp [moved from vcore/src/vcore/CertificateLoader.cpp with 100% similarity]
vcore/vcore/CertificateLoader.h [moved from vcore/src/vcore/CertificateLoader.h with 100% similarity]
vcore/vcore/ParserSchema.h [moved from vcore/src/vcore/ParserSchema.h with 100% similarity]
vcore/vcore/ReferenceValidator.cpp [moved from vcore/src/vcore/ReferenceValidator.cpp with 94% similarity]
vcore/vcore/ReferenceValidator.h [moved from vcore/src/vcore/ReferenceValidator.h with 100% similarity]
vcore/vcore/SaxReader.cpp [moved from vcore/src/vcore/SaxReader.cpp with 100% similarity]
vcore/vcore/SaxReader.h [moved from vcore/src/vcore/SaxReader.h with 100% similarity]
vcore/vcore/SignatureData.cpp [moved from vcore/src/vcore/SignatureData.cpp with 100% similarity]
vcore/vcore/SignatureData.h [moved from vcore/src/vcore/SignatureData.h with 100% similarity]
vcore/vcore/SignatureFinder.cpp [moved from vcore/src/vcore/SignatureFinder.cpp with 100% similarity]
vcore/vcore/SignatureFinder.h [moved from vcore/src/vcore/SignatureFinder.h with 100% similarity]
vcore/vcore/SignatureReader.cpp [moved from vcore/src/vcore/SignatureReader.cpp with 100% similarity]
vcore/vcore/SignatureReader.h [moved from vcore/src/vcore/SignatureReader.h with 100% similarity]
vcore/vcore/SignatureValidator.cpp [moved from vcore/src/vcore/SignatureValidator.cpp with 100% similarity]
vcore/vcore/SignatureValidator.h [moved from vcore/src/vcore/SignatureValidator.h with 100% similarity]
vcore/vcore/TimeConversion.cpp [moved from vcore/src/vcore/TimeConversion.cpp with 100% similarity]
vcore/vcore/TimeConversion.h [moved from vcore/src/vcore/TimeConversion.h with 97% similarity]
vcore/vcore/ValidatorCommon.h [moved from vcore/src/vcore/ValidatorCommon.h with 100% similarity]
vcore/vcore/ValidatorFactories.cpp [moved from vcore/src/vcore/ValidatorFactories.cpp with 100% similarity]
vcore/vcore/ValidatorFactories.h [moved from vcore/src/vcore/ValidatorFactories.h with 97% similarity]
vcore/vcore/XmlsecAdapter.cpp [moved from vcore/src/vcore/XmlsecAdapter.cpp with 100% similarity]
vcore/vcore/XmlsecAdapter.h [moved from vcore/src/vcore/XmlsecAdapter.h with 100% similarity]
vcore/vcore/api.cpp [moved from vcore/src/vcore/api.cpp with 99% similarity]
vcore/vcore/cert-svc-client.c [moved from vcore/src/vcore/cert-svc-client.c with 99% similarity]
vcore/vcore/cert-svc-client.h [moved from vcore/src/vcore/cert-svc-client.h with 100% similarity]
vcore/vcore/exception.cpp [moved from vcore/src/vcore/exception.cpp with 100% similarity]
vcore/vcore/exception.h [moved from vcore/src/vcore/exception.h with 100% similarity]
vcore/vcore/pkcs12.cpp [moved from vcore/src/vcore/pkcs12.cpp with 99% similarity]
vcore/vcore/pkcs12.h [moved from vcore/src/vcore/pkcs12.h with 100% similarity]
vcore/vcore/utils.c [moved from vcore/src/vcore/utils.c with 100% similarity]
vcore/vcore/utils.h [moved from vcore/src/vcore/utils.h with 100% similarity]

index b4bfe53..057d99b 100644 (file)
@@ -12,8 +12,8 @@ SET(CMAKE_C_FLAGS             "${CMAKE_C_FLAGS} ${GC_SECTIONS_FLAGS}")
 SET(CMAKE_CXX_FLAGS           "${CMAKE_CXX_FLAGS} ${GC_SECTIONS_FLAGS}")
 SET(CMAKE_C_FLAGS_RELEASE     "-g -O2")
 SET(CMAKE_CXX_FLAGS_RELEASE   "-g -std=c++0x -O2")
-SET(CMAKE_C_FLAGS_DEBUG       "-g -O0")
-SET(CMAKE_CXX_FLAGS_DEBUG     "-g -std=c++0x -O0")
+SET(CMAKE_C_FLAGS_DEBUG       "-g -O0 -Wp,-U_FORTIFY_SOURCE")
+SET(CMAKE_CXX_FLAGS_DEBUG     "-g -std=c++0x -O0 -Wp,-U_FORTIFY_SOURCE")
 SET(CMAKE_C_FLAGS_CCOV        "-g -O2 --coverage")
 SET(CMAKE_CXX_FLAGS_CCOV      "-g -std=c++0x -O2 --coverage")
 SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")
@@ -30,14 +30,7 @@ SET(TARGET_CERT_SVC_LIB "cert-svc")
 SET(TARGET_VCORE_LIB "cert-svc-vcore")
 SET(TARGET_CERT_SERVER "cert-server")
 
-# test binaries
-SET(TARGET_VCOREC_TEST "cert-svc-tests-capi")
-SET(TARGET_TEST_CERT_SVC_OGIG "cert-svc-tests-orig")
-SET(TARGET_PKCS12_TEST "cert-svc-tests-pkcs12")
-SET(TARGET_VCORE_TEST "cert-svc-tests-vcore")
-
 ADD_DEFINITIONS("-DCERTSVC_SYSTEM_STORE_DB=\"${TZ_SYS_SHARE}/cert-svc/dbspace/certs-meta.db\"")
-ADD_DEFINITIONS("-DCERTSVC_VCORE_DB=\"${TZ_SYS_DB}/.cert_svc_vcore.db\"")
 ADD_DEFINITIONS("-DCERTSVC_CRT_FILE_PATH=\"${TZ_SYS_SHARE}/cert-svc/ca-certificate.crt\"")
 ADD_DEFINITIONS("-DFINGERPRINT_LIST_PATH=\"${TZ_SYS_SHARE}/ca-certificates/fingerprint/fingerprint_list.xml\"")
 ADD_DEFINITIONS("-DFINGERPRINT_LIST_SCHEMA_PATH=\"${TZ_SYS_SHARE}/ca-certificates/fingerprint/fingerprint_list.xsd\"")
index 047c0ad..7e89d4e 100644 (file)
@@ -21,7 +21,6 @@ BuildRequires: pkgconfig(libsystemd-daemon)
 BuildRequires: pkgconfig(key-manager)
 BuildRequires: pkgconfig(libtzplatform-config)
 BuildRequires: pkgconfig(libsystemd-journal)
-BuildRequires: boost-devel
 Requires: pkgconfig(libtzplatform-config)
 Requires: ca-certificates-tizen
 Requires: ca-certificates-mozilla
@@ -43,8 +42,6 @@ Certification service (development files)
 %package test
 Summary:  Certification service (tests)
 Group:    Security/Testing
-BuildRequires: pkgconfig(dpl-test-efl)
-Requires: boost-devel
 Requires: ca-certificates-tizen
 Requires: %{name} = %{version}-%{release}
 
@@ -75,13 +72,11 @@ export FFLAGS="$FFLAGS -DTIZEN_EMULATOR_MODE"
 cmake . -DPREFIX=%{_prefix} \
         -DEXEC_PREFIX=%{_exec_prefix} \
         -DLIBDIR=%{_libdir} \
-        -DBINDIR=%{_bindir} \
         -DINCLUDEDIR=%{_includedir} \
         -DTZ_SYS_SHARE=%TZ_SYS_SHARE \
         -DTZ_SYS_BIN=%TZ_SYS_BIN \
         -DTZ_SYS_ETC=%TZ_SYS_ETC \
         -DTZ_SYS_RO_WRT_ENGINE=%TZ_SYS_RO_WRT_ENGINE \
-        -DTZ_SYS_DB=%TZ_SYS_DB \
 %if 0%{?certsvc_test_build}
         -DCERTSVC_TEST_BUILD=1 \
         -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP \
@@ -180,22 +175,10 @@ rm %{TZ_SYS_BIN}/initialize_store_db.sh
 %files test
 %defattr(644,system,system,755)
 %attr(755,root,root) %{TZ_SYS_BIN}/cert-svc-test*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_widget_uncompressed/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_widget_uncompressed_negative_hash/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_widget_uncompressed_negative_signature/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_widget_uncompressed_negative_certificate/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_widget_uncompressed_partner/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_widget_uncompressed_partner_operator/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_keys/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_certs/*
-%{TZ_SYS_RO_APP}/widget/tests/vcore_config/*
-%{TZ_SYS_RO_APP}/widget/tests/pkcs12/*
-%{TZ_SYS_RO_APP}/widget/tests/reference/*
+%{TZ_SYS_RO_APP}/widget/tests/*
 %{TZ_SYS_ETC}/ssl/certs/8956b9bc.0
-%{TZ_SYS_SHARE}/ca-certificates/wac/root_cacert0.pem
 %{TZ_SYS_SHARE}/cert-svc/pkcs12/*
 %{TZ_SYS_SHARE}/cert-svc/cert-type/*
-%{TZ_SYS_SHARE}/cert-svc/tests/orig_c/data/caflag/*
 %{TZ_SYS_SHARE}/cert-svc/certs/root_ca*.der
 %{TZ_SYS_SHARE}/cert-svc/tests/*
 %endif
index ee84402..92c83f6 100644 (file)
 #    limitations under the License.
 #
 
-PKG_CHECK_MODULES(VCORE_TEST_DEP
+SET(TARGET_VCOREC_TEST "cert-svc-tests-capi")
+SET(TARGET_TEST_CERT_SVC_OGIG "cert-svc-tests-orig")
+SET(TARGET_PKCS12_TEST "cert-svc-tests-pkcs12")
+SET(TARGET_VCORE_TEST "cert-svc-tests-vcore")
+
+PKG_CHECK_MODULES(TEST_DEP
     REQUIRED
-    dpl-test-efl
-    sqlite3
+    libpcrecpp
+    )
+
+SET(TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+
+SET(DPL_TEST_SOURCES
+    ${TEST_DIR}/dpl/src/assert.cpp
+    ${TEST_DIR}/dpl/src/binary_queue.cpp
+    ${TEST_DIR}/dpl/src/colors.cpp
+    ${TEST_DIR}/dpl/src/errno_string.cpp
+    ${TEST_DIR}/dpl/src/exception.cpp
+    ${TEST_DIR}/dpl/src/noncopyable.cpp
+    ${TEST_DIR}/dpl/src/singleton.cpp
+    ${TEST_DIR}/dpl/src/test_results_collector.cpp
+    ${TEST_DIR}/dpl/src/test_runner.cpp
+    ${TEST_DIR}/dpl/src/test_runner_child.cpp
+    ${TEST_DIR}/dpl/src/test_runner_multiprocess.cpp
+    ${TEST_DIR}/dpl/src/value_separated_policies.cpp
+    ${TEST_DIR}/dpl/src/value_separated_tokens.cpp
+
     )
 
 INCLUDE_DIRECTORIES(
     SYSTEM
-    ${VCORE_TEST_DEP_INCLUDE_DIRS}
+    ${TEST_DEP_INCLUDE_DIRS}
     ${PROJECT_SOURCE_DIR}/include
-    ${PROJECT_SOURCE_DIR}/vcore/src
+    ${PROJECT_SOURCE_DIR}/vcore
+    ${TEST_DIR}/dpl/include
     )
 
 ADD_SUBDIRECTORY(capi)
index 9c96275..265779c 100644 (file)
@@ -29,13 +29,11 @@ INCLUDE_DIRECTORIES(
     ${PROJECT_SOURCE_DIR}/include
     )
 
-ADD_EXECUTABLE(${TARGET_VCOREC_TEST} ${VCOREC_TESTS_SOURCES})
+ADD_EXECUTABLE(${TARGET_VCOREC_TEST} ${VCOREC_TESTS_SOURCES} ${DPL_TEST_SOURCES})
 
 TARGET_LINK_LIBRARIES(${TARGET_VCOREC_TEST}
     ${TARGET_VCORE_LIB}
-    ${TARGET_CERT_SVC_LIB}
-    ${VCORE_TEST_DEP_LIBRARIES}
-    -ldl
+    ${TEST_DEP_LIBRARIES}
     )
 
 INSTALL(TARGETS ${TARGET_VCOREC_TEST}
@@ -64,9 +62,9 @@ INSTALL(FILES
     ${PROJECT_SOURCE_DIR}/tests/capi/data/cert1.der
     ${PROJECT_SOURCE_DIR}/tests/capi/data/cert2fake.pem
     ${PROJECT_SOURCE_DIR}/tests/capi/data/cert3fake.der
+    ${PROJECT_SOURCE_DIR}/tests/capi/data/root_cacert0.pem
     DESTINATION ${TZ_SYS_SHARE}/cert-svc/cert-type/
     PERMISSIONS OWNER_READ
                 GROUP_READ
                 WORLD_READ
     )
-
index 41d97d3..ab0702e 100644 (file)
  *    limitations under the License.
  */
 /*
- * @file        main.cpp
+ * @file        api_tests.cpp
  * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
  * @version     1.0
  * @brief       This file is the implementation file of main
  */
+
 #include <dpl/test/test_runner.h>
 
-#include <cert-svc/ccert.h>
+#include <api_tests.h>
 
 CertSvcInstance vinstance;
 
 int main (int argc, char *argv[])
 {
     certsvc_instance_new(&vinstance);
-    int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
+    int status = VcoreDPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
     certsvc_instance_free(vinstance);
     return status;
 }
index f62f3d2..54416e4 100644 (file)
@@ -21,8 +21,5 @@
  */
 
 #include <cert-svc/cinstance.h>
-#include <cert-svc/ccert.h>
-#include <cert-svc/cpkcs12.h>
-#include <cert-svc/cprimitives.h>
 
 extern CertSvcInstance vinstance;
similarity index 96%
rename from tests/vcore/test-cases/keys/root_cacert0.pem
rename to tests/capi/data/root_cacert0.pem
index 7aa429f..572d525 100644 (file)
@@ -24,14 +24,14 @@ Certificate:
                     ca:bc:44:d9:ce:7d:5a:f2:f3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
-            X509v3 Subject Key Identifier: 
+            X509v3 Subject Key Identifier:
                 82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
-            X509v3 Authority Key Identifier: 
+            X509v3 Authority Key Identifier:
                 keyid:82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
                 DirName:/C=PL/ST=Maz/O=Samsung/OU=SPRC/CN=Samsung/emailAddress=samsung@samsung.com
                 serial:C7:4A:82:F6:9D:1B:F6:7D
 
-            X509v3 Basic Constraints: 
+            X509v3 Basic Constraints:
                 CA:TRUE
     Signature Algorithm: sha1WithRSAEncryption
         0f:cb:a3:cd:25:02:00:17:a9:c5:21:4a:6e:bb:ce:d9:14:74:
index 9138831..5bc0b02 100644 (file)
  *    limitations under the License.
  */
 #include <string>
-
+#include <cstring>
 #include <openssl/x509.h>
-
 #include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
+
+#include <cert-svc/ccert.h>
+#include <cert-svc/cpkcs12.h>
+#include <cert-svc/cprimitives.h>
 
 #include <api_tests.h>
 
@@ -35,7 +37,7 @@ RUNNER_TEST(test01_certificate_new_from_file)
     CertSvcCertificate cert;
     int result = certsvc_certificate_new_from_file(
         vinstance,
-        "/usr/share/ca-certificates/wac/root_cacert0.pem",
+        "/usr/share/cert-svc/cert-type/root_cacert0.pem",
         &cert);
     RUNNER_ASSERT_MSG(CERTSVC_TRUE == result, "Error reading certificate");
 
@@ -688,7 +690,6 @@ RUNNER_TEST(test14_certificate_verify)
     int result, status;
 
     for (int i=0; i<MAXC; ++i) {
-        LogDebug("Reading certificate: " << i);
         int result = certsvc_certificate_new_from_memory(
             vinstance,
             (const unsigned char*)cert[i].c_str(),
@@ -778,8 +779,6 @@ RUNNER_TEST(test15_cprimitives)
     X509_NAME_oneline(name, buffer, MAXB);
     std::string expected = "/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority";
 
-    LogDebug("NAME: " << buffer);
-
     RUNNER_ASSERT_MSG(expected == buffer, "Content does not match");
 
     certsvc_certificate_free_x509(x509);
@@ -833,7 +832,6 @@ RUNNER_TEST(test16_certificate_verify_with_caflag_selfsign_root)
     int result, status;
 
     for (int i=0; i<MAXC; ++i) {
-        LogDebug("Reading certificate: " << i);
         int result = certsvc_certificate_new_from_memory(
             vinstance,
             (const unsigned char*)cert[i].c_str(),
index e01fbb7..ce77d7b 100644 (file)
@@ -18,7 +18,6 @@
 #include <openssl/x509.h>
 
 #include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
 #include <memory>
 
 #include <api_tests.h>
index ac7a2d9..e9a6ad4 100644 (file)
@@ -29,12 +29,11 @@ INCLUDE_DIRECTORIES(
     ${PROJECT_SOURCE_DIR}/include
     )
 
-ADD_EXECUTABLE(${TARGET_TEST_CERT_SVC_OGIG} ${CERT_SVC_OGIG_TESTS_SOURCES})
+ADD_EXECUTABLE(${TARGET_TEST_CERT_SVC_OGIG} ${CERT_SVC_OGIG_TESTS_SOURCES} ${DPL_TEST_SOURCES})
 
-TARGET_LINK_LIBRARIES(
-    ${TARGET_TEST_CERT_SVC_OGIG}
+TARGET_LINK_LIBRARIES(${TARGET_TEST_CERT_SVC_OGIG}
     ${TARGET_CERT_SVC_LIB}
-    ${VCORE_TEST_DEP_LIBRARIES}
+    ${TEST_DEP_LIBRARIES}
     )
 
 INSTALL(TARGETS ${TARGET_TEST_CERT_SVC_OGIG}
diff --git a/tests/dpl/src/assert.cpp b/tests/dpl/src/assert.cpp
new file mode 100644 (file)
index 0000000..74c41f3
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        assert.cpp
+ * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
+ * @version     1.0
+ * @brief       This file is the implementation file of assert
+ */
+#include <cstdlib>
+#include <sstream>
+#include <iostream>
+#include <stddef.h>
+#include <dpl/assert.h>
+#include <dpl/colors.h>
+#include <dpl/exception.h>
+
+namespace VcoreDPL {
+void AssertProc(const char *condition,
+                const char *file,
+                int line,
+                const char *function)
+{
+
+#define INTERNAL_LOG(message)          \
+do {                                   \
+    std::cerr << message << std::endl; \
+} while (0)
+
+    // Try to log failed assertion to log system
+    Try {
+        INTERNAL_LOG("########################################################################");
+        INTERNAL_LOG("###                      DPL assertion failed!                       ###");
+        INTERNAL_LOG("########################################################################");
+        INTERNAL_LOG("### Condition: " << condition);
+        INTERNAL_LOG("### File: " << file);
+        INTERNAL_LOG("### Line: " << line);
+        INTERNAL_LOG("### Function: " << function);
+        INTERNAL_LOG("########################################################################");
+    } catch (Exception) {
+        // Just ignore possible double errors
+    }
+
+    // Fail with c-library abort
+    abort();
+}
+} // namespace VcoreDPL
similarity index 53%
rename from vcore/src/dpl/db/src/naive_synchronization_object.cpp
rename to tests/dpl/src/exception.cpp
index f67694a..c12e794 100644 (file)
  *    limitations under the License.
  */
 /*
- * @file        naive_synchronization_object.cpp
+ * @file        exception.cpp
  * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
  * @version     1.0
- * @brief       This file is the implementation file of SQL naive
- * synchronization object
+ * @brief       This file is the implementation of exception system
  */
 #include <stddef.h>
-#include <dpl/db/naive_synchronization_object.h>
-#include <dpl/thread.h>
-
-namespace {
-    unsigned int seed = time(NULL);
-}
+#include <dpl/exception.h>
+#include <iostream>
 
 namespace VcoreDPL {
-namespace DB {
-void NaiveSynchronizationObject::Synchronize()
+Exception* Exception::m_lastException = NULL;
+unsigned int Exception::m_exceptionCount = 0;
+void (*Exception::m_terminateHandler)() = NULL;
+
+void LogUnhandledException(const std::string &str)
 {
-    // Sleep for about 10ms - 30ms
-    Thread::MiliSleep(10 + rand_r(&seed) % 20);
+    std::cerr << str << std::endl;
 }
 
-void NaiveSynchronizationObject::NotifyAll()
+void LogUnhandledException(const std::string &str,
+                           const char *filename,
+                           int line,
+                           const char *function)
 {
-    // No need to inform about anything
+    std::cerr << "Exception occured on file[" << filename
+        << "] line[" << line
+        << "] function[" << function
+        << "] msg[" << str << "]" << std::endl;
 }
-} // namespace DB
 } // namespace VcoreDPL
@@ -24,6 +24,7 @@
 #include <dpl/test/test_runner.h>
 #include <dpl/test/test_runner_child.h>
 #include <dpl/test/test_runner_multiprocess.h>
+#include <dpl/exception.h>
 #include <poll.h>
 #include <limits.h>
 #include <sys/wait.h>
index 50d2d84..3415e3b 100644 (file)
@@ -28,12 +28,11 @@ INCLUDE_DIRECTORIES(
     ${PROJECT_SOURCE_DIR}/tests/pkcs12
     )
 
-ADD_EXECUTABLE(${TARGET_PKCS12_TEST} ${PKCS12_TEST_SOURCES})
+ADD_EXECUTABLE(${TARGET_PKCS12_TEST} ${PKCS12_TEST_SOURCES} ${DPL_TEST_SOURCES})
 
 TARGET_LINK_LIBRARIES(${TARGET_PKCS12_TEST}
     ${TARGET_VCORE_LIB}
-    ${VCORE_TEST_DEP_LIBRARIES}
-    -ldl
+    ${TEST_DEP_LIBRARIES}
     )
 
 INSTALL(TARGETS ${TARGET_PKCS12_TEST}
index c304ba2..818847b 100644 (file)
 /*
  * @file        new_test_cases.cpp
  * @author      Madhan A K (madhan.ak@samsung.com)
- * @version     1.0
+ * @author      Kyungwook Tak (k.tak@samsung.com)
+ * @version     2.0
  * @brief       PKCS#12 test cases.
  */
 
-#include <string.h>
 #include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <dpl/test/test_runner.h>
-#include <cert-svc/cinstance.h>
-#include <cert-svc/ccert.h>
-#include <cert-svc/cpkcs12.h>
-#include <cert-svc/cerror.h>
-#include <cert-svc/cprimitives.h>
-#include <cert-service.h>
-#include <cert-service-debug.h>
+#include <cstring>
+#include <new>
+
 #include <openssl/err.h>
 #include <openssl/pkcs12.h>
 #include <openssl/sha.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
-#include <time.h>
+
+#include <cert-svc/cinstance.h>
+#include <cert-svc/ccert.h>
+#include <cert-svc/cpkcs12.h>
+#include <cert-svc/cerror.h>
+#include <cert-svc/cprimitives.h>
+
+#include <dpl/test/test_runner.h>
 
 static CertSvcInstance instance;
 
-#define CREATE_INSTANCE                                   \
+static CertSvcString wrapper_certsvc_string_new(const char *cStr)
+{
+       CertSvcString certsvcStr;
+
+       if (!cStr) {
+               certsvcStr.privateHandler = NULL;
+               return certsvcStr;
+       }
+
+       RUNNER_ASSERT_MSG(
+               certsvc_string_new(instance, cStr, strlen(cStr), &certsvcStr) == CERTSVC_SUCCESS,
+               "Failed to certsvc_string_new");
+
+       return certsvcStr;
+}
+
+const CertStoreType allStoreType = (CertStoreType)(WIFI_STORE | VPN_STORE | EMAIL_STORE);
+
+#define CREATE_INSTANCE \
   certsvc_instance_new(&instance);
-#define FREE_INSTANCE                                     \
+#define FREE_INSTANCE  \
   certsvc_instance_free(instance);
 
-/* Getting the certificate list from system_store */
-RUNNER_TEST(CERTSVC_PKCS12_1001_certsvc_get_root_cert_list) {
-
-       CertStoreType storeType = SYSTEM_STORE;
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       int result;
-       int count = 0;
+RUNNER_TEST(CERTSVC_PKCS12_1001_certsvc_get_root_cert_list)
+{
        CREATE_INSTANCE
 
+       CertSvcStoreCertList* certList = NULL;
        size_t length = 0;
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-       if(result == CERTSVC_SUCCESS)
-       {
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmpNode = tmpNode->next;
-         }
-
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-       }
+       int result = certsvc_pkcs12_get_certificate_list_from_store(instance, SYSTEM_STORE, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from system store failed");
+
+       result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
 
        FREE_INSTANCE
 }
 
-/* Set the status of the certificate to disabled/enabled in system store and get the status */
 RUNNER_TEST(CERTSVC_PKCS12_1002_certsvc_set_cert_to_disabled_and_get_status_for_system_store)
 {
-       CertStoreType storeType = SYSTEM_STORE;
-       CertStatus Status;
-       CertStatus status;
+       CertStatus status = ENABLED;
        int result;
-       CertSvcString Alias;
 
        CREATE_INSTANCE
 
-       result = certsvc_string_new(instance, "Certum_Root_CA.pem", strlen("Certum_Root_CA.pem"), &Alias);
-       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_string_new failed. result : " << result);
+       CertSvcString Alias = wrapper_certsvc_string_new("Certum_Root_CA.pem");
 
-       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       result = certsvc_pkcs12_get_certificate_status_from_store(instance, SYSTEM_STORE, Alias, &status);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from system store failed.");
 
        // if status is already disabled, roll it back to enable and go on
        if (status == DISABLED) {
-               result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, ENABLED);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Roll back certificate status to system store failed.");
+               result = certsvc_pkcs12_set_certificate_status_to_store(instance, SYSTEM_STORE, DISABLED, Alias, ENABLED);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Roll back certificate status to system store failed.");
        }
 
-       Status=DISABLED;
-       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, Status);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+       result = certsvc_pkcs12_set_certificate_status_to_store(instance, SYSTEM_STORE, DISABLED, Alias, DISABLED);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Set certificate status to system store failed.");
 
-       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       result = certsvc_pkcs12_get_certificate_status_from_store(instance, SYSTEM_STORE, Alias, &status);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       RUNNER_ASSERT_MSG(status == DISABLED, "invalid status from system store cert");
 
-       Status=ENABLED;
-       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, Status);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+       result = certsvc_pkcs12_set_certificate_status_to_store(instance, SYSTEM_STORE, DISABLED, Alias, ENABLED);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Set certificate status to system store failed.");
 
-       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       result = certsvc_pkcs12_get_certificate_status_from_store(instance, SYSTEM_STORE, Alias, &status);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       RUNNER_ASSERT_MSG(status == ENABLED, "invalid status from system store cert");
 
        certsvc_string_free(Alias);
 
@@ -121,1231 +119,816 @@ RUNNER_TEST(CERTSVC_PKCS12_1002_certsvc_set_cert_to_disabled_and_get_status_for_
 /* Install a CRT file to individual stores */
 RUNNER_TEST(CERTSVC_PKCS12_1003_add_pem_file_in_individual_store)
 {
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       CertStoreType type;
        int result;
-       size_t length = 0;
-       int count = 0;
-
-       CertSvcStoreCertList* certList1 = NULL;
-       CertSvcString buffer1, gname;
-       CertSvcString buffer2;
-       const char *temp = NULL;
-       CertSvcCertificate certificate;
-
-       CertSvcString Alias;
-       CertSvcString Path;
-       CertSvcString Pass;
 
        CREATE_INSTANCE
 
-       Pass.privateHandler = NULL;
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifi-server.pem");
+       CertSvcString Pass = wrapper_certsvc_string_new(NULL);
 
-       const char *path = "/usr/share/cert-svc/tests/wifi-server.pem";
-       result = certsvc_string_new(instance, path, strlen(path), &Path);
-       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_string_new failed. result : " << result);
-
-       type = WIFI_STORE;
-       const char *cAlias = "PEM-wifi-server-1";
-       result = certsvc_string_new(instance, cAlias, strlen(cAlias), &Alias);
-       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_string_new failed. result : " << result);
-
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PEM file to WIFI store failed.");
+       CertSvcString Alias = wrapper_certsvc_string_new("PEM-wifi-server-1");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, WIFI_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PEM file to WIFI store failed.");
        certsvc_string_free(Alias);
 
-       type = VPN_STORE;
-       cAlias = "PEM-wifi-server-2";
-       result = certsvc_string_new(instance, cAlias, strlen(cAlias), &Alias);
-       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_string_new failed. result : " << result);
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PEM file to VPN store failed.");
+       Alias = wrapper_certsvc_string_new("PEM-wifi-server-2");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, VPN_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PEM file to VPN store failed.");
        certsvc_string_free(Alias);
 
-       type = EMAIL_STORE;
-       cAlias = "PEM-wifi-server-3";
-       result = certsvc_string_new(instance, cAlias, strlen(cAlias), &Alias);
-       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_string_new failed. result : " << result);
-
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PEM file to EMAIL store failed.");
+       Alias = wrapper_certsvc_string_new("PEM-wifi-server-3");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, EMAIL_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PEM file to EMAIL store failed.");
        certsvc_string_free(Alias);
 
-       type = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, type, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
+       certsvc_string_free(Path);
 
-       }
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from store failed.");
 
-       certList = NULL;
-       type = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, type, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       certList1=certList;
-       count = 0;
+       CertSvcStoreCertList *certListOrig = certList;
+       int count = 0;
+       CertSvcString strSubject;
+       CertSvcString strIssuer;
+       CertSvcCertificate certificate;
        while (certList) {
                result = certsvc_pkcs12_get_certificate_from_store(instance, certList->storeType, certList->gname, &certificate);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get certificate from store.");
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to get certificate from store.");
 
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &buffer1);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
-
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &buffer2);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &strSubject);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to get string field.");
 
-               certsvc_string_to_cstring(buffer1, &temp, &length);
-               certsvc_string_to_cstring(buffer2, &temp, &length);
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &strIssuer);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to get string field.");
 
-               certsvc_string_free(buffer1);
-               certsvc_string_free(buffer2);
+               certsvc_string_free(strSubject);
+               certsvc_string_free(strIssuer);
                certsvc_certificate_free(certificate);
                certList = certList->next;
                count++;
        }
-       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList1);
-       if (certList1 != NULL)
 
-       certList=NULL;
-       certList1=NULL;
-
-       certsvc_string_free(Path);
+       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListOrig);
 
        FREE_INSTANCE
 }
 
-/* Installing pem file in all store at once */
-RUNNER_TEST(CERTSVC_PKCS12_1004_add_pem_file_in_all_store) {
-
-       const char path[] = "/usr/share/cert-svc/tests/wifi-server.pem";
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       char* pass = NULL;
-       char *alias = "PEM-wifi-server-all-store";
-       CertStoreType type;
+RUNNER_TEST(CERTSVC_PKCS12_1004_add_pem_file_in_all_store)
+{
        int result;
-       int count = 0;
-       size_t length = 0;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = pass;
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       type = (CertStoreType) (VPN_STORE | EMAIL_STORE | WIFI_STORE);
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PEM file to all store failed.");
-
-       type = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, type, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-       }
 
-       FREE_INSTANCE
-}
+       CertSvcString Alias = wrapper_certsvc_string_new("PEM-wifi-server-all-store");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifi-server.pem");
+       CertSvcString Pass = wrapper_certsvc_string_new(NULL);
 
-/* Install a CRT file to individual stores */
-RUNNER_TEST(CERTSVC_PKCS12_1005_add_crt_file_in_individual_store) {
+       result = certsvc_pkcs12_import_from_file_to_store(instance, allStoreType, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PEM file to all store failed.");
 
-       const char path[] = "/usr/share/cert-svc/tests/Testing.crt";
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       char* pass = NULL;
-       char *alias = "CRT-TestingCRT1";
-       CertStoreType type;
-       int result;
+       CertSvcStoreCertList *certList = NULL;
        size_t length = 0;
-       int count = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list failed");
 
-       CertSvcStoreCertList* certList1 = NULL;
-       CertSvcString buffer1, gname;
-       CertSvcString buffer2;
-       const char *temp = NULL;
-       CertSvcCertificate certificate;
+       result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Freeing certificate list failed");
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+
+       FREE_INSTANCE
+}
+
+RUNNER_TEST(CERTSVC_PKCS12_1005_add_crt_file_in_individual_store)
+{
+       int result;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = pass;
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       type = WIFI_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing CRT file to WIFI store failed.");
-
-       type = VPN_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing CRT file to VPN store failed.");
-
-       type = EMAIL_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing CRT file to EMAIL store failed.");
-
-       type = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, type, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-       }
 
-       certList = NULL;
-       type = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, type, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       certList1=certList;
-       count = 0;
-       while(certList!=NULL)
-       {
-               gname.privateHandler = (char *)certList->gname;
-               gname.privateLength = strlen(certList->gname);
+       CertSvcString Alias = wrapper_certsvc_string_new("CRT-TestingCRT1");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/Testing.crt");
+       CertSvcString Pass = wrapper_certsvc_string_new(NULL);
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, WIFI_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing CRT file to WIFI store failed.");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, VPN_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing CRT file to VPN store failed.");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, EMAIL_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing CRT file to EMAIL store failed.");
+
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from store failed.");
+
+       CertSvcStoreCertList *certListOrig = certList;
+       int count = 0;
+       CertSvcString strSubject;
+       CertSvcString strIssuer;
+       CertSvcCertificate certificate;
+       while (certList) {
                result = certsvc_pkcs12_get_certificate_from_store(instance, certList->storeType, certList->gname, &certificate);
                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get certificate from store.");
 
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &buffer1);
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &strSubject);
                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
 
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &buffer2);
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &strIssuer);
                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
 
-               certsvc_string_to_cstring(buffer1, &temp, &length);
-               certsvc_string_to_cstring(buffer2, &temp, &length);
-
-               certsvc_string_free(buffer1);
-               certsvc_string_free(buffer2);
+               certsvc_string_free(strSubject);
+               certsvc_string_free(strIssuer);
                certsvc_certificate_free(certificate);
                certList = certList->next;
                count++;
        }
-       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList1);
-       certList=NULL;
-       certList1=NULL;
+
+       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListOrig);
 
        FREE_INSTANCE
 }
 
-/* Install a CRT file to all store at once */
-RUNNER_TEST(CERTSVC_PKCS12_1006_add_crt_file_in_all_store) {
-
-       const char path[] = "/usr/share/cert-svc/tests/Testing.crt";
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       char* pass = NULL;
-       char *alias = "CRT-TestingCRT1-all-store";
-       CertStoreType type;
+RUNNER_TEST(CERTSVC_PKCS12_1006_add_crt_file_in_all_store)
+{
        int result;
-       int count = 0;
-       size_t length = 0;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = pass;
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       type = (CertStoreType )(WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing CRT file to all store failed.");
-
-       type = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, type, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
 
-       }
+       CertSvcString Alias = wrapper_certsvc_string_new("CRT-TestingCRT1-all-store");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/Testing.crt");
+       CertSvcString Pass = wrapper_certsvc_string_new(NULL);
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, allStoreType, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing CRT file to all store failed.");
+
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from system store failed");
+
+       result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
 
        FREE_INSTANCE
 }
 
-/* Import a P12 file to individual store */
-RUNNER_TEST(CERTSVC_PKCS12_1007_install_p12_file_to_individual_store) {
-
-       const char path[] = "/usr/share/cert-svc/tests/wifiuser.p12";
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       const char pass[] = "wifi";
-       char *alias = "P12-WifiUser";
-       CertStoreType storeType;
+RUNNER_TEST(CERTSVC_PKCS12_1007_install_p12_file_to_individual_store)
+{
        int result;
-       size_t length = 0;
-       int count = 0;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
 
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = (char *)pass;
-       Pass.privateLength = strlen(pass);
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
+       CertSvcString Alias = wrapper_certsvc_string_new("P12-WifiUser");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifiuser.p12");
+       CertSvcString Pass = wrapper_certsvc_string_new("wifi");
 
-/*
-       result = certsvc_pkcs12_import_from_file(instance, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_pkcs12_import_from_file failed.");
-*/
-
-       storeType = WIFI_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing p12 file to WIFI store failed.");
-
-       storeType = VPN_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing p12 file to VPN store failed.");
-
-       storeType = EMAIL_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing p12 file to EMAIL store failed.");
-
-       storeType = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-       }
+       result = certsvc_pkcs12_import_from_file_to_store(instance, WIFI_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing p12 file to WIFI store failed.");
 
-       FREE_INSTANCE
-}
+       result = certsvc_pkcs12_import_from_file_to_store(instance, VPN_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing p12 file to VPN store failed.");
 
-/* Import a P12 file to all store */
-RUNNER_TEST(CERTSVC_PKCS12_1008_install_p12_file_to_all_store) {
+       result = certsvc_pkcs12_import_from_file_to_store(instance, EMAIL_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing p12 file to EMAIL store failed.");
 
-       const char path[] = "/usr/share/cert-svc/tests/wifiuser.p12";
        CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       const char pass[] = "wifi";
-       char *alias = "P12-WifiUser-all-store";
-       CertStoreType storeType;
-       int result;
        size_t length = 0;
-       int count =0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from system store failed");
 
-       CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = (char *)pass;
-       Pass.privateLength = strlen(pass);
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       storeType = (CertStoreType )(WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing p12 file to WIFI store failed.");
-
-       storeType = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-       }
+       result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+       certsvc_string_free(Pass);
 
        FREE_INSTANCE
 }
 
-/* Import a P12 file to individual store */
-RUNNER_TEST(CERTSVC_PKCS12_1009_install_pfx_file_to_individual_store) {
+RUNNER_TEST(CERTSVC_PKCS12_1008_install_p12_file_to_all_store)
+{
+       int result;
+
+       CREATE_INSTANCE
+
+       CertSvcString Alias = wrapper_certsvc_string_new("P12-WifiUser-all-store");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifiuser.p12");
+       CertSvcString Pass = wrapper_certsvc_string_new("wifi");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, allStoreType, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing p12 file to WIFI store failed.");
 
-       const char path[] = "/usr/share/cert-svc/tests/wifiserver.pfx";
        CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       const char pass[] = "wifi";
-       char *alias = "PFX-WifiServer";
-       CertStoreType storeType;
-       int result;
-       int count = 0;
        size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from system store failed");
 
-       CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = (char *)pass;
-       Pass.privateLength = strlen(pass);
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       storeType = WIFI_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
-
-       storeType = VPN_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PFX file to VPN store failed.");
-
-       storeType = EMAIL_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PFX file to EMAIL store failed.");
-
-       storeType = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-       }
+       result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+       certsvc_string_free(Pass);
 
        FREE_INSTANCE
 }
 
-RUNNER_TEST(CERTSVC_PKCS12_1010_install_pfx_file_to_all_store) {
+RUNNER_TEST(CERTSVC_PKCS12_1009_install_pfx_file_to_individual_store)
+{
+       int result;
+
+       CREATE_INSTANCE
+
+       CertSvcString Alias = wrapper_certsvc_string_new("PFX-WifiServer");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifiserver.pfx");
+       CertSvcString Pass = wrapper_certsvc_string_new("wifi");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, WIFI_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, VPN_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PFX file to VPN store failed.");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, EMAIL_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PFX file to EMAIL store failed.");
 
-       const char path[] = "/usr/share/cert-svc/tests/wifiserver.pfx";
-       const char pass[] = "wifi";
-       char *alias = "PFX-WifiServer-all-store";
-       CertStoreType storeType;
        CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
        size_t length = 0;
-       int count = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from system store failed");
+
+       result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+       certsvc_string_free(Pass);
+
+       FREE_INSTANCE
+}
+
+RUNNER_TEST(CERTSVC_PKCS12_1010_install_pfx_file_to_all_store)
+{
        int result;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = (char *)pass;
-       Pass.privateLength = strlen(pass);
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       storeType = (CertStoreType) (VPN_STORE | EMAIL_STORE | WIFI_STORE);
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
-
-       storeType = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-       if(result == CERTSVC_SUCCESS)
-       {
-
-         tmpNode = certList;
-         while(tmpNode != NULL)
-         {
-                 count++;
-                 tmp = tmpNode;
-                 tmpNode = tmpNode->next;
-         }
-         result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-         RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-       }
+
+       CertSvcString Alias = wrapper_certsvc_string_new("PFX-WifiServer-all-store");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifiserver.pfx");
+       CertSvcString Pass = wrapper_certsvc_string_new("wifi");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, allStoreType, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
+
+       CertSvcStoreCertList* certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from system store failed");
+
+       result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+       certsvc_string_free(Pass);
 
        FREE_INSTANCE
 }
 
 /* Getting all end user & root certificate list from WIFI,VPN,EMAIL store */
-RUNNER_TEST(CERTSVC_PKCS12_1011_get_all_end_user_certificate_from_store) {
-
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertStoreType storeType = (CertStoreType) (WIFI_STORE);
+RUNNER_TEST(CERTSVC_PKCS12_1011_get_all_end_user_certificate_from_store)
+{
        int result;
-       size_t length;
 
        CREATE_INSTANCE
 
-       result = certsvc_pkcs12_get_end_user_certificate_list_from_store(instance, storeType, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting end user certificate list from store failed.");
-       tmpNode=certList;
-       while(tmpNode!=NULL)
-       {
-               tmpNode = tmpNode->next;
-       }
+       CertSvcStoreCertList *certList = NULL;
+       size_t length;
+       result = certsvc_pkcs12_get_end_user_certificate_list_from_store(instance, WIFI_STORE, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting end user certificate list from WIFI_STORE failed.");
        certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-       certList = NULL;
-       tmpNode = NULL;
-
-       storeType = (CertStoreType) (VPN_STORE);
-       result = certsvc_pkcs12_get_end_user_certificate_list_from_store(instance, storeType, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting end user certificate list from store failed.");
-       tmpNode=certList;
-       while(tmpNode!=NULL)
-       {
-               tmpNode = tmpNode->next;
-       }
+
+       result = certsvc_pkcs12_get_end_user_certificate_list_from_store(instance, VPN_STORE, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting end user certificate list from VPN_STORE failed.");
        certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-       certList = NULL;
-       tmpNode = NULL;
-
-       storeType = (CertStoreType) (EMAIL_STORE);
-       result = certsvc_pkcs12_get_end_user_certificate_list_from_store(instance, storeType, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting end user certificate list from store failed.");
-       tmpNode=certList;
-       while(tmpNode!=NULL)
-       {
-               tmpNode = tmpNode->next;
-       }
+
+       result = certsvc_pkcs12_get_end_user_certificate_list_from_store(instance, EMAIL_STORE, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting end user certificate list from EMAIL_STORE failed.");
        certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-       certList = NULL;
-       tmpNode = NULL;
-
-       storeType = (CertStoreType) (WIFI_STORE);
-       result = certsvc_pkcs12_get_root_certificate_list_from_store(instance, storeType, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting end user certificate list from store failed.");
-       tmpNode=certList;
-       while(tmpNode!=NULL)
-       {
-               tmpNode = tmpNode->next;
-       }
+
+       result = certsvc_pkcs12_get_root_certificate_list_from_store(instance, WIFI_STORE, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting root certificate list from WIFI_STORE failed.");
        certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-       certList = NULL;
-       tmpNode = NULL;
-
-       storeType = (CertStoreType) (VPN_STORE);
-       result = certsvc_pkcs12_get_root_certificate_list_from_store(instance, storeType, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting end user certificate list from store failed.");
-       tmpNode=certList;
-       while(tmpNode!=NULL)
-       {
-               tmpNode = tmpNode->next;
-       }
+
+       result = certsvc_pkcs12_get_root_certificate_list_from_store(instance, VPN_STORE, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting root certificate list from VPN_STORE failed.");
        certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-       certList = NULL;
-       tmpNode = NULL;
-
-       storeType = (CertStoreType) (EMAIL_STORE);
-       result = certsvc_pkcs12_get_root_certificate_list_from_store(instance, storeType, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting end user certificate list from store failed.");
-       tmpNode=certList;
-       while(tmpNode!=NULL)
-       {
-               tmpNode = tmpNode->next;
-       }
+
+       result = certsvc_pkcs12_get_root_certificate_list_from_store(instance, EMAIL_STORE, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting root certificate list from EMAIL_STORE failed.");
        certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-       certList = NULL;
-       tmpNode = NULL;
 
        FREE_INSTANCE
 }
 
-/* Delete all certificate from WIFI,VPN,EMAIL store */
-RUNNER_TEST(CERTSVC_PKCS12_1012_delete_all_cert_from_multiple_store) {
-
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* certList1 = NULL;
-       CertStoreType storeType = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
+RUNNER_TEST(CERTSVC_PKCS12_1012_delete_all_cert_from_multiple_store)
+{
        int result;
-       size_t length;
        CertSvcString gname;
 
        CREATE_INSTANCE
 
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       certList1=certList;
-       while(certList1!=NULL)
-       {
-               gname.privateHandler = (char *)certList1->gname;
-               gname.privateLength = strlen(certList1->gname);
-               result = certsvc_pkcs12_delete_certificate_from_store(instance, (CertStoreType) certList1->storeType, gname);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Deleting certificate from store failed.");
-               certList1 = certList1->next;
+       CertSvcStoreCertList *certList = NULL;
+       size_t length;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from store failed.");
+
+       CertSvcStoreCertList *certListOrig = certList;
+       while (certList) {
+               gname = wrapper_certsvc_string_new(certList->gname);
+               result = certsvc_pkcs12_delete_certificate_from_store(instance, certList->storeType, gname);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Deleting certificate from store failed.");
+
+               certsvc_string_free(gname);
+
+               certList = certList->next;
        }
-       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-       certList=NULL;
+
+       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListOrig);
 
        FREE_INSTANCE
 }
 
-/* Import the file to one store and try to get the certlist from all store */
-RUNNER_TEST(CERTSVC_PKCS12_1013_install_pfx_file_to_one_store_and_get_list_from_multiple_store) {
-
-       const char path[] = "/usr/share/cert-svc/tests/wifiserver.pfx";
-       const char pass[] = "wifi";
-       char *alias = "PFX-WifiServer-one-store";
-       CertStoreType storeType;
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       CertSvcStoreCertList* tmp = NULL;
-       size_t length = 0;
-       int count = 0;
-       int result = -1;
-       gboolean exists = FALSE;
+RUNNER_TEST(CERTSVC_PKCS12_1013_install_pfx_file_to_one_store_and_get_list_from_multiple_store)
+{
+       int result;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = (char *)pass;
-       Pass.privateLength = strlen(pass);
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       storeType = (CertStoreType) (VPN_STORE | WIFI_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_check_alias_exists_in_store(instance, storeType, Alias, &exists);
-       if (exists==TRUE) {
-               /* installing the pfx in one store and getting the list from multiple store */
-               storeType = (CertStoreType) ( EMAIL_STORE );
-               result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
-
-               storeType = (CertStoreType) ( VPN_STORE | WIFI_STORE  );
-               result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
-
-               storeType = (CertStoreType) ( VPN_STORE | WIFI_STORE | EMAIL_STORE);
-               result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from system store failed");
-
-               if(result == CERTSVC_SUCCESS)
-               {
-                 tmpNode = certList;
-                 while(tmpNode != NULL)
-                 {
-                         count++;
-                         tmp = tmpNode;
-                         tmpNode = tmpNode->next;
-                 }
-                 result = certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
-                 RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Freeing certificate list from system store failed");
-               }
+
+       CertSvcString Alias = wrapper_certsvc_string_new("PFX-WifiServer-one-store");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifiserver.pfx");
+       CertSvcString Pass = wrapper_certsvc_string_new("wifi");
+
+       int isUnique = 0;
+       result = certsvc_pkcs12_check_alias_exists_in_store(instance, allStoreType, Alias, &isUnique);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "check alias exists in store failed. result : " << result);
+
+       if (!isUnique) {
+               /* TODO: remove certificate which already exists and test continue */
+               RUNNER_ASSERT_MSG(0, "Remove certificate which already exists and test continue");
        }
 
+       result = certsvc_pkcs12_import_from_file_to_store(instance, EMAIL_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PFX file to EMAIL_STORE failed.");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, WIFI_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PFX file to WIFI_STORE failed.");
+
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from all store failed");
+
+       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList);
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+       certsvc_string_free(Pass);
+
        FREE_INSTANCE
 }
 
-/* Set the status of the certificate to disabled and trying to delete store */
-RUNNER_TEST(CERTSVC_PKCS12_1014_installing_pfx_without_password_to_individual_store) {
-
-       const char path[] = "/usr/share/cert-svc/tests/without_pass.p12";
-       const char pass[] = "";
-       char *alias = "PFX-WifiServer-without-password";
-       CertStoreType storeType;
+RUNNER_TEST(CERTSVC_PKCS12_1014_installing_pfx_without_password_to_individual_store)
+{
        int result;
-       int exists;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = (char *)pass;
-       Pass.privateLength = strlen(pass);
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       storeType = (CertStoreType) (VPN_STORE | WIFI_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_check_alias_exists_in_store(instance, storeType, Alias, &exists);
-       if (exists==TRUE) {
-               storeType = (CertStoreType) (VPN_STORE | WIFI_STORE | EMAIL_STORE);
-               result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
+
+       CertSvcString Alias = wrapper_certsvc_string_new("PFX-WifiServer-without-password");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/without_pass.p12");
+       CertSvcString Pass = wrapper_certsvc_string_new("");
+
+       int isUnique = 0;
+       result = certsvc_pkcs12_check_alias_exists_in_store(instance, allStoreType, Alias, &isUnique);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "check alias exists in store failed. result : " << result);
+
+       if (!isUnique) {
+               /* TODO: remove certificate which already exists and test continue */
+               RUNNER_ASSERT_MSG(0, "Remove certificate which already exists and test continue");
        }
 
+       result = certsvc_pkcs12_import_from_file_to_store(instance, allStoreType, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Importing PFX file to all store failed. result : " << result );
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+
        FREE_INSTANCE
 }
 
-/* Get certificate from WIFI,VPN,EMAIL store */
 RUNNER_TEST(CERTSVC_PKCS12_1015_get_certificate_from_store) {
 
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* certList1 = NULL;
-       CertStoreType storeType = (CertStoreType) (WIFI_STORE | VPN_STORE | EMAIL_STORE);
        int result;
-       size_t length;
-       CertSvcString buffer1, gname;
-       CertSvcString buffer2;
-       const char *temp = NULL;
-       CertSvcCertificate certificate;
 
        CREATE_INSTANCE
 
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       certList1=certList;
-       while(certList!=NULL)
-       {
-               gname.privateHandler = (char *)certList->gname;
-               gname.privateLength = strlen(certList->gname);
-               result = certsvc_pkcs12_get_certificate_from_store(instance, certList->storeType, certList->gname, &certificate);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get certificate from store.");
+       CertSvcStoreCertList *certList = NULL;
+       size_t length;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, allStoreType, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from all store failed.");
+       if (length == 0 || !certList) {
+               /* TODO: add any cert to store for testing */
+               RUNNER_ASSERT_MSG(0, "add any cert in store for testing");
+       }
 
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &buffer1);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
+       CertSvcStoreCertList *certListOrig = certList;
+       CertSvcString strSubject;
+       CertSvcString strIssuer;
+       CertSvcCertificate certificate;
+       while (certList) {
+               result = certsvc_pkcs12_get_certificate_from_store(instance, certList->storeType, certList->gname, &certificate);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to get certificate from store.");
 
-               certsvc_string_to_cstring(buffer1, &temp, &length);
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &strSubject);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to get string field.");
 
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &buffer2);
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &strIssuer);
                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
 
-               certsvc_string_to_cstring(buffer2, &temp, &length);
-
-               certsvc_string_free(buffer1);
-               certsvc_string_free(buffer2);
+               certsvc_string_free(strSubject);
+               certsvc_string_free(strIssuer);
                certsvc_certificate_free(certificate);
                certList = certList->next;
        }
-       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList1);
-       certList=NULL;
-       certList1=NULL;
+
+       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListOrig);
 
        FREE_INSTANCE
 }
 
-/* Get certificate from system store */
-RUNNER_TEST(CERTSVC_PKCS12_1016_get_certificate_from_system_store) {
-
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* certList1 = NULL;
-       CertStoreType storeType = (CertStoreType) (SYSTEM_STORE);
-       int result = CERTSVC_SUCCESS;
-       size_t length = 0;
-       int count = 0;
-       CertSvcString buffer1, gname;
-       CertSvcString buffer2;
-       const char *temp = NULL;
-       CertSvcCertificate certificate;
+RUNNER_TEST(CERTSVC_PKCS12_1016_get_certificate_from_system_store)
+{
+       int result;
 
        CREATE_INSTANCE
 
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       certList1=certList;
-       while(certList!=NULL)
-       {
-               gname.privateHandler = (char *)certList->gname;
-               gname.privateLength = strlen(certList->gname);
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, SYSTEM_STORE, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from store failed.");
+       if (length == 0 || !certList) {
+               /* TODO: add any cert to store for testing */
+               RUNNER_ASSERT_MSG(0, "add any cert in store for testing");
+       }
+
+       CertSvcStoreCertList *certListOrig = certList;
+       CertSvcString strSubject;
+       CertSvcString strIssuer;
+       CertSvcCertificate certificate;
+       while (certList) {
                result = certsvc_pkcs12_get_certificate_from_store(instance, certList->storeType, certList->gname, &certificate);
                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get certificate from store.");
 
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &buffer1);
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_SUBJECT, &strSubject);
                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
 
-               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &buffer2);
+               result = certsvc_certificate_get_string_field(certificate, CERTSVC_ISSUER_COMMON_NAME, &strIssuer);
                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
 
-               certsvc_string_to_cstring(buffer1, &temp, &length);
-               certsvc_string_to_cstring(buffer2, &temp, &length);
-
-               certsvc_string_free(buffer1);
-               certsvc_string_free(buffer2);
+               certsvc_string_free(strSubject);
+               certsvc_string_free(strIssuer);
                certsvc_certificate_free(certificate);
                certList = certList->next;
-               count++;
        }
-       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certList1);
 
-       certList=NULL;
-       certList1=NULL;
+       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListOrig);
 
        FREE_INSTANCE
 }
 
-/* Load certificate list form store for a certificate */
-RUNNER_TEST(CERTSVC_PKCS12_1017_load_cert_list_from_store) {
-
-       CertStoreType storeType;
-       CertSvcCertificateList certList;
-       CertSvcStoreCertList* certList1 = NULL;
-       CertSvcCertificate cert;
-       int result = CERTSVC_SUCCESS;
-       size_t length = 0;
-       int i=0;
-       size_t certListlength = 0;
-       const char *temp = NULL;
-       CertSvcString buffer1,buffer2, gname;
+RUNNER_TEST(CERTSVC_PKCS12_1017_load_cert_list_from_store)
+{
+       int result;
 
        CREATE_INSTANCE
 
-       storeType = (CertStoreType) (VPN_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList1, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       while(certList1!=NULL)
-       {
-               gname.privateHandler = (char *)certList1->gname;
-               gname.privateLength = strlen(certList1->gname);
+       CertSvcStoreCertList *certListTemp = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, VPN_STORE, DISABLED, &certListTemp, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from VPN_STORE failed.");
+       if (length == 0 || !certListTemp) {
+               /* TODO: add any cert to store for testing */
+               RUNNER_ASSERT_MSG(0, "add any cert in store for testing");
+       }
 
-               result = certsvc_pkcs12_load_certificate_list_from_store(instance, storeType, gname, &certList);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Load certificate list form store failed.");
+       CertSvcString strSubject;
+       CertSvcString strIssuer;
+       CertSvcCertificate cert;
+       CertSvcString gname = wrapper_certsvc_string_new(certListTemp->gname);
 
-               result = certsvc_certificate_list_get_length(certList, &certListlength);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate list get length failed.");
+       CertSvcCertificateList certList;
+       result = certsvc_pkcs12_load_certificate_list_from_store(instance, VPN_STORE, gname, &certList);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Load certificate list form VPN_STORE failed.");
+       certsvc_string_free(gname);
 
-               for(i=0; i<certListlength; i++)
-               {
-                       result = certsvc_certificate_list_get_one(certList, i, &cert);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "certsvc_certificate_list_get_one returned not CERTSVC_SUCCESS");
+       length = 0;
+       result = certsvc_certificate_list_get_length(certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate list get length failed.");
+       RUNNER_ASSERT_MSG(length > 0, "No certificate loaded.");
 
-                       result = certsvc_certificate_get_string_field(cert, CERTSVC_SUBJECT, &buffer1);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
+       for (size_t i = 0; i < length; i++) {
+               result = certsvc_certificate_list_get_one(certList, i, &cert);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_certificate_list_get_one failed.");
 
-                       certsvc_string_to_cstring(buffer1, &temp, &length);
+               result = certsvc_certificate_get_string_field(cert, CERTSVC_SUBJECT, &strSubject);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to get string field.");
 
-                       result = certsvc_certificate_get_string_field(cert, CERTSVC_ISSUER_COMMON_NAME, &buffer2);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to get string field.");
+               result = certsvc_certificate_get_string_field(cert, CERTSVC_ISSUER_COMMON_NAME, &strIssuer);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to get string field.");
 
-                       certsvc_string_to_cstring(buffer2, &temp, &length);
-               }
-               break; // Should run for only one time //
+               certsvc_string_free(strSubject);
+               certsvc_string_free(strIssuer);
+               certsvc_certificate_free(cert);
        }
 
+       certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListTemp);
+
        FREE_INSTANCE
 }
 
-/* Load certificate list form store for a certificate */
-RUNNER_TEST(CERTSVC_PKCS12_1018_get_duplicate_private_key) {
-
-       CertStoreType storeType;
-       CertSvcStoreCertList* certList1 = NULL;
-       FILE *fp = NULL;
-       int result = CERTSVC_SUCCESS;
-       size_t length = 0;
-       CertSvcString gname;
+RUNNER_TEST(CERTSVC_PKCS12_1018_get_duplicate_private_key)
+{
        const char *privatekey_path = "/usr/share/cert-svc/pkcs12/temp.txt";
-       EVP_PKEY *privatekey = NULL;
+       int result;
 
        CREATE_INSTANCE
 
-       storeType = (CertStoreType) (VPN_STORE);
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList1, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       while(certList1!=NULL)
-       {
-               gname.privateHandler = (char *)certList1->gname;
-               gname.privateLength = strlen(certList1->gname);
-               result = certsvc_pkcs12_dup_evp_pkey_from_store(instance, storeType, gname, &privatekey);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting duplicate private key from store failed.");
-
-               if ((fp = fopen(privatekey_path, "w")) == NULL) {
-                       result = CERTSVC_FAIL;
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to open file for writing.");
-               }
+       CertSvcStoreCertList *certListTemp = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, VPN_STORE, DISABLED, &certListTemp, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from VPN_STORE failed.");
+       if (length == 0 || !certListTemp) {
+               /* TODO: add any cert to store for testing */
+               RUNNER_ASSERT_MSG(0, "add any cert in store for testing");
+       }
 
-               result = PEM_write_PrivateKey(fp, privatekey, NULL, NULL, 0, NULL, NULL);
-               RUNNER_ASSERT_MSG(result!=0, "Failed to write private key onto file.");
-               fclose(fp);
+       CertSvcString gname = wrapper_certsvc_string_new(certListTemp->gname);
+       EVP_PKEY *privatekey = NULL;
+       result = certsvc_pkcs12_dup_evp_pkey_from_store(instance, VPN_STORE, gname, &privatekey);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting duplicate private key from store failed.");
+       certsvc_string_free(gname);
 
-               certsvc_pkcs12_free_evp_pkey(privatekey);
+       FILE *fp = NULL;
+       if (!(fp = fopen(privatekey_path, "w")))
+               RUNNER_ASSERT_MSG(0, "Failed to open file for writing.");
 
-               break; // Should run for only one time //
-       }
+       result = PEM_write_PrivateKey(fp, privatekey, NULL, NULL, 0, NULL, NULL);
+       fclose(fp);
+       unlink(privatekey_path);
+
+       RUNNER_ASSERT_MSG(result != 0, "Failed to write private key onto file.");
+
+       certsvc_pkcs12_free_evp_pkey(privatekey);
 
        FREE_INSTANCE
 }
 
-/* Get certificate from system store */
-RUNNER_TEST(CERTSVC_PKCS12_1019_check_alias_exists) {
-
-       char *alias = "PFX-WifiServer-without-password";
-       CertStoreType storeType;
-       int result = CERTSVC_SUCCESS;
-       gboolean exists = FALSE;
+RUNNER_TEST(CERTSVC_PKCS12_1019_check_alias_exists)
+{
+       int result;
 
        CREATE_INSTANCE
-       CertSvcString Alias;
 
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       storeType = (CertStoreType) (VPN_STORE | WIFI_STORE | EMAIL_STORE);
-       result = certsvc_pkcs12_check_alias_exists_in_store(instance, storeType, Alias, &exists);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
+       CertSvcString Alias = wrapper_certsvc_string_new("PFX-WifiServer-without-password");
+
+       int isUnique = 0;
+       result = certsvc_pkcs12_check_alias_exists_in_store(instance, allStoreType, Alias, &isUnique);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from all store failed.");
+
+       certsvc_string_free(Alias);
 
        FREE_INSTANCE
 }
 
-/* Set the status of the certificate to disabled/enabled in wifi,vpn,email store */
-RUNNER_TEST(CERTSVC_PKCS12_1020_certsvc_set_cert_to_disabled_and_get_status_for_individual_store) {
-
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       int array[3]={VPN_STORE,WIFI_STORE,EMAIL_STORE};
-       int result = CERTSVC_SUCCESS;
-       CertSvcString Alias;
-       CertStatus Status;
-       CertStatus status;
-       size_t length = 0;
-       int count = 0;
-    int i;
+RUNNER_TEST(CERTSVC_PKCS12_1020_certsvc_set_cert_to_disabled_and_get_status_for_individual_store)
+{
+       CertStoreType storeTypeArr[3] = {VPN_STORE, WIFI_STORE, EMAIL_STORE};
+       int result;
 
        CREATE_INSTANCE
 
-       for(int j=0;j<3;j++)
-       {
-        i = array[j];
+       for (size_t j = 0; j < 3; j++) {
+               CertStoreType storeType = storeTypeArr[j];
 
-               result = certsvc_pkcs12_get_certificate_list_from_store(instance, (CertStoreType)i, DISABLED, &certList, &length);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-               tmpNode = certList;
-               while(certList!=NULL)
-               {
-                       count++;
-                       Alias.privateHandler = certList->gname;
-                       Alias.privateLength = strlen((const char*)certList->gname);
+               CertSvcStoreCertList *certList = NULL;
+               size_t length = 0;
+               result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from store failed.");
 
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+               CertSvcStoreCertList *certListOrig = certList;
+               while (certList) {
+                       CertSvcString Alias = wrapper_certsvc_string_new(certList->gname);
 
-                       Status=DISABLED;
-                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)i, DISABLED, Alias, Status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+                       CertStatus status;
+                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from system store failed.");
 
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, DISABLED);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Set certificate status to system store failed.");
 
-                       Status=ENABLED;
-                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)i, DISABLED, Alias, Status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+                       RUNNER_ASSERT_MSG(status == DISABLED, "certificate status should be disabled");
 
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, ENABLED);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+
+                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+                       RUNNER_ASSERT_MSG(status == ENABLED, "certificate status should be enabled");
+
+                       certsvc_string_free(Alias);
 
                        certList = certList->next;
                }
 
-               certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &tmpNode);
+               certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListOrig);
        }
 
        FREE_INSTANCE
 }
 
-/* Negative test case */
-/* Install a PEM file to invalid store  */
-RUNNER_TEST(CERTSVC_PKCS12_1021_add_pem_file_to_invalid_store) {
-
-       const char path[] = "/usr/share/cert-svc/tests/wifi-server.pem";
-       char* pass = NULL;
-       char *alias = "PFX-WifiServer-one-store";
+RUNNER_TEST(CERTSVC_PKCS12_1021_add_pem_file_to_invalid_store)
+{
        int result;
-       CertStoreType storeType = (CertStoreType) (-1);
-       CertSvcString Alias, Path, Pass;
 
        CREATE_INSTANCE
 
-       Alias.privateHandler = alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = pass;
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_INVALID_STORE_TYPE, "Importing certifcate with existing alias to WIFI store failed.");
-
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_INVALID_STORE_TYPE, "Importing certifcate with existing alias to VPN store failed.");
+       CertSvcString Alias = wrapper_certsvc_string_new("PFX-WifiServer-one-store");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/wifi-server.pem");
+       CertSvcString Pass = wrapper_certsvc_string_new(NULL);
 
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result==CERTSVC_INVALID_STORE_TYPE, "Importing certifcate with existing alias to EMAIL store failed.");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, (CertStoreType)-1, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result == CERTSVC_INVALID_STORE_TYPE, "Importing certifcate should be failed with invalid store type");
 
-       /* Installing a PEM certificate to system store should fail */
-       storeType = SYSTEM_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing PEM file to EMAIL store failed.");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, SYSTEM_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing PEM file to SYSTEM_STORE should be failed");
 
-       /* Removing certificate to system store should fail */
-       result = certsvc_pkcs12_delete_certificate_from_store(instance, storeType, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Deleting certificate from store failed.");
+       result = certsvc_pkcs12_delete_certificate_from_store(instance, SYSTEM_STORE, Alias);
+       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Deleting certificate from SYSTEM_STORE should be failed");
 
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
 
        FREE_INSTANCE
 }
 
-/* Set the status of the certificate to disabled/enabled from invalid store */
-RUNNER_TEST(CERTSVC_PKCS12_1022_certsvc_set_cert_to_disabled_and_get_status_for_invalid_store) {
-
-       char* gname = "eb375c3e.0";
-       CertStoreType storeType = (CertStoreType) (DISABLED);
-       CertStatus Status;
-       CertStatus status;
+RUNNER_TEST(CERTSVC_PKCS12_1022_certsvc_set_cert_to_disabled_and_get_status_for_invalid_store)
+{
        int result;
-       CertSvcString Alias;
 
        CREATE_INSTANCE
 
-       Alias.privateHandler = gname;
-       Alias.privateLength = strlen((const char*)gname);
+       CertSvcString Alias = wrapper_certsvc_string_new("eb375c3e.0");
 
-       /* getting status from a invalid store should fail */
-       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       CertStatus status;
+       result = certsvc_pkcs12_get_certificate_status_from_store(instance, NONE_STORE, Alias, &status);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Get certificate status with invalid store type should be failed");
 
-       /* setting status to a invalid store should fail */
-       Status=DISABLED;
-       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, Status);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+       result = certsvc_pkcs12_set_certificate_status_to_store(instance, NONE_STORE, DISABLED, Alias, DISABLED);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Set certificate status with invalid store type should be failed");
 
-       /* getting status from a invalid store should fail */
-       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       result = certsvc_pkcs12_get_certificate_status_from_store(instance, NONE_STORE, Alias, &status);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Get certificate status with invalid store type should be failed");
 
-       /* setting status to a invalid store should fail */
-       Status=ENABLED;
-       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, Status);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+       result = certsvc_pkcs12_set_certificate_status_to_store(instance, NONE_STORE, DISABLED, Alias, ENABLED);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Set certificate status with invalid store type should be failed");
 
-       /* setting status to a invalid store should fail */
-       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       result = certsvc_pkcs12_get_certificate_status_from_store(instance, NONE_STORE, Alias, &status);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Get certificate status with invalid store type should be failed");
 
+       certsvc_string_free(Alias);
 
        FREE_INSTANCE
 }
 
-/* Set the status of the certificate to disabled/enabled in wifi,vpn,email store */
-RUNNER_TEST(CERTSVC_PKCS12_1023_certsvc_set_cert_to_disabled_and_get_status_for_invalid_store) {
+RUNNER_TEST(CERTSVC_PKCS12_1023_certsvc_set_cert_to_disabled_and_get_status_for_invalid_store)
+{
+       CREATE_INSTANCE
 
-       CertStoreType storeType =  (CertStoreType) (0);
-       CertSvcStoreCertList* certList = NULL;
-       CertStatus Status;
-       CertStatus status;
-       size_t length;
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       int result = certsvc_pkcs12_get_certificate_list_from_store(instance, NONE_STORE, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Getting certificate list from invalid store should be failed");
+       RUNNER_ASSERT_MSG((length == 0 && certList == NULL), "no output should be returned with invalid store");
+
+       FREE_INSTANCE
+}
+
+RUNNER_TEST(CERTSVC_PKCS12_1024_certsvc_set_and_get_for_invalid_store)
+{
        int result;
-       CertSvcString Alias;
 
        CREATE_INSTANCE
 
-       /* Getting certificate list from invalid store should fail */
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       while(certList!=NULL)
-       {
-               Alias.privateHandler = certList->gname;
-               Alias.privateLength = strlen((const char*)certList->gname);
-
-               result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       CertSvcString Alias = wrapper_certsvc_string_new("TestingCRT1");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/Invalidcrt.crt");
+       CertSvcString Pass = wrapper_certsvc_string_new(NULL);
 
-               Status=DISABLED;
-               result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, Status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, WIFI_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid CRT file should be failed.");
 
-               result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, VPN_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid CRT file should be failed.");
 
-               Status=ENABLED;
-               result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, DISABLED, Alias, Status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, EMAIL_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid CRT file should be failed.");
 
-               result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, NONE_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid CRT file should be failed.");
 
-               certList = certList->next;
-       }
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
 
        FREE_INSTANCE
 }
 
-/* Intsalling an invalid crt file to valid store & invalid store*/
-RUNNER_TEST(CERTSVC_PKCS12_1024_certsvc_set_and_get_for_invalid_store) {
-
-       const char path[] = "/usr/share/cert-svc/tests/Invalidcrt.crt";
-       char* pass = NULL;
-       char *alias = "TestingCRT1";
-       CertStoreType type;
+RUNNER_TEST(CERTSVC_PKCS12_1025_install_invalid_pfx_file_to_individual_and_all_store)
+{
        int result;
 
        CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = pass;
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       /* Installing an invalid CRT file to valid store should fail */
-       type = WIFI_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing CRT file to WIFI store failed.");
-
-       /* Installing an invalid CRT file to valid store should fail */
-       type = VPN_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing CRT file to VPN store failed.");
-
-       /* Installing an invalid CRT file to valid store should fail */
-       type = EMAIL_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing CRT file to EMAIL store failed.");
-
-       /* Installing an invalid CRT file to valid store should fail */
-       type = (CertStoreType) 0;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, type, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing CRT file to EMAIL store failed.");
 
-       FREE_INSTANCE
-}
+       CertSvcString Alias = wrapper_certsvc_string_new("WifiServer-123");
+       CertSvcString Path = wrapper_certsvc_string_new("/usr/share/cert-svc/tests/test.pfx");
+       CertSvcString Pass = wrapper_certsvc_string_new("wifi");
 
-/* Import a invalid P12 file to individual and all store */
-RUNNER_TEST(CERTSVC_PKCS12_1025_install_invalid_pfx_file_to_individual_and_all_store) {
+       result = certsvc_pkcs12_import_from_file_to_store(instance, SYSTEM_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid PFX file should be failed.");
 
-       const char path[] = "/usr/share/cert-svc/tests/test.pfx";
-       const char pass[] = "wifi";
-       char *alias = "WifiServer-123";
-       CertStoreType storeType;
-       int result;
+       result = certsvc_pkcs12_import_from_file_to_store(instance, WIFI_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid PFX file should be failed.");
 
-       CREATE_INSTANCE
-       CertSvcString Alias, Path, Pass;
-
-       Alias.privateHandler = (char *)alias;
-       Alias.privateLength = strlen(alias);
-       Pass.privateHandler = (char *)pass;
-       Pass.privateLength = strlen(pass);
-       Path.privateHandler = (char *)path;
-       Path.privateLength = strlen(path);
-
-       /* importing p12/pfx to system store should fail */
-       storeType = SYSTEM_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
-
-       /* Importing invalid pfx file to valid store should fail */
-       storeType = WIFI_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing PFX file to WIFI store failed.");
-
-       /* Importing invalid pfx file to valid store should fail */
-       storeType = VPN_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing PFX file to VPN store failed.");
-
-       /* Importing invalid pfx file to valid store should fail */
-       storeType = EMAIL_STORE;
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing PFX file to EMAIL store failed.");
-
-       /* Importing invalid pfx file to valid store should fail */
-       storeType = (CertStoreType) (EMAIL_STORE | VPN_STORE | WIFI_STORE);
-       result = certsvc_pkcs12_import_from_file_to_store(instance, storeType, Path, Pass, Alias);
-       RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Importing PFX file to EMAIL store failed.");
+       result = certsvc_pkcs12_import_from_file_to_store(instance, VPN_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid PFX file should be failed.");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, EMAIL_STORE, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid PFX file should be failed.");
+
+       result = certsvc_pkcs12_import_from_file_to_store(instance, allStoreType, Path, Pass, Alias);
+       RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Importing invalid PFX file should be failed.");
+
+       certsvc_string_free(Alias);
+       certsvc_string_free(Path);
+       certsvc_string_free(Pass);
 
        FREE_INSTANCE
 }
 
-/* Set the status of the certificate to disabled/enabled in wifi,vpn,email store */
-RUNNER_TEST(CERTSVC_PKCS12_1026_deleting_a_certificate_from_invalid_store) {
-
-       CertStoreType storeType =  (CertStoreType) (WIFI_STORE);
-       CertSvcStoreCertList* certList = NULL;
-       CertStatus Status;
-       CertStatus status;
-       size_t length;
+RUNNER_TEST(CERTSVC_PKCS12_1026_enable_disable_status_certificate_from_invalid_store)
+{
        int result;
-       CertSvcString Alias;
 
        CREATE_INSTANCE
 
-       /* Getting certificate list from invalid store should fail */
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       while(certList!=NULL)
-       {
-               Alias.privateHandler = certList->gname;
-               Alias.privateLength = strlen((const char*)certList->gname);
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, WIFI_STORE, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list from store failed.");
+       if (length == 0 || !certList) {
+               /* TODO: add any cert to store for testing */
+               RUNNER_ASSERT_MSG(0, "add any cert in store for testing");
+       }
+
+       while (certList) {
+               CertSvcString Alias = wrapper_certsvc_string_new(certList->gname);
 
-               result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)-1, Alias, &status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+               CertStatus status;
+               result = certsvc_pkcs12_get_certificate_status_from_store(instance, NONE_STORE, Alias, &status);
+               RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Get certificate status from invalid store should be failed.");
 
-               Status=DISABLED;
-               result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)-1, DISABLED, Alias, Status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+               result = certsvc_pkcs12_set_certificate_status_to_store(instance, NONE_STORE, DISABLED, Alias, DISABLED);
+               RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Set certificate status to invalid store should be failed.");
 
-               result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)-1, Alias, &status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+               result = certsvc_pkcs12_get_certificate_status_from_store(instance, NONE_STORE, Alias, &status);
+               RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Get certificate status from invalid store should be failed.");
 
-               Status=ENABLED;
-               result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)-1, DISABLED, Alias, Status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Set certificate status to system store failed.");
+               result = certsvc_pkcs12_set_certificate_status_to_store(instance, NONE_STORE, DISABLED, Alias, ENABLED);
+               RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Set certificate status to invalid store should be failed.");
 
-               result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)-1, Alias, &status);
-               RUNNER_ASSERT_MSG(result!=CERTSVC_SUCCESS, "Get certificate status from system store failed.");
+               result = certsvc_pkcs12_get_certificate_status_from_store(instance, NONE_STORE, Alias, &status);
+               RUNNER_ASSERT_MSG(result != CERTSVC_SUCCESS, "Get certificate status from invalid store should be failed.");
+
+               certsvc_string_free(Alias);
 
                certList = certList->next;
        }
@@ -1354,180 +937,152 @@ RUNNER_TEST(CERTSVC_PKCS12_1026_deleting_a_certificate_from_invalid_store) {
 }
 
 #define EAP_TLS_USER_CERT_PATH   "user_cert.pem"
-#define EAP_TLS_PATH             "/tmp/"
-#define EAP_TLS_CA_CERT_PATH     "ca_cert.pem"
+#define EAP_TLS_PATH                    "/tmp/"
+#define EAP_TLS_CA_CERT_PATH    "ca_cert.pem"
 #define EAP_TLS_PRIVATEKEY_PATH  "privatekey.pem"
 
-/* Set the status of the certificate to disabled/enabled in wifi,vpn,email store */
-RUNNER_TEST(CERTSVC_PKCS12_1027_get_alias_name_from_gname_from_store) {
-
-       CertStoreType storeType =  (CertStoreType) (WIFI_STORE);
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcCertificate user_certificate;
-       CertSvcCertificateList cert_list;
-       CertSvcCertificate ca_certificate;
-       CertSvcCertificate *selected_certificate = NULL;
-       size_t length;
+RUNNER_TEST(CERTSVC_PKCS12_1027_get_alias_name_from_gname_from_store)
+{
        int result;
-       int count=1;
-       int validity;
-       size_t cert_counts = 0;
-       CertSvcString Alias;
-       char *alias = NULL;
-       X509 *x509 = NULL;
-       FILE *fp = NULL;
-       EVP_PKEY *privatekey = NULL;
-       char privatekey_path[512];
-       char ca_cert_path[512];
-       char user_cert_path[512];
-       int cert_index = 0;
 
        CREATE_INSTANCE
 
-       /* Getting certificate list from invalid store should fail */
-       result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, DISABLED, &certList, &length);
-       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-       while(certList!=NULL) {
-               Alias.privateHandler = certList->gname;
-               Alias.privateLength = strlen((const char*)certList->gname);
+       CertSvcStoreCertList *certList = NULL;
+       size_t length = 0;
+       result = certsvc_pkcs12_get_certificate_list_from_store(instance, WIFI_STORE, DISABLED, &certList, &length);
+       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list failed.");
 
+       int count = 1;
+       while (certList) {
+               CertSvcString Alias = wrapper_certsvc_string_new(certList->gname);
+
+               char *alias = NULL;
                result = certsvc_pkcs12_get_alias_name_for_certificate_in_store(instance, certList->storeType, Alias, &alias);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting alias name from gname failed.");
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting alias name from gname failed.");
 
-        result = certsvc_pkcs12_load_certificate_list_from_store(instance, certList->storeType, Alias, &cert_list);
-        RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "failed to certsvc_pkcs12_load_certificate_list");
+               CertSvcCertificateList cert_list;
+               result = certsvc_pkcs12_load_certificate_list_from_store(instance, certList->storeType, Alias, &cert_list);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_pkcs12_load_certificate_list failed");
 
-        result = certsvc_certificate_list_get_length(cert_list, &cert_counts);
-        RUNNER_ASSERT_MSG(cert_counts >= 1, "there is no certificates");
+               size_t cert_counts = 0;
+               result = certsvc_certificate_list_get_length(cert_list, &cert_counts);
+               RUNNER_ASSERT_MSG(cert_counts > 0, "there is no certificates");
 
-        selected_certificate = new CertSvcCertificate[cert_counts];
-        RUNNER_ASSERT_MSG(selected_certificate != NULL, "failed to allocate memory");
+               CertSvcCertificate *selected_certificate = new CertSvcCertificate[cert_counts];
+               RUNNER_ASSERT_MSG(selected_certificate != NULL, "failed to allocate memory");
 
-        result = certsvc_certificate_list_get_one(cert_list, 0, &user_certificate);
-        RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "failed to certsvc_certificate_list_get_one");
+               CertSvcCertificate user_certificate;
+               result = certsvc_certificate_list_get_one(cert_list, 0, &user_certificate);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "certsvc_certificate_list_get_one failed");
 
+               X509 *x509 = NULL;
                result = certsvc_certificate_dup_x509(user_certificate, &x509);
 
-        sprintf(user_cert_path, "/usr/share/cert-svc/pkcs12/file_%d", count++);
-        fp = fopen(user_cert_path, "w");
-        RUNNER_ASSERT_MSG(fp != NULL, "Failed to open the file for writing");
+               char user_cert_path[512];
+               sprintf(user_cert_path, "/usr/share/cert-svc/pkcs12/file_%d", count++);
+               FILE *fp = fopen(user_cert_path, "w");
+               RUNNER_ASSERT_MSG(fp != NULL, "Failed to open the file for writing");
+
+               if (count == 5)
+                       break;
 
-               if (count==5) break;
+               result = PEM_write_X509(fp, x509);
+               fclose(fp);
 
-        result = PEM_write_X509(fp, x509);
-        fclose(fp);
-        certsvc_certificate_free_x509(x509);
+               certsvc_certificate_free_x509(x509);
                certList = certList->next;
 
-               cert_index = cert_counts - 1;
+               int cert_index = cert_counts - 1;
                selected_certificate[0] = user_certificate;
 
-        sprintf(ca_cert_path, "%s%s_%s", EAP_TLS_PATH, certList->gname, EAP_TLS_CA_CERT_PATH);
-        while (cert_index) {
-                result = certsvc_certificate_list_get_one(cert_list, cert_index, &ca_certificate);
-                RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to certsvc_certificate_list_get_one");
+               char ca_cert_path[512];
+               sprintf(ca_cert_path, "%s%s_%s", EAP_TLS_PATH, certList->gname, EAP_TLS_CA_CERT_PATH);
+               while (cert_index) {
+                       CertSvcCertificate ca_certificate;
+                       result = certsvc_certificate_list_get_one(cert_list, cert_index, &ca_certificate);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to certsvc_certificate_list_get_one");
 
-                selected_certificate[cert_counts-cert_index] = ca_certificate;
-                cert_index--;
+                       selected_certificate[cert_counts-cert_index] = ca_certificate;
+                       cert_index--;
 
-                result = certsvc_certificate_dup_x509(ca_certificate, &x509);
+                       result = certsvc_certificate_dup_x509(ca_certificate, &x509);
 
-                fp = fopen(ca_cert_path, "a");
-                RUNNER_ASSERT_MSG(fp != NULL, "Failed to open the file for writing");
+                       fp = fopen(ca_cert_path, "a");
+                       RUNNER_ASSERT_MSG(fp != NULL, "Failed to open the file for writing");
 
-                result = PEM_write_X509(fp, x509);
-                fclose(fp);
-                certsvc_certificate_free_x509(x509);
-        }
-        result = certsvc_certificate_verify(selected_certificate[0], selected_certificate, cert_counts, NULL, 0, &validity);
-        RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to verify ca_certificate");
-        RUNNER_ASSERT_MSG(validity != 0, "Invalid certificate");
+                       result = PEM_write_X509(fp, x509);
+                       fclose(fp);
 
-        result = certsvc_pkcs12_dup_evp_pkey_from_store(instance, WIFI_STORE, Alias, &privatekey);
-        RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Failed to duplicate the private key for a certificate from wifi store");
+                       certsvc_certificate_free_x509(x509);
+               }
 
-        sprintf(privatekey_path, "%s%s_%s", EAP_TLS_PATH, certList->gname, EAP_TLS_PRIVATEKEY_PATH);
-        fp = fopen(privatekey_path, "w");
-        RUNNER_ASSERT_MSG(fp != NULL, "Failed to open the file for writing");
+               int validity = 0;
+               result = certsvc_certificate_verify(selected_certificate[0], selected_certificate, cert_counts, NULL, 0, &validity);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to verify ca_certificate");
+               RUNNER_ASSERT_MSG(validity != 0, "Invalid certificate");
 
-        result = PEM_write_PrivateKey(fp, privatekey, NULL, NULL, 0, NULL, NULL);
-        fclose(fp);
-        certsvc_pkcs12_free_evp_pkey(privatekey);
-       }
+               EVP_PKEY *privatekey = NULL;
+               result = certsvc_pkcs12_dup_evp_pkey_from_store(instance, WIFI_STORE, Alias, &privatekey);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Failed to duplicate the private key for a certificate from wifi store");
 
-    delete []selected_certificate;
+               char privatekey_path[512];
+               sprintf(privatekey_path, "%s%s_%s", EAP_TLS_PATH, certList->gname, EAP_TLS_PRIVATEKEY_PATH);
+               fp = fopen(privatekey_path, "w");
+               RUNNER_ASSERT_MSG(fp != NULL, "Failed to open the file for writing");
 
-       FREE_INSTANCE
-}
+               result = PEM_write_PrivateKey(fp, privatekey, NULL, NULL, 0, NULL, NULL);
+               fclose(fp);
 
-/* Set the status of the certificate to disabled/enabled in wifi,vpn,email store */
-RUNNER_TEST(CERTSVC_PKCS12_1028_certsvc_set_cert_to_disabled_and_get_status_for_individual_store) {
+               certsvc_pkcs12_free_evp_pkey(privatekey);
 
-       CertSvcStoreCertList* certList = NULL;
-       CertSvcStoreCertList* tmpNode = NULL;
-       int array[3]={VPN_STORE,WIFI_STORE,EMAIL_STORE};
-       int result = CERTSVC_SUCCESS;
-       CertSvcString Alias;
-       CertStatus Status;
-       CertStatus status;
-       size_t length = 0;
-       int count = 0;
-    int i;
+               certsvc_string_free(Alias);
+               delete []selected_certificate;
+       }
 
-       CREATE_INSTANCE
+       FREE_INSTANCE
+}
 
-       for(int j=0;j<3;j++)
-       {
-        i = array[j];
+RUNNER_TEST(CERTSVC_PKCS12_1028_certsvc_set_cert_to_disabled_and_get_status_for_individual_store)
+{
+       CertStoreType array[3] = {VPN_STORE, WIFI_STORE, EMAIL_STORE};
+       int result;
 
-               result = certsvc_pkcs12_get_certificate_list_from_store(instance, (CertStoreType)i, ENABLED, &certList, &length);
-               RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Getting certificate list from store failed.");
-               tmpNode = certList;
-               while(certList!=NULL)
-               {
-                       count++;
-                       Alias.privateHandler = certList->gname;
-                       Alias.privateLength = strlen((const char*)certList->gname);
+       CREATE_INSTANCE
 
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from store failed.");
+       for (size_t j = 0; j < 3; j++) {
+               CertStoreType storeType = array[j];
 
-                       Status=DISABLED;
-                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)i, ENABLED, Alias, Status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to store failed.");
+               CertSvcStoreCertList *certList = NULL;
+               size_t length = 0;
+               result = certsvc_pkcs12_get_certificate_list_from_store(instance, storeType, ENABLED, &certList, &length);
+               RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Getting certificate list failed.");
 
-                       status = DISABLED;
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from store failed.");
+               CertSvcStoreCertList *certListOrig = certList;
+               while (certList) {
+                       CertSvcString Alias = wrapper_certsvc_string_new(certList->gname);
 
-                       Status=ENABLED;
-                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)i, ENABLED, Alias, Status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to store failed.");
+                       CertStatus status;
+                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from store failed.");
 
-                       status = DISABLED;
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from store failed.");
+                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, ENABLED, Alias, DISABLED);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Set certificate status to store failed.");
 
-                       Status=DISABLED;
-                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)i, DISABLED, Alias, Status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to store failed.");
+                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from store failed.");
 
-                       status = DISABLED;
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from store failed.");
+                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, storeType, ENABLED, Alias, ENABLED);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Set certificate status to store failed.");
 
-                       Status=ENABLED;
-                       result = certsvc_pkcs12_set_certificate_status_to_store(instance, (CertStoreType)i, DISABLED, Alias, Status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Set certificate status to store failed.");
+                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, storeType, Alias, &status);
+                       RUNNER_ASSERT_MSG(result == CERTSVC_SUCCESS, "Get certificate status from store failed.");
 
-                       status = DISABLED;
-                       result = certsvc_pkcs12_get_certificate_status_from_store(instance, (CertStoreType)i, Alias, &status);
-                       RUNNER_ASSERT_MSG(result==CERTSVC_SUCCESS, "Get certificate status from store failed.");
+                       certsvc_string_free(Alias);
 
                        certList = certList->next;
                }
 
-               certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &tmpNode);
+               certsvc_pkcs12_free_certificate_list_loaded_from_store(instance, &certListOrig);
        }
 
        FREE_INSTANCE
index 95debc4..9636524 100644 (file)
  * @brief       PKCS#12 test runner.
  */
 #include <dpl/test/test_runner.h>
-#include <cert-svc/ccert.h>
+#include <cert-svc/cinstance.h>
 
 CertSvcInstance vinstance;
 
 int main (int argc, char *argv[]) {
     certsvc_instance_new(&vinstance);
-    int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
+    int status = VcoreDPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
     certsvc_instance_free(vinstance);
     return status;
 }
index ea1360e..af7d069 100644 (file)
@@ -31,12 +31,10 @@ INCLUDE_DIRECTORIES(
     ${PROJECT_SOURCE_DIR}/tests/vcore
     )
 
-ADD_EXECUTABLE(${TARGET_VCORE_TEST} ${VCORE_TESTS_SOURCES})
+ADD_EXECUTABLE(${TARGET_VCORE_TEST} ${VCORE_TESTS_SOURCES} ${DPL_TEST_SOURCES})
 TARGET_LINK_LIBRARIES(${TARGET_VCORE_TEST}
-    ${SYS_EFL_LIBRARIES}
     ${TARGET_VCORE_LIB}
-    ${VCORE_TEST_DEP_LIBRARIES}
-    -ldl
+    ${TEST_DEP_LIBRARIES}
     )
 
 INSTALL(TARGETS ${TARGET_VCORE_TEST}
@@ -50,12 +48,6 @@ INSTALL(TARGETS ${TARGET_VCORE_TEST}
                 WORLD_EXECUTE
     )
 
-ADD_CUSTOM_COMMAND(TARGET ${TARGET_VCORE_TEST} POST_BUILD
-    COMMAND ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/create_certs.sh
-    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/
-    COMMENT "Generate certificate chains"
-    )
-
 INSTALL(FILES
     ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/widget/author-signature.xml
     ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/widget/signature1.xml
@@ -119,45 +111,3 @@ INSTALL(FILES
     ${TZ_SYS_RO_APP}/widget/tests/reference
     )
 
-INSTALL(FILES
-    ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/keys/operator.root.cert.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/keys/root_cacert0.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/keys/CAbundle.crt
-    DESTINATION
-    ${TZ_SYS_RO_APP}/widget/tests/vcore_keys
-    )
-
-INSTALL(FILES
-    ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/config/fin_list.xml
-    ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/config/fin_list.xsd
-    DESTINATION
-    ${TZ_SYS_RO_APP}/widget/tests/vcore_config/
-)
-
-INSTALL(FILES
-    ${PROJECT_SOURCE_DIR}/tests/vcore/test-cases/keys/root_cacert0.pem
-    DESTINATION
-    ${TZ_SYS_SHARE}/ca-certificates/wac/
-    )
-
-INSTALL(FILES
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/demoCA/cacert.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/1second_level.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/1third_level.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/2second_level.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/2third_level.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/3second_level.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/3third_level.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/respcert.pem
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/respcert.key
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/openssl.cnf
-    DESTINATION
-    ${TZ_SYS_RO_APP}/widget/tests/vcore_certs/
-)
-
-INSTALL(DIRECTORY
-    ${PROJECT_SOURCE_DIR}/tests/vcore/certificate-generator/demoCA
-    DESTINATION
-    ${TZ_SYS_RO_APP}/widget/tests/vcore_certs/
-)
-
diff --git a/tests/vcore/TestCRL.cpp b/tests/vcore/TestCRL.cpp
deleted file mode 100644 (file)
index 6d76978..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-#include <algorithm>
-#include <cstring>
-#include <openssl/x509v3.h>
-#include <file_input_mapping.h>
-#include <dpl/log/log.h>
-#include "TestCRL.h"
-
-using namespace ValidationCore;
-using namespace std;
-
-
-namespace {
-const char *CRL_LOOKUP_DIR = "/opt/etc/ssl/certs/";
-const char *beginCertificate = "-----BEGIN CERTIFICATE-----";
-const char *endCertificate = "-----END CERTIFICATE-----";
-const char *beginTrustedCertificate = "-----BEGIN TRUSTED CERTIFICATE-----";
-const char *endTrustedCertificate = "-----END TRUSTED CERTIFICATE-----";
-
-
-bool whiteCharacter(char a){
-    return a == '\n';
-}
-
-}
-
-TestCRL::TestCRL()
-  : CRLImpl (new CRLCacheDAO)
-{
-    //Add additional lookup dir
-    int rv = X509_LOOKUP_add_dir(m_lookup, CRL_LOOKUP_DIR, X509_FILETYPE_PEM);
-    if (!rv) {
-        LogError("Failed to add lookup dir for PEM files.");
-        ThrowMsg(CRLException::StorageError,
-                "Failed to add lookup dir for PEM files.");
-    }
-    LogInfo("CRL storage initialization complete.");
-}
-
-std::string TestCRL::getFileContent(const std::string &filename)
-{
-    //Only PEM formatted files allowed
-    LogInfo("Read file: " << filename);
-    FileInputMapping file(filename);
-    string content(reinterpret_cast<const char*>(file.GetAddress()),
-            file.GetSize());
-
-    size_t posBegin = content.find(beginCertificate);
-    size_t posEnd = content.find(endCertificate);
-    if (posBegin != string::npos &&
-        posEnd != string::npos) {
-        posBegin += strlen(beginCertificate);
-    } else {
-        posBegin = content.find(beginTrustedCertificate);
-        posEnd = content.find(endTrustedCertificate);
-        if (posBegin != string::npos &&
-            posEnd != string::npos) {
-            posBegin += strlen(beginTrustedCertificate);
-        } else {
-            LogError("Failed to parse PEM file");
-            return string();
-        }
-    }
-    //Remove whitespaces
-    string cert(content, posBegin, posEnd - posBegin);
-    cert.erase(std::remove_if(cert.begin(), cert.end(), whiteCharacter),
-            cert.end());
-
-    return cert;
-}
-
-void TestCRL::addCRLToStore(const string &filename, const string &uri)
-{
-    LogInfo("Read file: " << filename);
-    //Only PEM formatted files allowed
-    FileInputMapping file(filename);
-    char *buffer = new char[file.GetSize()];
-    memcpy(buffer, file.GetAddress(), file.GetSize());
-    CRLDataPtr crl(new  CRLData(buffer, file.GetSize(), uri));
-    updateCRL(crl);
-}
diff --git a/tests/vcore/TestCRL.h b/tests/vcore/TestCRL.h
deleted file mode 100644 (file)
index 9fd910b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-#ifndef _TEST_CRL_H
-#define _TEST_CRL_H
-
-#include <string>
-#include <vcore/CRLImpl.h>
-#include <vcore/CRLCacheDAO.h>
-
-class TestCRL : public ValidationCore::CRLImpl
-{
-  public:
-    TestCRL();
-
-    void addCRLToStore(const std::string &filename, const std::string &uri);
-
-    //convinient function
-    std::string getFileContent(const std::string &filename);
-};
-
-#endif
index 90d8552..1d920cd 100644 (file)
@@ -36,66 +36,6 @@ const std::string widget_partner_path =
 const std::string widget_partner_operator_path =
     "/usr/apps/widget/tests/vcore_widget_uncompressed_partner_operator/";
 
-
-const std::string keys_path = "/usr/apps/widget/tests/vcore_keys/";
-const std::string widget_store_path = "/usr/apps/widget/tests/vcore_widgets/";
-const std::string cert_store_path = "/usr/apps/widget/tests/vcore_certs/";
-
-const std::string anka_ec_key_type = "urn:oid:1.2.840.10045.3.1.7";
-const std::string anka_ec_public_key =
-        "BGi9RmTUjpqCpQjx6SSiKdfmtjQBFNSN7ghm6TuaH9r4x73WddeLxLioH3VEmFLC+QLiR"\
-        "kPxDxL/6YmQdgfGrqk=";
-
-const std::string rsa_modulus =
-        "ocwjKEFaPxLNcPTz2PtT2Gyu5jzkWaPo4thjZo3rXuNbD4TzjY02UGnTxvflNeORLpSS1"\
-        "PeYr/1E/Nhr7qQAzj9g0DwW7p8zQEdOUi3v76VykeB0pFJH+0Fxp6LVBX9Z+EvZk+dbOy"\
-        "GJ4Njm9B6M09axXlV11Anj9B/HYUDfDX8=";
-const std::string rsa_exponent = "AQAB";
-
-const std::string magda_dsa_p =
-        "2BYIQj0ePUVxzrdBT41eCblraa9Dqag7QXFMCRM2PtyS22JPDKuV77tBc/jg0V3htHWdR"\
-        "q9n6/kQDwrP7FIPoLATLIiC3oAYWj46Mr6d9k/tt/JZU6PvULmB2k1wrrmvKUi+U+I5Ro"\
-        "qe8ui8lqR9pp9u2WCh2QmFfCohKNjN5qs=";
-const std::string magda_dsa_q = "4p4JcDqz+S7CbWyd8txApZw0sik=";
-const std::string magda_dsa_g =
-        "AQrLND1ZGFvzwBpPPXplmPh1ijPx1O2gQEvPvyjR88guWcGqQc0m7dTb6PEvbI/oZ0o91"\
-        "k7VEkfthURnNR1WtOLT8dmAuKQfwTQLPwCwUM/QiuWSlCyKLTE4Ev8aOG7ZqWudsKm/td"\
-        "n9pUNGtcod1wo1ZtP7PfEJ6rYZGQDOlz8=";
-
-const std::string tizen_partner =
-"MIICozCCAgwCCQD9IBoOxzq2hjANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMC"
-"S1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6"
-"ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEq"
-"MCgGA1UEAwwhVGl6ZW4gUGFydG5lciBEaXN0cmlidXRvciBSb290IENBMB4XDTEy"
-"MTAyNjA4MTIzMVoXDTIyMTAyNDA4MTIzMVowgZUxCzAJBgNVBAYTAktSMQ4wDAYD"
-"VQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3Qg"
-"Q0ExIjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKjAoBgNVBAMM"
-"IVRpemVuIFBhcnRuZXIgRGlzdHJpYnV0b3IgUm9vdCBDQTCBnzANBgkqhkiG9w0B"
-"AQEFAAOBjQAwgYkCgYEAnIBA2qQEaMzGalP0kzvwUxdCC6ybSC/fb+M9iGvt8QXp"
-"ic2yARQB+bIhfbEu1XHwE1jCAGxKd6uT91b4FWr04YwnBPoRX4rBGIYlqo/dg+pS"
-"rGyFjy7vfr0BOdWp2+WPlTe7SOS6bVauncrSoHxX0spiLaU5LU686BKr7YaABV0C"
-"AwEAATANBgkqhkiG9w0BAQUFAAOBgQAX0Tcfmxcs1TUPBdr1U1dx/W/6Y4PcAF7n"
-"DnMrR0ZNRPgeSCiVLax1bkHxcvW74WchdKIb24ZtAsFwyrsmUCRV842YHdfddjo6"
-"xgUu7B8n7hQeV3EADh6ft/lE8nalzAl9tALTxAmLtYvEYA7thvDoKi1k7bN48izL"
-"gS9G4WEAUg==";
-
-const std::string tizen_partner_operator =
-"MIICzDCCAjWgAwIBAgIJAJrv22F9wyp/MA0GCSqGSIb3DQEBBQUAMIGeMQswCQYD"
-"VQQGEwJLUjEOMAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQK"
-"DA1UaXplbiBUZXN0IENBMSIwIAYDVQQLDBlUaXplbiBEaXN0cmlidXRvciBUZXN0"
-"IENBMTMwMQYDVQQDDCpUaXplbiBQYXJ0bmVyLU9wZXJhdG9yIERpc3RyaWJ1dG9y"
-"IFJvb3QgQ0EwHhcNMTIxMjEzMDUzOTMyWhcNMjIxMjExMDUzOTMyWjCBnjELMAkG"
-"A1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UE"
-"CgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVz"
-"dCBDQTEzMDEGA1UEAwwqVGl6ZW4gUGFydG5lci1PcGVyYXRvciBEaXN0cmlidXRv"
-"ciBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9X0Hw0EfAuagg"
-"De9h6Jtvh8Df4fyVbvLm9VNea/iVP3/qTbG8tNqoQ32lu0SwzAZBnjpvpbxzsWs9"
-"pSYo7Ys1fymHlu+gf+kmTGTVscBrAHWkr4O0m33x2FYfy/wmu+IImnRDYDud83rN"
-"tjQmMO6BihN9Lb6kLiEtVIa8ITwdQwIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0G"
-"CSqGSIb3DQEBBQUAA4GBAHS2M2UnfEsZf80/sT84xTcfASXgpFL/1M5HiAVpR+1O"
-"UwLpLyqHiGQaASuADDeGEfcIqEf8gP1SzvnAZqLx9GchbOrOKRleooVFH7PRxFBS"
-"VWJ5Fq46dJ1mCgTWSkrL6dN5j9hWCzzGfv0Wco+NAf61n9kVbCv7AScIJwQNltOy";
-
 const std::string googleCA =
 "MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG"
 "A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz"
@@ -188,38 +128,6 @@ const std::string certVerisign =
 "Q43GPhumSg9a6S3hnyw8DX5OiUGmqgQrtSeDRsNmWqtWizEQbe+fotZpEn/7zYTa"
 "tk1ni/k5jDH/QeuG";
 
-const std::string crlExampleCertificate =
-"MIIFlDCCBHygAwIBAgIBADANBgkqhkiG9w0BAQUFADBDMRIwEAYKCZImiZPyLGQB"
-"GRYCZXMxGDAWBgoJkiaJk/IsZAEZFghpcmlzZ3JpZDETMBEGA1UEAxMKSVJJU0dy"
-"aWRDQTAeFw0wNTA2MjgwNTAyMjhaFw0xNTA2MjYwNTAyMjhaMEMxEjAQBgoJkiaJ"
-"k/IsZAEZFgJlczEYMBYGCgmSJomT8ixkARkWCGlyaXNncmlkMRMwEQYDVQQDEwpJ"
-"UklTR3JpZENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1CQiWlff"
-"ajoMSTuismKqLQ+Mt33Tq4bBpCZvCBXhqan1R0ksILPtK1L7C8QWqPk6AZZpuNmY"
-"cNVtJGc8ksgDWvX0EB3GKwZTZ8RrSRlSEe9Otq+Ur7S9uxM1JMmCr6zZTMFANzBS"
-"4btnduV78C09IhFYG4OW8IPhNrbfPaeOR+PRPAa/qdSONAwTrM1sZkIvGpAkBWM6"
-"Pn7TK9BAK6GLvwgii780fWj3Cwgmp8EDCTievBbWj+z8/apMEy9R0vyB2dWNNCnk"
-"6q8VvrjgMsJt33O3BqOoBuZ8R/SS9OFWLFSU3s7cfrRaUSJk/Mx8OGFizRkcXSzX"
-"0Nidcg7hX5i78wIDAQABo4ICkTCCAo0wDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E"
-"FgQUnUJkLlupXvH/bMg8NtPxtkOYrRowawYDVR0jBGQwYoAUnUJkLlupXvH/bMg8"
-"NtPxtkOYrRqhR6RFMEMxEjAQBgoJkiaJk/IsZAEZFgJlczEYMBYGCgmSJomT8ixk"
-"ARkWCGlyaXNncmlkMRMwEQYDVQQDEwpJUklTR3JpZENBggEAMA4GA1UdDwEB/wQE"
-"AwIBxjARBglghkgBhvhCAQEEBAMCAAcwOwYJYIZIAYb4QgENBC4WLElSSVNHcmlk"
-"IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENlcnRpZmljYXRlMIGZBgNVHR8EgZEw"
-"gY4wLqAsoCqGKGh0dHA6Ly93d3cuaXJpc2dyaWQuZXMvcGtpL2NybC9jYWNybC5w"
-"ZW0wXKBaoFiGVmxkYXA6Ly9sZGFwLmlyaXNncmlkLmVzOjEzODAvY249SVJJU0dy"
-"aWRDQSxkYz1pcmlzZ3JpZCxkYz1lcz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0"
-"MDcGCWCGSAGG+EIBAwQqFihodHRwOi8vd3d3LmlyaXNncmlkLmVzL3BraS9jcmwv"
-"Y2FjcmwucGVtME4GCWCGSAGG+EIBCARBFj9odHRwOi8vd3d3LmlyaXNncmlkLmVz"
-"L3BraS9wb2xpY3kvMS4zLjYuMS40LjEuNzU0Ny4yLjIuNC4xLjEuMS8waQYDVR0g"
-"BGIwYDBeBg0rBgEEAbp7AgIEAQEBME0wSwYIKwYBBQUHAgEWP2h0dHA6Ly93d3cu"
-"aXJpc2dyaWQuZXMvcGtpL3BvbGljeS8xLjMuNi4xLjQuMS43NTQ3LjIuMi40LjEu"
-"MS4xLzANBgkqhkiG9w0BAQUFAAOCAQEAaqRfyLER+P2QOZLLdz66m7FGsgtFsAEx"
-"wiNrIChFWfyHVZG7Ph1fn/GDD5LMsrU23lx3NBN5/feHuut1XNYKNs8vtV07D70r"
-"DKjUlPbmWV0B+/GDxe1FDGop/tKQfyHSUaBuauXChFU/2INu5lhBerNl7QxNJ1ws"
-"cWGiT7R+L/2EjgzWgH1V/0zmIOMep6kY7MUs8rlyF0O5MNFs232cA1trl9kvhAGU"
-"9p58Enf5DWMrh17SPH586yIJeiWZtPez9G54ftY+XIqfn0X0zso0dnoXNJQYS043"
-"/5vSnoHdRx/EmN8yjeEavZtC48moN0iJ38eB44uKgCD77rZW5s1XqA==";
-
 } // namespace anonymous
 
 using namespace ValidationCore;
@@ -777,185 +685,3 @@ RUNNER_TEST(test08t04_Certificate_isCA)
     Certificate cert3(google3rd, Certificate::FORM_BASE64);
     RUNNER_ASSERT(cert3.isCA() == 0);
 }
-
-/*
- * test: CertificateIdentifier::find(Fingerprint)
- * description: Check implementation of fingerprint_list.
- * expected: Google CA certificate was added to TIZEN_MEMBER group
- * and ORANGE_LEGACY. Both domain should be found.
- */
-/*
-RUNNER_TEST(test90_certificate_identifier_find_fingerprint)
-{
-    CertificateIdentifier certIdent;
-    CertificateConfigReader reader;
-    reader.initialize(
-        "/usr/apps/widget/tests/vcore_config/fin_list.xml",
-        "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
-    reader.read(certIdent);
-
-    Certificate cert(googleCA, Certificate::FORM_BASE64);
-
-    CertStoreId::Set domain =
-        certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
-
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_PUBLISHER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::DEVELOPER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_ROOT));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_MEMBER));
-    RUNNER_ASSERT(domain.contains(CertStoreId::TIZEN_MEMBER));
-    RUNNER_ASSERT(domain.contains(CertStoreId::ORANGE_LEGACY));
-}
-*/
-
-/*
- * test: CertificateIdentifier::find(CertificatePtr)
- * description: Check implementation of fingerprint_list.
- * expected: Google CA certificate was added to TIZEN_MEMBER group
- * and ORANGE_LEGACY. Both domain should be found.
- */
-/*
-RUNNER_TEST(test91_certificate_identifier_find_cert)
-{
-    CertificateIdentifier certIdent;
-    CertificateConfigReader reader;
-    reader.initialize(
-        "/usr/apps/widget/tests/vcore_config/fin_list.xml",
-        "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
-    reader.read(certIdent);
-
-    CertificatePtr cert(new Certificate(googleCA, Certificate::FORM_BASE64));
-
-    CertStoreId::Set domain = certIdent.find(cert);
-
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_PUBLISHER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::DEVELOPER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_ROOT));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_MEMBER));
-    RUNNER_ASSERT(domain.contains(CertStoreId::TIZEN_MEMBER));
-    RUNNER_ASSERT(domain.contains(CertStoreId::ORANGE_LEGACY));
-}
-*/
-
-/*
- * test: CertificateIdentifier::find(Fingerprint)
- * description: Check implementation of fingerprint_list.
- * expected: google2nd certificate was not added to any group so
- * no domain should be found.
- */
-/*
-RUNNER_TEST(test92_certificate_identifier_negative)
-{
-    CertificateIdentifier certIdent;
-    CertificateConfigReader reader;
-    reader.initialize(
-        "/usr/apps/widget/tests/vcore_config/fin_list.xml",
-        "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
-    reader.read(certIdent);
-
-    Certificate cert(google2nd, Certificate::FORM_BASE64);
-
-    CertStoreId::Set domain =
-        certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
-
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_PUBLISHER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::DEVELOPER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_ROOT));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::WAC_MEMBER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::TIZEN_MEMBER));
-    RUNNER_ASSERT(!domain.contains(CertStoreId::ORANGE_LEGACY));
-}
-*/
-/*
- * test: CertificateIdentifier::find(Fingerprint)
- * description: Check implementation of fingerprint_list.
- * expected: Google CA certificate was added to TIZEN_MEMBER group
- * and ORANGE_LEGACY. Both domain should be found.
- */
-/*
-RUNNER_TEST(test93_certificate_identifier_find_fingerprint)
-{
-    CertificateIdentifier certIdent;
-    CertificateConfigReader reader;
-    reader.initialize(
-        "/usr/apps/widget/tests/vcore_config/fin_list.xml",
-        "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
-    reader.read(certIdent);
-
-    Certificate cert(googleCA, Certificate::FORM_BASE64);
-
-    CertStoreId::Set visibilityLevel =
-        certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
-
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_PUBLISHER));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::DEVELOPER));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_ROOT));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_MEMBER));
-    RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::TIZEN_MEMBER));
-    RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::ORANGE_LEGACY));
-
-    RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::VIS_PUBLIC));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_OPERATOR));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_MANUFACTURER));
-}
-*/
-
-/*
- * test: CertificateIdentifier::find(CertificatePtr)
- * description: Check implementation of fingerprint_list.
- * expected: Google CA certificate was added to TIZEN_MEMBER group
- * and ORANGE_LEGACY. Both domain should be found.
- */
-/*
-RUNNER_TEST(test94_certificate_identifier_find_cert)
-{
-    CertificateIdentifier certIdent;
-    CertificateConfigReader reader;
-    reader.initialize(
-        "/usr/apps/widget/tests/vcore_config/fin_list.xml",
-        "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
-    reader.read(certIdent);
-
-    CertificatePtr cert(new Certificate(googleCA, Certificate::FORM_BASE64));
-
-    CertStoreId::Set visibilityLevel = certIdent.find(cert);
-
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_PUBLISHER));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::DEVELOPER));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_ROOT));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::WAC_MEMBER));
-    RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::TIZEN_MEMBER));
-    RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::ORANGE_LEGACY));
-
-    RUNNER_ASSERT(visibilityLevel.contains(CertStoreId::VIS_PUBLIC));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_OPERATOR));
-    RUNNER_ASSERT(!visibilityLevel.contains(CertStoreId::VIS_PARTNER_MANUFACTURER));
-}
-*/
-
-/*
- * test: CertificateIdentifier::find(Fingerprint)
- * description: Check implementation of fingerprint_list.
- * expected: google2nd certificate was not added to any group so
- * no domain should be found.
- */
-/*
-RUNNER_TEST(test95_certificate_identifier_negative)
-{
-    CertificateIdentifier certIdent;
-    CertificateConfigReader reader;
-    reader.initialize(
-        "/usr/apps/widget/tests/vcore_config/fin_list.xml",
-        "/usr/apps/widget/tests/vcore_config/fin_list.xsd");
-    reader.read(certIdent);
-
-    Certificate cert(google2nd, Certificate::FORM_BASE64);
-
-    CertStoreId::Set domain =
-        certIdent.find(cert.getFingerprint(Certificate::FINGERPRINT_SHA1));
-
-    RUNNER_ASSERT_MSG(domain.getTypeString().empty(), "Domain should be empty.");
-}
-*/
diff --git a/tests/vcore/cert-svc-tests-vcore-ocsp-server.sh b/tests/vcore/cert-svc-tests-vcore-ocsp-server.sh
deleted file mode 100644 (file)
index 05daea2..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-#    Licensed under the Apache License, Version 2.0 (the "License");
-#    you may not use this file except in compliance with the License.
-#    You may obtain a copy of the License at
-#
-#        http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS,
-#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#    See the License for the specific language governing permissions and
-#    limitations under the License.
-#
-source /etc/tizen-platform.conf
-
-LOCAL_VCORE_OCSP_WORKSPACE=${TZ_SYS_RO_APP}/widget/tests/vcore_certs
-
-pkill -9 openssl # if previously it was launched and openssl didn't close sockets
-
-OPENSSL_CONF=${LOCAL_VCORE_OCSP_WORKSPACE}/openssl.cnf openssl ocsp \
--nrequest 5 \
--index ${LOCAL_VCORE_OCSP_WORKSPACE}/demoCA/index.txt \
--port 8881 \
--rsigner ${LOCAL_VCORE_OCSP_WORKSPACE}/respcert.pem \
--rkey ${LOCAL_VCORE_OCSP_WORKSPACE}/respcert.key \
--CA ${LOCAL_VCORE_OCSP_WORKSPACE}/demoCA/cacert.pem
-
-echo "--- OCSP server shutdown..."
diff --git a/tests/vcore/certificate-generator/.gitignore b/tests/vcore/certificate-generator/.gitignore
deleted file mode 100644 (file)
index 96be371..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-1second_level.csr
-1second_level.key
-1second_level.pem
-1third_level.key
-1third_level.pem
-1third_level.request
-2second_level.csr
-2second_level.key
-2second_level.pem
-2third_level.key
-2third_level.pem
-2third_level.request
-3second_level.csr
-3second_level.key
-3second_level.pem
-3third_level.key
-3third_level.pem
-3third_level.request
-cacrl1.pem
-cacrl2.pem
-demoCA/index.txt
-demoCA/index.txt.attr
-demoCA/index.txt.attr.old
-demoCA/index.txt.old
-demoCA/newcerts/
-respcert.csr
-respcert.key
-respcert.pem
diff --git a/tests/vcore/certificate-generator/create_certs.sh b/tests/vcore/certificate-generator/create_certs.sh
deleted file mode 100755 (executable)
index 4d03927..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-#    Licensed under the Apache License, Version 2.0 (the "License");
-#    you may not use this file except in compliance with the License.
-#    You may obtain a copy of the License at
-#
-#        http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS,
-#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#    See the License for the specific language governing permissions and
-#    limitations under the License.
-#
-
-#Prerequisite to run script is to
-#create root certificate and directory structure (demoCA) with command:
-#/usr/lib/ssl/misc/CA.sh -newca
-#for automated tests default structure is created in demoCA.init
-
-#make sure current dir has no files from previous generation
-rm -r 1* 2* 3* ca* respcert* demoCA
-cp -R demoCA.init demoCA
-echo "01" > ./demoCA/crlnumber
-
-for index in 1 2 3
-do
-    #create certificate A
-    openssl genrsa -out ${index}second_level.key 1024 -passin pass:1234 -config ./openssl.cnf
-    openssl req -new -key ${index}second_level.key -out ${index}second_level.csr -passin pass:1234 -config ./openssl.cnf <<CONTENT
-PL
-Masovian
-Warsaw
-priv
-priv
-second_level${index}
-
-
-
-CONTENT
-
-    openssl ca -in ${index}second_level.csr -out ${index}second_level.pem -passin pass:1234 -config ./openssl.cnf -extensions v3_ca <<CONTENT
-y
-y
-CONTENT
-
-    #create certificate B
-    openssl req -new -keyout ${index}third_level.key -out ${index}third_level.request -passin pass:1234 -passout pass:1234 -days 365  -config ./openssl.cnf  <<CONTENT
-PL
-Masovian
-Warsaw
-priv
-priv
-third_level${index}
-
-
-
-CONTENT
-
-    openssl ca -config ./openssl.cnf -extensions v3_ca -policy policy_anything -keyfile ${index}second_level.key -cert ${index}second_level.pem -out ${index}third_level.pem -infiles ${index}third_level.request <<CONTENT
-y
-y
-CONTENT
-
-done
-
-#generate OCSP response signing certificate
-openssl genrsa -out respcert.key 1024 -passin pass:1234 -config ./openssl.cnf
-openssl req -new -key respcert.key -out respcert.csr -passin pass:1234 -config ./openssl.cnf <<CONTENT
-PL
-Masovian
-Warsaw
-priv
-priv
-responce_cert
-
-
-
-CONTENT
-
-openssl ca -in respcert.csr -out respcert.pem -passin pass:1234 -config ./openssl.cnf -extensions ocsp_cert <<CONTENT
-y
-y
-CONTENT
-
-#generate CRL
-openssl ca -passin pass:1234 -gencrl -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out cacrl1.pem -crldays 30 -config ./openssl.cnf
-openssl ca -passin pass:1234 -revoke 1third_level.pem -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -config ./openssl.cnf
-openssl ca -passin pass:1234 -gencrl -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out cacrl1.pem -crldays 30 -config ./openssl.cnf
-
-openssl ca -passin pass:1234 -gencrl -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out cacrl2.pem -crldays 30 -config ./openssl.cnf
-openssl ca -passin pass:1234 -revoke 2second_level.pem -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -config ./openssl.cnf
-openssl ca -passin pass:1234 -gencrl -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out cacrl2.pem -crldays 30 -config ./openssl.cnf
diff --git a/tests/vcore/certificate-generator/demoCA.init/cacert.pem b/tests/vcore/certificate-generator/demoCA.init/cacert.pem
deleted file mode 100644 (file)
index c9cc0eb..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 0 (0x0)
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=PL, ST=Masovian, O=priv, OU=priv, CN=priv
-        Validity
-            Not Before: Jul 29 14:32:12 2011 GMT
-            Not After : Jul 28 14:32:12 2014 GMT
-        Subject: C=PL, ST=Masovian, O=priv, OU=priv, CN=priv
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ab:68:cc:1a:41:78:50:0c:f4:43:3f:9e:8d:7b:
-                    90:3d:eb:d6:8b:ce:d9:c1:b5:f4:d3:2e:75:f3:e1:
-                    b3:29:97:1b:38:c6:20:73:8d:a6:cd:61:3f:e1:1c:
-                    78:0f:fd:25:e2:a0:95:6d:a9:33:30:fe:24:76:3d:
-                    e4:9d:23:b2:39:3c:98:a5:b2:20:2f:7d:c8:7d:d5:
-                    00:7c:11:2c:6e:58:a2:18:03:02:48:4a:81:c7:eb:
-                    7b:e9:e3:8d:b0:eb:3d:ee:21:19:7c:04:c2:ad:4f:
-                    45:b3:1a:13:d1:76:35:c4:38:7e:0c:6c:7c:e7:83:
-                    41:f0:78:1b:b4:16:d5:93:d9
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                F6:6E:9E:36:6D:49:02:FC:91:1A:5A:9D:D3:FA:B4:9F:07:EE:A9:B3
-            X509v3 Authority Key Identifier: 
-                keyid:F6:6E:9E:36:6D:49:02:FC:91:1A:5A:9D:D3:FA:B4:9F:07:EE:A9:B3
-                DirName:/C=PL/ST=Masovian/O=priv/OU=priv/CN=priv
-                serial:00
-
-            X509v3 Basic Constraints: 
-                CA:TRUE
-    Signature Algorithm: sha1WithRSAEncryption
-        96:3c:f7:22:3d:32:c0:67:fc:3a:0a:3c:b7:62:38:7d:a6:d5:
-        2d:86:c2:ce:6a:84:66:d4:56:b3:93:4e:4c:37:d1:49:b6:67:
-        91:76:57:96:96:cc:5a:71:da:69:b7:52:9d:8f:17:f7:66:fa:
-        6c:f1:98:28:44:af:60:df:ad:2a:8b:f5:f3:8c:27:c4:68:a5:
-        2a:35:c1:6c:84:37:20:ee:c2:9c:58:98:a1:ff:ba:fd:38:36:
-        45:c3:d7:38:5d:47:ad:c8:0d:26:2b:a9:9d:2e:39:73:b2:aa:
-        da:e5:19:b8:57:28:62:dd:94:2a:c9:50:5b:33:59:b0:56:cf:
-        eb:2f
------BEGIN CERTIFICATE-----
-MIICuDCCAiGgAwIBAgIBADANBgkqhkiG9w0BAQUFADBNMQswCQYDVQQGEwJQTDER
-MA8GA1UECBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYx
-DTALBgNVBAMTBHByaXYwHhcNMTEwNzI5MTQzMjEyWhcNMTQwNzI4MTQzMjEyWjBN
-MQswCQYDVQQGEwJQTDERMA8GA1UECBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYx
-DTALBgNVBAsTBHByaXYxDTALBgNVBAMTBHByaXYwgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBAKtozBpBeFAM9EM/no17kD3r1ovO2cG19NMudfPhsymXGzjGIHON
-ps1hP+EceA/9JeKglW2pMzD+JHY95J0jsjk8mKWyIC99yH3VAHwRLG5YohgDAkhK
-gcfre+njjbDrPe4hGXwEwq1PRbMaE9F2NcQ4fgxsfOeDQfB4G7QW1ZPZAgMBAAGj
-gacwgaQwHQYDVR0OBBYEFPZunjZtSQL8kRpandP6tJ8H7qmzMHUGA1UdIwRuMGyA
-FPZunjZtSQL8kRpandP6tJ8H7qmzoVGkTzBNMQswCQYDVQQGEwJQTDERMA8GA1UE
-CBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYxDTALBgNV
-BAMTBHByaXaCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCWPPci
-PTLAZ/w6Cjy3Yjh9ptUthsLOaoRm1Fazk05MN9FJtmeRdleWlsxacdppt1Kdjxf3
-Zvps8ZgoRK9g360qi/XzjCfEaKUqNcFshDcg7sKcWJih/7r9ODZFw9c4XUetyA0m
-K6mdLjlzsqra5Rm4Vyhi3ZQqyVBbM1mwVs/rLw==
------END CERTIFICATE-----
diff --git a/tests/vcore/certificate-generator/demoCA.init/careq.pem b/tests/vcore/certificate-generator/demoCA.init/careq.pem
deleted file mode 100644 (file)
index 2a360eb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIIBnjCCAQcCAQAwXjELMAkGA1UEBhMCUEwxETAPBgNVBAgTCE1hc292aWFuMQ8w
-DQYDVQQHEwZXYXJzYXcxDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYxDTAL
-BgNVBAMTBHByaXYwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKtozBpBeFAM
-9EM/no17kD3r1ovO2cG19NMudfPhsymXGzjGIHONps1hP+EceA/9JeKglW2pMzD+
-JHY95J0jsjk8mKWyIC99yH3VAHwRLG5YohgDAkhKgcfre+njjbDrPe4hGXwEwq1P
-RbMaE9F2NcQ4fgxsfOeDQfB4G7QW1ZPZAgMBAAGgADANBgkqhkiG9w0BAQUFAAOB
-gQBfWbLoBMhFCjsTklaKNKIoF4WRNmGXPBQt+BWZhlVjnxh1ncL3QX2M4r/ys3ax
-bKGm24i5XvUvZ1uR8SxOHGbuTzjRALBOgfb9X5mma/8ZytammJmgjdYkVvvRNFXL
-O+WaOykOlw1zUEUVK0VAmdQ5STPQDypyYwGF5JYL24F84A==
------END CERTIFICATE REQUEST-----
diff --git a/tests/vcore/certificate-generator/demoCA.init/index.txt b/tests/vcore/certificate-generator/demoCA.init/index.txt
deleted file mode 100644 (file)
index 665f036..0000000
+++ /dev/null
@@ -1 +0,0 @@
-V      140728143212Z           00      unknown /C=PL/ST=Masovian/O=priv/OU=priv/CN=priv
diff --git a/tests/vcore/certificate-generator/demoCA.init/index.txt.attr b/tests/vcore/certificate-generator/demoCA.init/index.txt.attr
deleted file mode 100644 (file)
index 8f7e63a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-unique_subject = yes
diff --git a/tests/vcore/certificate-generator/demoCA.init/index.txt.old b/tests/vcore/certificate-generator/demoCA.init/index.txt.old
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/vcore/certificate-generator/demoCA.init/newcerts/00.pem b/tests/vcore/certificate-generator/demoCA.init/newcerts/00.pem
deleted file mode 100644 (file)
index c9cc0eb..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 0 (0x0)
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=PL, ST=Masovian, O=priv, OU=priv, CN=priv
-        Validity
-            Not Before: Jul 29 14:32:12 2011 GMT
-            Not After : Jul 28 14:32:12 2014 GMT
-        Subject: C=PL, ST=Masovian, O=priv, OU=priv, CN=priv
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ab:68:cc:1a:41:78:50:0c:f4:43:3f:9e:8d:7b:
-                    90:3d:eb:d6:8b:ce:d9:c1:b5:f4:d3:2e:75:f3:e1:
-                    b3:29:97:1b:38:c6:20:73:8d:a6:cd:61:3f:e1:1c:
-                    78:0f:fd:25:e2:a0:95:6d:a9:33:30:fe:24:76:3d:
-                    e4:9d:23:b2:39:3c:98:a5:b2:20:2f:7d:c8:7d:d5:
-                    00:7c:11:2c:6e:58:a2:18:03:02:48:4a:81:c7:eb:
-                    7b:e9:e3:8d:b0:eb:3d:ee:21:19:7c:04:c2:ad:4f:
-                    45:b3:1a:13:d1:76:35:c4:38:7e:0c:6c:7c:e7:83:
-                    41:f0:78:1b:b4:16:d5:93:d9
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                F6:6E:9E:36:6D:49:02:FC:91:1A:5A:9D:D3:FA:B4:9F:07:EE:A9:B3
-            X509v3 Authority Key Identifier: 
-                keyid:F6:6E:9E:36:6D:49:02:FC:91:1A:5A:9D:D3:FA:B4:9F:07:EE:A9:B3
-                DirName:/C=PL/ST=Masovian/O=priv/OU=priv/CN=priv
-                serial:00
-
-            X509v3 Basic Constraints: 
-                CA:TRUE
-    Signature Algorithm: sha1WithRSAEncryption
-        96:3c:f7:22:3d:32:c0:67:fc:3a:0a:3c:b7:62:38:7d:a6:d5:
-        2d:86:c2:ce:6a:84:66:d4:56:b3:93:4e:4c:37:d1:49:b6:67:
-        91:76:57:96:96:cc:5a:71:da:69:b7:52:9d:8f:17:f7:66:fa:
-        6c:f1:98:28:44:af:60:df:ad:2a:8b:f5:f3:8c:27:c4:68:a5:
-        2a:35:c1:6c:84:37:20:ee:c2:9c:58:98:a1:ff:ba:fd:38:36:
-        45:c3:d7:38:5d:47:ad:c8:0d:26:2b:a9:9d:2e:39:73:b2:aa:
-        da:e5:19:b8:57:28:62:dd:94:2a:c9:50:5b:33:59:b0:56:cf:
-        eb:2f
------BEGIN CERTIFICATE-----
-MIICuDCCAiGgAwIBAgIBADANBgkqhkiG9w0BAQUFADBNMQswCQYDVQQGEwJQTDER
-MA8GA1UECBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYx
-DTALBgNVBAMTBHByaXYwHhcNMTEwNzI5MTQzMjEyWhcNMTQwNzI4MTQzMjEyWjBN
-MQswCQYDVQQGEwJQTDERMA8GA1UECBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYx
-DTALBgNVBAsTBHByaXYxDTALBgNVBAMTBHByaXYwgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBAKtozBpBeFAM9EM/no17kD3r1ovO2cG19NMudfPhsymXGzjGIHON
-ps1hP+EceA/9JeKglW2pMzD+JHY95J0jsjk8mKWyIC99yH3VAHwRLG5YohgDAkhK
-gcfre+njjbDrPe4hGXwEwq1PRbMaE9F2NcQ4fgxsfOeDQfB4G7QW1ZPZAgMBAAGj
-gacwgaQwHQYDVR0OBBYEFPZunjZtSQL8kRpandP6tJ8H7qmzMHUGA1UdIwRuMGyA
-FPZunjZtSQL8kRpandP6tJ8H7qmzoVGkTzBNMQswCQYDVQQGEwJQTDERMA8GA1UE
-CBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYxDTALBgNV
-BAMTBHByaXaCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCWPPci
-PTLAZ/w6Cjy3Yjh9ptUthsLOaoRm1Fazk05MN9FJtmeRdleWlsxacdppt1Kdjxf3
-Zvps8ZgoRK9g360qi/XzjCfEaKUqNcFshDcg7sKcWJih/7r9ODZFw9c4XUetyA0m
-K6mdLjlzsqra5Rm4Vyhi3ZQqyVBbM1mwVs/rLw==
------END CERTIFICATE-----
diff --git a/tests/vcore/certificate-generator/demoCA.init/private/cakey.pem b/tests/vcore/certificate-generator/demoCA.init/private/cakey.pem
deleted file mode 100644 (file)
index 452ece5..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,E653123E49750191
-
-OgQe9fnwRSQjEqAuqts2/up+mCfMyiZLwi/ZfhZjBxsRD0n34J5NrLptcWMDNvPT
-TueYJ24eUhE61RE6u9VpcdYd0d/7sbR6i8jiBYa8R15frtTUaD1XCbhz3Sn6REbL
-qDrKW7hHuSKKRfb/6bHVGNGMCR6eCSw9isYcqFDlmRpGiYC5m2nxr/W1JFq4K/te
-KgvZ0kwE9DPeCdLVyHbZ7AcK0aDzUeZOFxxyHvQRLIbprx2DoFi+erPVvPfehJp1
-n2CVa2CXwkY4vIoCKn3KbtRqR+vHbc9UmlSvd2AINPEgCYAr11AGvDl9O6fdLXRJ
-PXq6TMv3se//4qPcyKEiXRhR64a0dxIutyPvESLrnz4BZGsQN695ym3s96x1IEtK
-yb7AGws3kr/zMVFilFFtHZgsMse9kzsMmoQZ31VfyIM1CpmieCVyN2gYV+iQN04f
-1HaT498quauFvxezDe9UC4d9yaFKAM8lqeuMwoisTCu18LR5jA4ODzEJDENnny4O
-ejLVKkdPViJOW5UwGpjl2MQYtmRyN6/FHjFIx9FEIClaxLiYMFXNxIGSWdq85JUb
-/VpkmCiJqjy2eIW137ThbmN2GblLg6l9Hkz1wTBqhqhBK/uznwE7Mh0VL3QNTnys
-4Ib2WoApWS3b9a6UAeybZvZ1vvK/9hryG19iwZsqpmuJoTTSlwZQbBYpVHRiSmrw
-S26rP4kBnId4ftf3oIGCwUgFXhj1cQ7V/PC4EAOzo0opAMQkI6TR1DP8gv1ESmIN
-mdrHvKbzmrRe5enDjrk3G2HVhd2+fPwC0Go8mORvxRtRfDDYeySEPQ==
------END RSA PRIVATE KEY-----
diff --git a/tests/vcore/certificate-generator/demoCA.init/serial b/tests/vcore/certificate-generator/demoCA.init/serial
deleted file mode 100644 (file)
index 8a0f05e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-01
diff --git a/tests/vcore/certificate-generator/demoCA.init/serial.old b/tests/vcore/certificate-generator/demoCA.init/serial.old
deleted file mode 100644 (file)
index 4daddb7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-00
diff --git a/tests/vcore/certificate-generator/demoCA/cacert.pem b/tests/vcore/certificate-generator/demoCA/cacert.pem
deleted file mode 100644 (file)
index c9cc0eb..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 0 (0x0)
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=PL, ST=Masovian, O=priv, OU=priv, CN=priv
-        Validity
-            Not Before: Jul 29 14:32:12 2011 GMT
-            Not After : Jul 28 14:32:12 2014 GMT
-        Subject: C=PL, ST=Masovian, O=priv, OU=priv, CN=priv
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ab:68:cc:1a:41:78:50:0c:f4:43:3f:9e:8d:7b:
-                    90:3d:eb:d6:8b:ce:d9:c1:b5:f4:d3:2e:75:f3:e1:
-                    b3:29:97:1b:38:c6:20:73:8d:a6:cd:61:3f:e1:1c:
-                    78:0f:fd:25:e2:a0:95:6d:a9:33:30:fe:24:76:3d:
-                    e4:9d:23:b2:39:3c:98:a5:b2:20:2f:7d:c8:7d:d5:
-                    00:7c:11:2c:6e:58:a2:18:03:02:48:4a:81:c7:eb:
-                    7b:e9:e3:8d:b0:eb:3d:ee:21:19:7c:04:c2:ad:4f:
-                    45:b3:1a:13:d1:76:35:c4:38:7e:0c:6c:7c:e7:83:
-                    41:f0:78:1b:b4:16:d5:93:d9
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                F6:6E:9E:36:6D:49:02:FC:91:1A:5A:9D:D3:FA:B4:9F:07:EE:A9:B3
-            X509v3 Authority Key Identifier: 
-                keyid:F6:6E:9E:36:6D:49:02:FC:91:1A:5A:9D:D3:FA:B4:9F:07:EE:A9:B3
-                DirName:/C=PL/ST=Masovian/O=priv/OU=priv/CN=priv
-                serial:00
-
-            X509v3 Basic Constraints: 
-                CA:TRUE
-    Signature Algorithm: sha1WithRSAEncryption
-        96:3c:f7:22:3d:32:c0:67:fc:3a:0a:3c:b7:62:38:7d:a6:d5:
-        2d:86:c2:ce:6a:84:66:d4:56:b3:93:4e:4c:37:d1:49:b6:67:
-        91:76:57:96:96:cc:5a:71:da:69:b7:52:9d:8f:17:f7:66:fa:
-        6c:f1:98:28:44:af:60:df:ad:2a:8b:f5:f3:8c:27:c4:68:a5:
-        2a:35:c1:6c:84:37:20:ee:c2:9c:58:98:a1:ff:ba:fd:38:36:
-        45:c3:d7:38:5d:47:ad:c8:0d:26:2b:a9:9d:2e:39:73:b2:aa:
-        da:e5:19:b8:57:28:62:dd:94:2a:c9:50:5b:33:59:b0:56:cf:
-        eb:2f
------BEGIN CERTIFICATE-----
-MIICuDCCAiGgAwIBAgIBADANBgkqhkiG9w0BAQUFADBNMQswCQYDVQQGEwJQTDER
-MA8GA1UECBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYx
-DTALBgNVBAMTBHByaXYwHhcNMTEwNzI5MTQzMjEyWhcNMTQwNzI4MTQzMjEyWjBN
-MQswCQYDVQQGEwJQTDERMA8GA1UECBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYx
-DTALBgNVBAsTBHByaXYxDTALBgNVBAMTBHByaXYwgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBAKtozBpBeFAM9EM/no17kD3r1ovO2cG19NMudfPhsymXGzjGIHON
-ps1hP+EceA/9JeKglW2pMzD+JHY95J0jsjk8mKWyIC99yH3VAHwRLG5YohgDAkhK
-gcfre+njjbDrPe4hGXwEwq1PRbMaE9F2NcQ4fgxsfOeDQfB4G7QW1ZPZAgMBAAGj
-gacwgaQwHQYDVR0OBBYEFPZunjZtSQL8kRpandP6tJ8H7qmzMHUGA1UdIwRuMGyA
-FPZunjZtSQL8kRpandP6tJ8H7qmzoVGkTzBNMQswCQYDVQQGEwJQTDERMA8GA1UE
-CBMITWFzb3ZpYW4xDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYxDTALBgNV
-BAMTBHByaXaCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCWPPci
-PTLAZ/w6Cjy3Yjh9ptUthsLOaoRm1Fazk05MN9FJtmeRdleWlsxacdppt1Kdjxf3
-Zvps8ZgoRK9g360qi/XzjCfEaKUqNcFshDcg7sKcWJih/7r9ODZFw9c4XUetyA0m
-K6mdLjlzsqra5Rm4Vyhi3ZQqyVBbM1mwVs/rLw==
------END CERTIFICATE-----
diff --git a/tests/vcore/certificate-generator/demoCA/careq.pem b/tests/vcore/certificate-generator/demoCA/careq.pem
deleted file mode 100644 (file)
index 2a360eb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIIBnjCCAQcCAQAwXjELMAkGA1UEBhMCUEwxETAPBgNVBAgTCE1hc292aWFuMQ8w
-DQYDVQQHEwZXYXJzYXcxDTALBgNVBAoTBHByaXYxDTALBgNVBAsTBHByaXYxDTAL
-BgNVBAMTBHByaXYwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKtozBpBeFAM
-9EM/no17kD3r1ovO2cG19NMudfPhsymXGzjGIHONps1hP+EceA/9JeKglW2pMzD+
-JHY95J0jsjk8mKWyIC99yH3VAHwRLG5YohgDAkhKgcfre+njjbDrPe4hGXwEwq1P
-RbMaE9F2NcQ4fgxsfOeDQfB4G7QW1ZPZAgMBAAGgADANBgkqhkiG9w0BAQUFAAOB
-gQBfWbLoBMhFCjsTklaKNKIoF4WRNmGXPBQt+BWZhlVjnxh1ncL3QX2M4r/ys3ax
-bKGm24i5XvUvZ1uR8SxOHGbuTzjRALBOgfb9X5mma/8ZytammJmgjdYkVvvRNFXL
-O+WaOykOlw1zUEUVK0VAmdQ5STPQDypyYwGF5JYL24F84A==
------END CERTIFICATE REQUEST-----
diff --git a/tests/vcore/certificate-generator/demoCA/crlnumber b/tests/vcore/certificate-generator/demoCA/crlnumber
deleted file mode 100644 (file)
index eeee65e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-05
diff --git a/tests/vcore/certificate-generator/demoCA/crlnumber.old b/tests/vcore/certificate-generator/demoCA/crlnumber.old
deleted file mode 100644 (file)
index 6496923..0000000
+++ /dev/null
@@ -1 +0,0 @@
-04
diff --git a/tests/vcore/certificate-generator/demoCA/private/cakey.pem b/tests/vcore/certificate-generator/demoCA/private/cakey.pem
deleted file mode 100644 (file)
index 452ece5..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,E653123E49750191
-
-OgQe9fnwRSQjEqAuqts2/up+mCfMyiZLwi/ZfhZjBxsRD0n34J5NrLptcWMDNvPT
-TueYJ24eUhE61RE6u9VpcdYd0d/7sbR6i8jiBYa8R15frtTUaD1XCbhz3Sn6REbL
-qDrKW7hHuSKKRfb/6bHVGNGMCR6eCSw9isYcqFDlmRpGiYC5m2nxr/W1JFq4K/te
-KgvZ0kwE9DPeCdLVyHbZ7AcK0aDzUeZOFxxyHvQRLIbprx2DoFi+erPVvPfehJp1
-n2CVa2CXwkY4vIoCKn3KbtRqR+vHbc9UmlSvd2AINPEgCYAr11AGvDl9O6fdLXRJ
-PXq6TMv3se//4qPcyKEiXRhR64a0dxIutyPvESLrnz4BZGsQN695ym3s96x1IEtK
-yb7AGws3kr/zMVFilFFtHZgsMse9kzsMmoQZ31VfyIM1CpmieCVyN2gYV+iQN04f
-1HaT498quauFvxezDe9UC4d9yaFKAM8lqeuMwoisTCu18LR5jA4ODzEJDENnny4O
-ejLVKkdPViJOW5UwGpjl2MQYtmRyN6/FHjFIx9FEIClaxLiYMFXNxIGSWdq85JUb
-/VpkmCiJqjy2eIW137ThbmN2GblLg6l9Hkz1wTBqhqhBK/uznwE7Mh0VL3QNTnys
-4Ib2WoApWS3b9a6UAeybZvZ1vvK/9hryG19iwZsqpmuJoTTSlwZQbBYpVHRiSmrw
-S26rP4kBnId4ftf3oIGCwUgFXhj1cQ7V/PC4EAOzo0opAMQkI6TR1DP8gv1ESmIN
-mdrHvKbzmrRe5enDjrk3G2HVhd2+fPwC0Go8mORvxRtRfDDYeySEPQ==
------END RSA PRIVATE KEY-----
diff --git a/tests/vcore/certificate-generator/demoCA/serial b/tests/vcore/certificate-generator/demoCA/serial
deleted file mode 100644 (file)
index adb9de8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-08
diff --git a/tests/vcore/certificate-generator/demoCA/serial.old b/tests/vcore/certificate-generator/demoCA/serial.old
deleted file mode 100644 (file)
index 2c7456e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-07
diff --git a/tests/vcore/certificate-generator/openssl.cnf b/tests/vcore/certificate-generator/openssl.cnf
deleted file mode 100644 (file)
index 94aa306..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-#
-# OpenSSL example configuration file.
-# This is mostly being used for generation of certificate requests.
-#
-
-# This definition stops the following lines choking if HOME isn't
-# defined.
-HOME                   = .
-RANDFILE               = $ENV::HOME/.rnd
-
-# Extra OBJECT IDENTIFIER info:
-#oid_file              = $ENV::HOME/.oid
-oid_section            = new_oids
-
-# To use this configuration file with the "-extfile" option of the
-# "openssl x509" utility, name here the section containing the
-# X.509v3 extensions to use:
-# extensions           = 
-# (Alternatively, use a configuration file that has only
-# X.509v3 extensions in its main [= default] section.)
-
-[ new_oids ]
-
-# We can add new OIDs in here for use by 'ca' and 'req'.
-# Add a simple OID like this:
-# testoid1=1.2.3.4
-# Or use config file substitution like this:
-# testoid2=${testoid1}.5.6
-
-####################################################################
-[ ca ]
-default_ca     = CA_default            # The default ca section
-
-####################################################################
-[ CA_default ]
-
-dir            = ./demoCA              # Where everything is kept
-certs          = $dir/certs            # Where the issued certs are kept
-crl_dir                = $dir/crl              # Where the issued crl are kept
-database       = $dir/index.txt        # database index file.
-#unique_subject        = no                    # Set to 'no' to allow creation of
-                                       # several ctificates with same subject.
-new_certs_dir  = $dir/newcerts         # default place for new certs.
-
-certificate    = $dir/cacert.pem       # The CA certificate
-serial         = $dir/serial           # The current serial number
-crlnumber      = $dir/crlnumber        # the current crl number
-                                       # must be commented out to leave a V1 CRL
-crl            = $dir/crl.pem          # The current CRL
-private_key    = $dir/private/cakey.pem# The private key
-RANDFILE       = $dir/private/.rand    # private random number file
-
-x509_extensions        = usr_cert              # The extentions to add to the cert
-
-# Comment out the following two lines for the "traditional"
-# (and highly broken) format.
-name_opt       = ca_default            # Subject Name options
-cert_opt       = ca_default            # Certificate field options
-
-# Extension copying option: use with caution.
-# copy_extensions = copy
-
-# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
-# so this is commented out by default to leave a V1 CRL.
-# crlnumber must also be commented out to leave a V1 CRL.
-
-#crl_extensions        = crl_ext
-
-default_days   = 365                   # how long to certify for
-default_crl_days= 30                   # how long before next CRL
-default_md     = sha1                  # which md to use.
-preserve       = no                    # keep passed DN ordering
-
-# A few difference way of specifying how similar the request should look
-# For type CA, the listed attributes must be the same, and the optional
-# and supplied fields are just that :-)
-policy         = policy_match
-
-# For the CA policy
-[ policy_match ]
-countryName            = match
-stateOrProvinceName    = match
-organizationName       = match
-organizationalUnitName = optional
-commonName             = supplied
-emailAddress           = optional
-
-# For the 'anything' policy
-# At this point in time, you must list all acceptable 'object'
-# types.
-[ policy_anything ]
-countryName            = optional
-stateOrProvinceName    = optional
-localityName           = optional
-organizationName       = optional
-organizationalUnitName = optional
-commonName             = supplied
-emailAddress           = optional
-
-####################################################################
-[ req ]
-default_bits           = 1024
-default_keyfile        = privkey.pem
-distinguished_name     = req_distinguished_name
-attributes             = req_attributes
-x509_extensions        = v3_ca # The extentions to add to the self signed cert
-
-# Passwords for private keys if not present they will be prompted for
-# input_password = secret
-# output_password = secret
-
-# This sets a mask for permitted string types. There are several options. 
-# default: PrintableString, T61String, BMPString.
-# pkix  : PrintableString, BMPString.
-# utf8only: only UTF8Strings.
-# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
-# MASK:XXXX a literal mask value.
-# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
-# so use this option with caution!
-string_mask = nombstr
-
-# req_extensions = v3_req # The extensions to add to a certificate request
-
-[ req_distinguished_name ]
-countryName                    = Country Name (2 letter code)
-countryName_default            = AU
-countryName_min                        = 2
-countryName_max                        = 2
-
-stateOrProvinceName            = State or Province Name (full name)
-stateOrProvinceName_default    = Some-State
-
-localityName                   = Locality Name (eg, city)
-
-0.organizationName             = Organization Name (eg, company)
-0.organizationName_default     = Internet Widgits Pty Ltd
-
-# we can do this but it is not needed normally :-)
-#1.organizationName            = Second Organization Name (eg, company)
-#1.organizationName_default    = World Wide Web Pty Ltd
-
-organizationalUnitName         = Organizational Unit Name (eg, section)
-#organizationalUnitName_default        =
-
-commonName                     = Common Name (eg, YOUR name)
-commonName_max                 = 64
-
-emailAddress                   = Email Address
-emailAddress_max               = 64
-
-# SET-ex3                      = SET extension number 3
-
-[ req_attributes ]
-challengePassword              = A challenge password
-challengePassword_min          = 4
-challengePassword_max          = 20
-
-unstructuredName               = An optional company name
-
-[ usr_cert ]
-
-# These extensions are added when 'ca' signs a request.
-
-# This goes against PKIX guidelines but some CAs do it and some software
-# requires this to avoid interpreting an end user certificate as a CA.
-
-basicConstraints=CA:FALSE
-crlDistributionPoints = URI:http://localhost/my.crl
-
-# Here are some examples of the usage of nsCertType. If it is omitted
-# the certificate can be used for anything *except* object signing.
-
-# This is OK for an SSL server.
-# nsCertType                   = server
-
-# For an object signing certificate this would be used.
-# nsCertType = objsign
-
-# For normal client use this is typical
-# nsCertType = client, email
-
-# and for everything including object signing:
-# nsCertType = client, email, objsign
-
-# This is typical in keyUsage for a client certificate.
-# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
-
-# This will be displayed in Netscape's comment listbox.
-nsComment                      = "OpenSSL Generated Certificate"
-
-# PKIX recommendations harmless if included in all certificates.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid,issuer
-
-# This stuff is for subjectAltName and issuerAltname.
-# Import the email address.
-# subjectAltName=email:copy
-# An alternative to produce certificates that aren't
-# deprecated according to PKIX.
-# subjectAltName=email:move
-
-# Copy subject details
-# issuerAltName=issuer:copy
-
-#nsCaRevocationUrl             = http://www.domain.dom/ca-crl.pem
-#nsBaseUrl
-#nsRevocationUrl
-#nsRenewalUrl
-#nsCaPolicyUrl
-#nsSslServerName
-
-[ v3_req ]
-
-# Extensions to add to a certificate request
-
-basicConstraints = CA:FALSE
-keyUsage = nonRepudiation, digitalSignature, keyEncipherment
-
-[ v3_ca ]
-
-
-# Extensions for a typical CA
-
-
-# PKIX recommendation.
-
-subjectKeyIdentifier=hash
-
-authorityKeyIdentifier=keyid:always,issuer:always
-
-# OCSP and CRL local servers - for test certificates
-authorityInfoAccess=OCSP;URI:http://localhost:8881/
-crlDistributionPoints=URI:http://localhost/my.crl
-
-# This is what PKIX recommends but some broken software chokes on critical
-# extensions.
-#basicConstraints = critical,CA:true
-# So we do this instead.
-basicConstraints = CA:true
-
-# Key usage: this is typical for a CA certificate. However since it will
-# prevent it being used as an test self-signed certificate it is best
-# left out by default.
-# keyUsage = cRLSign, keyCertSign
-
-# Some might want this also
-# nsCertType = sslCA, emailCA
-
-# Include email address in subject alt name: another PKIX recommendation
-# subjectAltName=email:copy
-# Copy issuer details
-# issuerAltName=issuer:copy
-
-# DER hex encoding of an extension: beware experts only!
-# obj=DER:02:03
-# Where 'obj' is a standard or added object
-# You can even override a supported extension:
-# basicConstraints= critical, DER:30:03:01:01:FF
-
-[ crl_ext ]
-
-# CRL extensions.
-# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
-
-# issuerAltName=issuer:copy
-authorityKeyIdentifier=keyid:always,issuer:always
-crlDistributionPoints=crldp1_section
-URI=http://localhost/my.crl
-
-[ proxy_cert_ext ]
-# These extensions should be added when creating a proxy certificate
-
-# This goes against PKIX guidelines but some CAs do it and some software
-# requires this to avoid interpreting an end user certificate as a CA.
-
-basicConstraints=CA:FALSE
-
-# Here are some examples of the usage of nsCertType. If it is omitted
-# the certificate can be used for anything *except* object signing.
-
-# This is OK for an SSL server.
-# nsCertType                   = server
-
-# For an object signing certificate this would be used.
-# nsCertType = objsign
-
-# For normal client use this is typical
-# nsCertType = client, email
-
-# and for everything including object signing:
-# nsCertType = client, email, objsign
-
-# This is typical in keyUsage for a client certificate.
-# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
-
-# This will be displayed in Netscape's comment listbox.
-nsComment                      = "OpenSSL Generated Certificate"
-
-# PKIX recommendations harmless if included in all certificates.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid,issuer:always
-
-# This stuff is for subjectAltName and issuerAltname.
-# Import the email address.
-# subjectAltName=email:copy
-# An alternative to produce certificates that aren't
-# deprecated according to PKIX.
-# subjectAltName=email:move
-
-# Copy subject details
-# issuerAltName=issuer:copy
-
-#nsCaRevocationUrl             = http://www.domain.dom/ca-crl.pem
-#nsBaseUrl
-#nsRevocationUrl
-#nsRenewalUrl
-#nsCaPolicyUrl
-#nsSslServerName
-
-# This really needs to be in place for it to be a proxy certificate.
-proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
-
-[ my_v3_ext ]
-basicConstraints = CA:true
-
-[ ocsp_cert ]
-extendedKeyUsage = OCSP Signing
\ No newline at end of file
diff --git a/tests/vcore/test-cases/config/fin_list.xml b/tests/vcore/test-cases/config/fin_list.xml
deleted file mode 100644 (file)
index c7bed32..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<CertificateSet>
-    <CertificateDomain name="wacpublisher">
-    </CertificateDomain>
-    <CertificateDomain name="wacroot">
-    </CertificateDomain>
-    <CertificateDomain name="developer">
-    </CertificateDomain>
-    <CertificateDomain name="wacmember">
-    </CertificateDomain>
-    <CertificateDomain name="tizenmember">
-        <FingerprintSHA1>74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2</FingerprintSHA1>
-    </CertificateDomain>
-    <CertificateDomain name="orangelegacy">
-        <FingerprintSHA1>74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2</FingerprintSHA1>
-    </CertificateDomain>
-    <CertificateDomain name="fake">
-        <FingerprintSHA1>74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2</FingerprintSHA1>
-    </CertificateDomain>
-    <CertificateDomain name="tizen-public">
-        <FingerprintSHA1>74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2</FingerprintSHA1>
-               <FingerprintSHA1>04:C5:A6:1D:75:BB:F5:5C:0F:A2:66:F6:09:4D:9B:2B:5F:3B:44:AE</FingerprintSHA1>
-    </CertificateDomain>
-    <CertificateDomain name="tizen-partner">
-        <FingerprintSHA1>74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E0</FingerprintSHA1>
-               <FingerprintSHA1>67:37:DE:B7:B9:9D:D2:DB:A5:2C:42:DE:CB:2F:2C:3E:33:97:E1:85</FingerprintSHA1>
-    </CertificateDomain>
-    <CertificateDomain name="tizen-partner-operator">
-        <FingerprintSHA1>74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E1</FingerprintSHA1>
-               <FingerprintSHA1>B0:5F:40:43:71:1F:11:BC:9A:6A:62:FA:DA:92:54:79:92:16:11:DF</FingerprintSHA1>
-    </CertificateDomain>
-    <CertificateDomain name="tizen-partner-manufacturer">
-        <FingerprintSHA1>74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E3</FingerprintSHA1>
-               <FingerprintSHA1>2A:74:E8:CF:9E:0F:C3:D9:80:48:8B:E7:86:F7:83:49:91:11:E1:E0</FingerprintSHA1>
-    </CertificateDomain>
-</CertificateSet>
diff --git a/tests/vcore/test-cases/config/fin_list.xsd b/tests/vcore/test-cases/config/fin_list.xsd
deleted file mode 100644 (file)
index b0fab23..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-<xs:element name="CertificateSet" type="CertificateSetType" />
-<xs:complexType name="CertificateSetType">
-  <xs:sequence>
-    <xs:element ref="CertificateDomain" minOccurs="0" maxOccurs="unbounded" />
-  </xs:sequence>
-</xs:complexType>
-
-<xs:element name="CertificateDomain" type="CertificateDomainType" />
-<xs:complexType name="CertificateDomainType">
-  <xs:sequence>
-    <xs:element ref="FingerprintSHA1" minOccurs="0" maxOccurs="unbounded" />
-  </xs:sequence>
-  <xs:attribute name="name" type="xs:string" use="required" />
-</xs:complexType>
-
-<xs:element name="FingerprintSHA1" type="xs:string"/>
-
-</xs:schema>
diff --git a/tests/vcore/test-cases/keys/CAbundle.crt b/tests/vcore/test-cases/keys/CAbundle.crt
deleted file mode 100644 (file)
index 4edaeda..0000000
+++ /dev/null
@@ -1,3677 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx
-EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h
-bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy
-YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp
-Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy
-MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG
-A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt
-YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD
-VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA
-isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj
-Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50
-QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt
-bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR
-yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID
-AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0
-cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f
-BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj
-cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1
-U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl
-YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos
-SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/
-t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u
-mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb
-K+9A46sd33oqK8n8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
-BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
-cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
-4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
-Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
-0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
-FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
-bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
-SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
-6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
-m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
-eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
-kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
-6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
-CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
-aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
-gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
-aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
-tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
-nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
-77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
-Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
-ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
-zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
-rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
-YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
-oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
-FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
-0m6lG5kngOcLqagA
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG
-UjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEQMA4GA1UEChMHUE0v
-U0dETjEOMAwGA1UECxMFRENTU0kxDjAMBgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcN
-AQkBFhRpZ2NhQHNnZG4ucG0uZ291di5mcjAeFw0wMjEyMTMxNDM5MTVaFw0yMDEw
-MTcxNDM5MTRaMIGFMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYD
-VQQHEwVQYXJpczEQMA4GA1UEChMHUE0vU0dETjEOMAwGA1UECxMFRENTU0kxDjAM
-BgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcNAQkBFhRpZ2NhQHNnZG4ucG0uZ291di5m
-cjCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCFkMImdk9zDzJfTO4XPdAAmLbAdWws
-ZiEMZh19RyTo3CyhFqO77OIXrwY6vc1pcc3MgWJ0dgQpAgrDMtmFFxpUu4gmjVsx
-8GpxQC+4VOgLY8Cvmcd/UDzYg07EIRto8BwCpPJ/JfUxwzV2V3N713aAX+cEoKZ/
-s+kgxC6nZCA7oQIVALME/JYjkdW2uKIGngsEPbXAjdhDAoGADh/uqWJx94UBm31c
-9d8ZTBfRGRnmSSRVFDgPWgA69JD4BR5da8tKz+1HjfMhDXljbMH86ixpD5Ka1Z0V
-pRYUPbyAoB37tsmXMJY7kjyD19d5VdaZboUjVvhH6UJy5lpNNNGSvFl4fqkxyvw+
-pq1QV0N5RcvK120hlXdfHUX+YKYDgYQAAoGAQGr7IuKJcYIvJRMjxwl43KxXY2xC
-aoCiM/bv117MfI94aNf1UusGhp7CbYAY9CXuL60P0oPMAajbaTE5Z34AuITeHq3Y
-CNMHwxalip8BHqSSGmGiQsXeK7T+r1rPXsccZ1c5ikGDZ4xn5gUaCyy2rCmb+fOJ
-6VAfCbAbAjmNKwejdzB1MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgFGMBUG
-A1UdIAQOMAwwCgYIKoF6AXkBAQEwHQYDVR0OBBYEFPkeNRcUf8idzpKblYbLNxs0
-MQhSMB8GA1UdIwQYMBaAFPkeNRcUf8idzpKblYbLNxs0MQhSMAsGByqGSM44BAMF
-AAMvADAsAhRVh+CJA5eVyEYU5AO9Tm7GxX0rmQIUBCqsU5u1WxoZ5lEXicDX5/Ob
-sRQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw
-gYkxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3Rv
-bjEXMBUGA1UEChMOQUJBLkVDT00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJv
-b3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWluQGRpZ3NpZ3RydXN0LmNvbTAeFw05
-OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYDVQQGEwJVUzELMAkG
-A1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5FQ09N
-LCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkB
-FhVhZG1pbkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCx0xHgeVVDBwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM
-0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1jVv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFG
-PR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNfWiKX7BmbwQVo/ea3qZGU
-LOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtxA6k4ShZs
-iSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU
-+/94Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYB
-Af8CAQgwDQYJKoZIhvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0k
-qS8Kfv2kRLD4VAe9G52dyntQJHsRW0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOir
-vRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJhkoHWG9YA8A6eKHegTYjHInYZ
-w8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm/lowdiT/QHI8
-eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/
-O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
-MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
-0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
-TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
-RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
-zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
-BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
-AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
-PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
-BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
-9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
-Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
-Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
-n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
-H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
-NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
-7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
-m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
-xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
-YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
-JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
-I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
-kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
-EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
-Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
-gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
-rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
-1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
-h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
-yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
-7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
-RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
-ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
-M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
-my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
-AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
-9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
-hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
-fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf
-MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp
-Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww
-HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES
-MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg
-MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B
-8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY
-tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl
-HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj
-zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU
-JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM
-ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv
-a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p
-K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi
-puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT
-yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO
-owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC
-jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy
-fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo
-Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo
-M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM
-Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed
-2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH
-/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl
-nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE
-O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU
-9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9
-j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw
-CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
-dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
-CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B
-CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx
-ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
-U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
-IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf
-WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK
-xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE
-zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F
-5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv
-OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz
-ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME
-lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG
-Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
-gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k
-Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw
-CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
-dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
-CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B
-CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy
-MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
-U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
-IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV
-p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw
-BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl
-5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi
-3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+
-QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ
-2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN
-I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL
-553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
-10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN
-uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
-MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
-Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
-iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
-5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
-BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
-MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
-ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
-dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
-MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
-fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
-AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
-hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
-GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
-zmVml64mXg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
-RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
-Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
-RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
-IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
-Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
-CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
-8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
-bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
-dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
-QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
-C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
-ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
-KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
-VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
-DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
-fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
-d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
-JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
-yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
-ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
-Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
-MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
-bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
-RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
-CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
-6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
-5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
-AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
-ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
-cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
-by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
-IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
-Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
-KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
-HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
-BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
-FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
-pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
-wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
-EkP/TOYGJqibGapEPHayXOw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv
-b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU
-cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv
-RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M
-ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5
-1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz
-dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl
-IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy
-bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw
-NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
-VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
-IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
-IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS
-zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
-YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ
-KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb
-adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk
-ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
-BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
-ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
-LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
-VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
-BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
-FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
-AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK
-Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj
-V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+
-hjM+5i9Ibq9UkE6tsSU=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
-SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
-SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx
-MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
-VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
-IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
-IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ
-H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
-8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr
-SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj
-mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk
-ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
-BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
-ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
-LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
-VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
-BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
-FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
-AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD
-qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9
-D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy
-r33I6unUVtkOE7LFRVA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
-SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3
-MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8
-m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
-ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8
-eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47
-3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh
-ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
-AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
-BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
-hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA
-AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF
-aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL
-H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
-SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3
-MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN
-G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
-VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn
-6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8
-2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh
-ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
-AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
-BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
-hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca
-2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI
-3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS
-AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq
-SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD
-VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNTha
-Fw0yNTEyMjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
-bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg
-cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu
-ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD
-QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp
-bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP
-aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJ
-spQgvJhPUOtopKdJC7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCB
-hYEFcYGdtJUZqV92NC5jNzVXjrQfQj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nB
-Bt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQIDAQABo4IEQzCCBD8wHQYDVR0O
-BBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCCAUGAFKGtMbH5
-PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
-CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ
-bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt
-YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD
-aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT
-IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
-BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
-CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB
-BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
-EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
-BglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
-aHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlw
-cy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMv
-aXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3
-dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIB
-BwQsFipodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8w
-NwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5
-Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz
-L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1W
-WKJBGyi3leGmGpVfp3hAK+/blkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfN
-HnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvN
-b2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD
-VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT
-IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD
-Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz
-MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE
-ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw
-FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu
-aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY
-XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1
-gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4
-Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY
-JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU
-dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14
-cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr
-SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG
-A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAx
-OFoXDTI1MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy
-Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l
-dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw
-cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh
-bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU
-aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B
-CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-vLjuVqWajOY2ycJioGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4
-Efdo/BdApWgnMjvEp+ZCccWZ73b/K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFY
-q6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0GmqaMCAwEAAaOCBIAwggR8MB0G
-A1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSCAUcwggFDgBSL
-0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
-BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ
-UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp
-cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg
-Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD
-EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w
-HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
-BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
-FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD
-VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw
-cy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
-IGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgECBBwWGmh0
-dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8v
-d3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCG
-SAGG+EIBAwQ4FjZodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25U
-aW1lc3RhbXBpbmcuaHRtbD8wQgYJYIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBz
-LmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGluZy5odG1sPzBABglghkgBhvhC
-AQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1lc3RhbXBp
-bmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy
-MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFj
-ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEF
-BQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI
-hvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk3
-6MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWTs/zif/WN87GphV+I
-3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
-MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
-isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
-78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
-zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
-BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
-Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
-T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
-mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
-ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
-LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
-BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
-dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
-cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
-YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
-dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
-bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
-YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
-TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
-9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
-jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
-FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
-ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
-ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
-EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
-L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
-O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
-um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
-NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
-DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
-Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
-OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
-bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
-dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
-18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
-yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
-LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
-A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
-zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
-BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
-GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
-cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
-HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
-CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
-BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
-cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
-YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
-YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
-ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
-00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
-cCOxgN8aIDjnfg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
-MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
-QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
-MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN
-AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
-Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
-ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
-IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
-c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
-dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y
-AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw
-TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8
-/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
-LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/
-jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms
-Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
-MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
-QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
-MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN
-AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
-Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
-ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
-IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
-c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
-dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF
-Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw
-Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW
-w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
-LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE
-Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD
-2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
-IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
-DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
-EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
-ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
-dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
-QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
-dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
-wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
-G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
-AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
-c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
-9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
-YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
-Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
-MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
-cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
-d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
-DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
-rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
-uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
-BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
-MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
-/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
-gQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
-dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
-bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
-QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
-BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
-IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
-bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
-Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
-Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
-Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
-ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
-b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
-KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
-BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
-BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
-MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
-Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
-A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
-c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
-6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
-Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
-8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
-Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
-9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
-pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
-CayJSdM=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
-ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
-TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
-NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
-VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
-Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
-N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
-iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
-YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
-axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
-yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
-AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
-ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
-VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
-BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
-QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
-ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
-YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
-QErNaLly7HF27FSOH4UMAWr6pjisH8SE
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
-NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
-VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
-bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
-H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
-4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
-BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
-EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
-FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
-lA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
-YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
-FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
-J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
-r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
-lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
-AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
-HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
-qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
-cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
-cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
-T8qAkbYp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
-VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
-MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
-BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
-dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
-ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
-0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
-uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
-hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
-YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
-1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCB
-wTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQL
-EzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1
-dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UEChMO
-VmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx
-OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5j
-b20vcnBhIChjKTAwMSwwKgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1
-dGhvcml0eSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVli
-zrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhjzCx9abQzNvQ3B5rB3UBU
-/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6ov8uQjI11
-S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/
-AgEAMEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0
-dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0
-cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsG
-AQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJpc2lnbi5j
-b20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2DcIBcBlK0lRW
-HqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea
-w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU
-58dzq6wf7iWbwBbtt8pb8BQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx
-DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2
-aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1
-MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT
-QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp
-b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX
-ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i
-/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU
-58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g
-halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E
-1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/
-ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb
-mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
-kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN
-dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ
-ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn
-B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
-YmVUUlVTVGVkIFJvb3QgQ0EtQmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAy
-MDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVowZjESMBAGA1UEChMJYmVUUlVTVGVk
-MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
-ZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i
-805qX4QQ+2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6
-l2Qijvj/YaOcGx6Sj8CoCd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92B
-FODEPM2dMPgwqZfT7syj0B9fHBOB1BirlNFjw55/NZKeX0Tq7PQiXLfoPX2k+Ymp
-kbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNeDsYq0ATdcT0gTlgn/FP7
-eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOCAh4wggIa
-MA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4A
-AAEJKIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3Ig
-dXNlIG9mIHRoaXMgQ2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVu
-dCBhbmQgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJk
-IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgdGhlIENlcnRpZmljYXRpb24g
-UHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0eSBBZ3JlZW1l
-bnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl
-LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5k
-ZXguaHRtbDBBBggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3By
-b2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgc
-cxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR3D8kVpgccxiIav+DR+22MA4GA1Ud
-DwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6svfoNyYt5hhwjdrCA
-WXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyXEHu6
-7RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AY
-gkHNZTfqjjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb
-4cV97yHgjQ5dUX2xZ/2jvTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9
-CReJf8Py05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX
-VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD
-QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX
-DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl
-ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU
-ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT
-CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P
-6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM
-jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX
-2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N
-R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j
-rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV
-HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa
-gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1
-bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0
-ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy
-YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl
-ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl
-cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0
-L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx
-CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV
-HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ
-KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo
-Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2
-jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe
-1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5
-mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc
-tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy
-MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk
-MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
-ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO
-K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD
-d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj
-DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe
-yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt
-VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB
-MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI
-KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp
-ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
-b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0
-aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg
-Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
-cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF
-BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz
-L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug
-eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv
-b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w
-bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw
-ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA
-FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw
-qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE
-kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ
-5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
-evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz
-ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k
-XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh
-xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi
-MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
-czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp
-b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn
-HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I
-1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk
-tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU
-GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er
-cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY
-MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+
-AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j
-b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
-OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh
-dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
-IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
-LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
-ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo
-ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w
-cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME
-GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt
-z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g
-6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK
-mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd
-LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb
-J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3
-SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEw
-OTIzMTMxODE3WjB1MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWdu
-ZXQgLSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g5DY1Hw7h
-gCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZsjqBeynX8T90vFILqsY2K
-5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfHHB67Af+g7u0dEHdDW7lwy81MwFYxBTRy
-9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAE
-gfwwgfkwgfYGDSsGAQQBvj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3
-eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2ppIGRs
-YSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENBIHcgaGllcmFyY2hp
-aSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3Jp
-dW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQwHwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQb
-sa8wHQYDVR0OBBYEFMODHtVZd1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQB
-FIGh8Jpxt87AgSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
-f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIisTsytFzVP32/W
-+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB3vSaoYg+wdkcvb6souMJzuc2
-uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uf
-tXncwKJrMiE3lvgOOBITRzcahirLer4c
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE9zCCA9+gAwIBAgIEPL/xoTANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQgLSBQQ0EgS2xhc2EgMjAeFw0wMjA0MTkxMDI5NTNa
-Fw0xNzA0MTgxMjUzMDdaMHUxCzAJBgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4g
-eiBvLm8uMSQwIgYDVQQLExtDZW50cnVtIENlcnR5ZmlrYWNqaSBTaWduZXQxHzAdBgNVBAMTFkND
-IFNpZ25ldCAtIENBIEtsYXNhIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgLJu
-QqY4yavbSgHg8CyfKTx4BokNSDOVz4eD9vptUr11Kqd06ED1hlH7Sg0goBFAfntNU/QTKwSBaNui
-me7C4sSEdgsKrPoAhGb4Mq8y7Ty7RqZz7mkzNMqzL2L2U4yQ2QjvpH8MH0IBqOWEcpSkpwnrCDIm
-RoTfd+YlZWKi2JceQixUUYIQ45Ox8+x8hHbvvZdgqtcvo8PW27qoHkp/7hMuJ44kDAGrmxffBXl/
-OBRZp0uO1CSLcMcVJzyr2phKhy406MYdWrtNPEluGs0GFDzd0nrIctiWAO4cmct4S72S9Q6e//0G
-O9f3/Ca5Kb2I1xYLj/xE+HgjHX9aD2MhAgMBAAGjggGMMIIBiDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjCB4wYDVR0gBIHbMIHYMIHVBg0rBgEEAb4/AhQKAQEAMIHDMHUGCCsGAQUF
-BwICMGkaZ0NlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBQQ0EyIC0gQ2VydHlmaWthdHkgVXJ6ZWRvdyBLbGFzeSAyIi4wSgYI
-KwYBBQUHAgEWPmh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9kb2t1bWVudHkva2xh
-c2EyL3BjX3BjYTIudHh0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly93d3cuc2lnbmV0LnBsL3Jl
-cG96eXRvcml1bS9jcmwvcGNhMi5jcmwwHwYDVR0jBBgwFoAUwGxGyl2CfpYHRonE82AVXO08kMIw
-HQYDVR0OBBYEFLtFBlILy4HNKVSzvHxBTM0HDowlMA0GCSqGSIb3DQEBBQUAA4IBAQBWTsCbqXrX
-hBBev5v5cIuc6gJM8ww7oR0uMQRZoFSqvQUPWBYM2/TLI/f8UM9hSShUVj3zEsSj/vFHagUVmzuV
-Xo5u0WK8iaqATSyEVBhADHrPG6wYcLKJlagge/ILA0m+SieyP2sjYD9MUB9KZIEyBKv0429UuDTw
-6P7pslxMWJBSNyQxaLIs0SRKsqZZWkc7ZYAj2apSkBMX2Is1oHA+PwkF6jQMwCao/+CndXPUzfCF
-6caa9WwW31W26MlXCvSmJgfiTPwGvm4PkPmOnmWZ3CczzhHl4q7ztHFzshJH3sZWDnrWwBFjzz5e
-Pr3WHV1wA7EY6oT4zBx+2gT9XBTB
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEUzCCAzugAwIBAgIEPq+qjzANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJQTDE3MDUGA1UE
-ChMuQ1ppQyBDZW50cmFzdCBTQSB3IGltaWVuaXUgTWluaXN0cmEgR29zcG9kYXJraTEZMBcGA1UE
-AxMQQ1ppQyBDZW50cmFzdCBTQTAeFw0wMzA0MzAxMDUwNTVaFw0wODA0MjgxMDUwNTVaMGgxCzAJ
-BgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4geiBvLm8uMR8wHQYDVQQDExZDQyBT
-aWduZXQgLSBDQSBLbGFzYSAzMRcwFQYDVQQFEw5OdW1lciB3cGlzdTogNDCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALVdeOM62cPH2NERFxbS5FIp/HSv3fgesdVsTUFxZbGtE+/E0RMl
-KZQJHH9emx7vRYubsi4EOLCjYsCOTFvgGRIpZzx7R7T5c0Di5XFkRU4gjBl7aHJoKb5SLzGlWdoX
-GsekVtl6keEACrizV2EafqjI8cnBWY7OxQ1ooLQp5AeFjXg+5PT0lO6TUZAubqjFbhVbxSWjqvdj
-93RGfyYE76MnNn4c2xWySD07n7uno06TC0IJe6+3WSX1h+76VsIFouWBXOoM7cxxiLjoqdBVu24+
-P8e81SukE7qEvOwDPmk9ZJFtt1nBNg8a1kaixcljrA/43XwOPz6qnJ+cIj/xywECAwEAAaOCAQow
-ggEGMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMDMGA1UdIAEB/wQpMCcwJQYEVR0g
-ADAdMBsGCCsGAQUFBwIBFg93d3cuY2VudHJhc3QucGwwgY4GA1UdIwSBhjCBg4AU2a7r85Cp1iJN
-W0Ca1LR6VG3996ShZaRjMGExCzAJBgNVBAYTAlBMMTcwNQYDVQQKEy5DWmlDIENlbnRyYXN0IFNB
-IHcgaW1pZW5pdSBNaW5pc3RyYSBHb3Nwb2RhcmtpMRkwFwYDVQQDExBDWmlDIENlbnRyYXN0IFNB
-ggQ9/0sQMB0GA1UdDgQWBBR7Y8wZkHq0zrY7nn1tFSdQ0PlJuTANBgkqhkiG9w0BAQUFAAOCAQEA
-ldt/svO5c1MU08FKgrOXCGEbEPbQxhpM0xcd6Iv3dCo6qugEgjEs9Qm5CwUNKMnFsvR27cJWUvZb
-MVcvwlwCwclOdwF6u/QRS8bC2HYErhYo9bp9yuxxzuow2A94c5fPqfVrjXy+vDouchAm6+A5Wjzv
-J8wxVFDCs+9iGACmyUWr/JGXCYiQIbQkwlkRKHHlan9ymKf1NvIej/3EpeT8fKr6ywxGuhAfqofW
-pg3WJY/RCB4lTzD8vZGNwfMFGkWhJkypad3i9w3lGmDVpsHaWtCgGfd0H7tUtWPkP+t7EjIRCD9J
-HYnTR+wbbewc5vOI+UobR15ynGfFIaSIiMTVtQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
-QSBLbGFzYSAyMB4XDTAzMTAxNDExNTgyMloXDTE3MDQxODEyNTMwN1owdzELMAkG
-A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
-BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEhMB8GA1UEAxMYQ0MgU2ln
-bmV0IC0gT0NTUCBLbGFzYSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo
-VCsaBStblXQYVNthe3dvaCrfvKpPXngh4almm988iIlEv9CVTaAdCfaJNihvA+Vs
-Qw8++ix1VqteMQE474/MV/YaXigP0Zr0QB+g+/7PWVlv+5U9Gzp9+Xx4DJay8AoI
-iB7Iy5Qf9iZiHm5BiPRIuUXT4ZRbZRYPh0/76vgRsQIDAQABo4IBkjCCAY4wDgYD
-VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEEGA1UdHwQ6MDgwNqA0
-oDKGMGh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9jcmwva2xhc2Ey
-LmNybDCB2AYDVR0gBIHQMIHNMIHKBg4rBgEEAb4/AoFICgwBADCBtzBsBggrBgEF
-BQcCAjBgGl5DZXJ0eWZpa2F0IHd5ZGFueSB6Z29kbmllIHogZG9rdW1lbnRlbSAi
-UG9saXR5a2EgQ2VydHlmaWthY2ppIC0gQ2VydHlmaWthdHkgcmVzcG9uZGVyb3cg
-T0NTUCIuMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0
-b3JpdW0vZG9rdW1lbnR5L3BjX29jc3BfMV8wLnBkZjAfBgNVHSMEGDAWgBS7RQZS
-C8uBzSlUs7x8QUzNBw6MJTAdBgNVHQ4EFgQUKEVrOY7cEHvsVgvoyZdytlbtgwEw
-CQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAQrRg5MV6dxr0HU2IsLInxhvt
-iUVmSFkIUsBCjzLoewOXA16d2oDyHhI/eE+VgAsp+2ANjZu4xRteHIHoYMsN218M
-eD2MLRsYS0U9xxAFK9gDj/KscPbrrdoqLvtPSMhUb4adJS9HLhvUe6BicvBf3A71
-iCNe431axGNDWKnpuj2KUpj4CFHYsWCXky847YtTXDjri9NIwJJauazsrSjK+oXp
-ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv
-hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIEP4vnLzANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEfMB0GA1UEAxMWQ0Mg
-U2lnbmV0IC0gQ0EgS2xhc2EgMzEXMBUGA1UEBRMOTnVtZXIgd3Bpc3U6IDQwHhcN
-MDMxMDE0MTIwODAwWhcNMDgwNDI4MTA1MDU1WjB3MQswCQYDVQQGEwJQTDEfMB0G
-A1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBD
-ZXJ0eWZpa2FjamkgU2lnbmV0MSEwHwYDVQQDExhDQyBTaWduZXQgLSBPQ1NQIEts
-YXNhIDMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM/9GwvARNuCVN+PqZmO
-4FqH8vTqhenUyqRkmAVT4YhLu0a9AXeLAYVDu+NTkYzsAUMAfu55rIKHNLlm6WbF
-KvLiKKz4p4pbUr+ToPcwl/TDotidloUdBAxDg0SL+PmQqACZDe3seJho2IYf2vDL
-/G4TLMbKmNB0mlWFuN0f4fJNAgMBAAGjggGgMIIBnDAOBgNVHQ8BAf8EBAMCB4Aw
-EwYDVR0lBAwwCgYIKwYBBQUHAwkwTwYDVR0fBEgwRjBEoEKgQIY+aHR0cDovL3d3
-dy5zaWduZXQucGwva3dhbGlmaWtvd2FuZS9yZXBvenl0b3JpdW0vY3JsL2tsYXNh
-My5jcmwwgdgGA1UdIASB0DCBzTCBygYOKwYBBAG+PwKCLAoCAQAwgbcwbAYIKwYB
-BQUHAgIwYBpeQ2VydHlmaWthdCB3eWRhbnkgemdvZG5pZSB6IGRva3VtZW50ZW0g
-IlBvbGl0eWthIENlcnR5ZmlrYWNqaSAtIENlcnR5ZmlrYXR5IHJlc3BvbmRlcm93
-IE9DU1AiLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5
-dG9yaXVtL2Rva3VtZW50eS9wY19vY3NwXzFfMC5wZGYwHwYDVR0jBBgwFoAUe2PM
-GZB6tM62O559bRUnUND5SbkwHQYDVR0OBBYEFG4jnCMvBALRQXtmDn9TyXQ/EKP+
-MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADggEBACXrKG5Def5lpRwmZom3UEDq
-bl7y4U3qomG4B+ok2FVZGgPZti+ZgvrenPj7PtbYCUBPsCSTNrznKinoT3gD9lQQ
-xkEHwdc6VD1GlFp+qI64u0+wS9Epatrdf7aBnizrOIB4LJd4E2TWQ6trspetjMIU
-upyWls1BmYUxB91R7QkTiAUSNZ87s3auhZuG4f0V0JLVCcg2rn7AN1rfMkgxCbHk
-GxiQbYWFljl6aatxR3odnnzVUe1I8uoY2JXpmmUcOG4dNGuQYziyKG3mtXCQWvug
-5qi9Mf3KUh1oSTKx6HfLjjNl1+wMB5Mdb8LF0XyZLdJM9yIZh7SBRsYm9QiXevY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYw
-OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu
-ZXQgLSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7BrBlbN5ma
-M5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRAspEXE4gvwb08ASY6w5s+
-HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8wnfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxW
-Ceol9IekpBRVmuuSA6QG0Jkm+pGDJ05yj2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9
-JyN0ag1yII/LPx8HK5J4W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3x
-W20QjQcSZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
-AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHkMIGaBggrBgEFBQcC
-AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6
-IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z
-aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy
-bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUwGxGyl2CfpYHRonE
-82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkx
-UGY7U9kVrLI71xBgoNVyzXTiMNDBvjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsan
-ot1Xt6j0ZDC+03FjLHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G2
-2Ohu+EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqWuHitKQDV
-tcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6NA9GRTCNxm/dXlcwnmY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYw
-OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu
-ZXQgLSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3LanJtdue
-Ne6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP6KZTU0DixOrV+K7iWaqA
-iQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6HdbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPE
-OpO94mAKcBUhk6T/ki0evXX/ZvvktwmF3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Db
-w34hA1A+ckTwhxzecrB8TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC
-3P8QqoK4ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
-AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHkMIGaBggrBgEFBQcC
-AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6
-IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z
-aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy
-bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUXvthcPHlH5BgGhlM
-ErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIce95Mvn710KCAISA0CuHD4aznTU6pLoCDShW4
-7OR+GTpJUm1coTcUqlBHV9mra4VFrBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJG
-dsJF/XU/7smummgjMNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oF
-JTlpuxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1DOcePEhKz
-1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BXWCW+KxwiBrtQTXv4dTE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEzzCCA7egAwIBAgIEO6ocGTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIwMTY0MjE5WhcNMjYw
-OTIxMTU0MjE5WjBxMQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWdu
-ZXQgLSBSb290Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrr2vydnNpELfGW3Ks
-ARiDhJvwDtUe4AbWev+OfMc3+vA29nX8ZmIwno3gmItjo5DbUCCRiCMq5c9epcGu+kg4a3BJChVX
-REl8gVh0ST15rr3RKrSc4VgsvQzl0ZUraeQLl8JoRT5PLsUj3qwF78jUCQVckiiLVcnGfZtFCm+D
-CJXliQBDMB9XFAUEiO/DtEBs0B7wJGx7lgJeJpQUcGiaOPjcJDYOk7rNAYmmD2gWeSlepufO8luU
-YG/YDxTC4mqhRqfa4MnVO5dqy+ICj2UvUpHbZDB0KfGRibgBYeQP1kuqgIzJN4UqknVAJb0aMBSP
-l+9k2fAUdchx1njlbdcbAgMBAAGjggFtMIIBaTAPBgNVHRMBAf8EBTADAQH/MIIBBAYDVR0gBIH8
-MIH5MIH2Bg0rBgEEAb4/AgEKAQEAMIHkMIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lz
-dGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEg
-Um9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNoaWkg
-Q0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVt
-L2Rva3VtZW50eS9wY19yb290Y2EudHh0MB0GA1UdDgQWBBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAf
-BgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN
-AQEFBQADggEBAGnY5QmYqnnO9OqFOWZxxb25UHRnaRF6IV9aaGit5BZufZj2Tq3v8L3SgE34GOoI
-cdRMMG5JEpEU4mN/Ef3oY6Eo+7HfqaPHI4KFmbDSPiK5s+wmf+bQSm0Yq5/h4ZOdcAESlLQeLSt1
-CQk2JoKQJ6pyAf6xJBgWEIlm4RXE4J3324PUiOp83kW6MDvaa1xY976WyInr4rwoLgxVl11LZeKW
-ha0RJJxJgw/NyWpKG7LWCm1fglF8JH51vZNndGYq1iKtfnrIOvLZq6bzaCiZm1EurD8HE6P7pmAB
-KK6o3C2OXlNfNIgwkDN/cDqk5TYsTkrpfriJPdxXBH8hQOkW89g=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBDQSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloX
-DTExMDkyMzExMTgxN1owdjELMAkGA1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6
-IG8uby4xJDAiBgNVBAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0Mg
-U2lnbmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJYrISEtSsd
-uHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ12FJarD1X6mSQ4cfN/60v
-LfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjRAM0tdwXSnzuTEunfw0Oup559y3Iqxg1c
-ExflB6cfAgMBAAGjggGXMIIBkzBBBgNVHR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5w
-bC9yZXBvenl0b3JpdW0vY3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQM
-MAoGCCsGAQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYBBQUH
-AgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtICJQb2xpdHlr
-YSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5pZSBjemFzZW0iLjBHBggrBgEFBQcC
-ARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJf
-MS5wZGYwHwYDVR0jBBgwFoAUw4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavO
-Yd9u9tej53vWXwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
-+z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMbskF8I31JxIeB
-vueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR+7KtwMg4sFDJZ8RNgOf7tbA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE
-ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z
-dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq
-hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3
-WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh
-bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g
-dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE
-AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt
-YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6
-rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL
-VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40
-I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV
-HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/
-vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ
-bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl
-IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe
-BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW
-iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms
-1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
-MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
-VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx
-JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz
-MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh
-cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe
-MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5
-GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1
-fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx
-Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u
-jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx
-ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp
-/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ
-co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s
-zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo
-+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F
-TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w
-ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm
-gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO
-BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf
-U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h
-c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN
-AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/
-BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC
-AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC
-AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG
-+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV
-HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN
-BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y
-PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M
-AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP
-qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP
-sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v
-dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/
-O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P
-+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg
-g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg
-T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa
-yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
-o2A=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
------BEGIN CERTIFICATE-----
-MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
-ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
-MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
-QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
-b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
-b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
-KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
-VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
-SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
-cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
-6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
-MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
-kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
-BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
-BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
-c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
-AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
-BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
-OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
-A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
-0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
-RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
-qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
-U+4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
-bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
-BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
-DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
-YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
-ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
-N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
-r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
-f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
-U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
-TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
-VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
-SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
-biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
-MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
-AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
-ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
-Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
-IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
-bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
-QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
-WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
-SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----\r
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\r
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\r
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\r
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\r
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy\r
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\r
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\r
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\r
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\r
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY\r
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9\r
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS\r
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v\r
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu\r
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC\r
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd\r
------END CERTIFICATE-----\r
diff --git a/tests/vcore/test-cases/keys/README b/tests/vcore/test-cases/keys/README
deleted file mode 100644 (file)
index c7151d6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains certificate/public keys/private keys used to create unittests.
-Passwort to private keys is "1234" or "secret".
\ No newline at end of file
diff --git a/tests/vcore/test-cases/keys/filip_rsa_cert.pem b/tests/vcore/test-cases/keys/filip_rsa_cert.pem
deleted file mode 100644 (file)
index 0abebc6..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number:
-            c7:4a:82:f6:9d:1b:f6:7e
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=PL, ST=Maz, O=Samsung, OU=SPRC, CN=Samsung/emailAddress=samsung@samsung.com
-        Validity
-            Not Before: Oct  5 12:00:51 2011 GMT
-            Not After : Oct  2 12:00:51 2021 GMT
-        Subject: C=PL, ST=MAZ, L=Leg, O=Sam, OU=SPRC, CN=Filip/emailAddress=filip@samsung.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d2:fe:c4:b4:c1:74:82:6f:7e:28:8c:df:1b:58:
-                    57:78:3e:5f:5e:4c:b1:e1:d7:c5:0d:1a:c3:e9:2e:
-                    9a:78:8a:d7:5f:b9:cf:ce:83:2a:9a:4a:80:f0:07:
-                    35:61:11:60:15:2c:24:f1:7b:15:1a:e0:d7:2f:6b:
-                    ee:35:35:b9:16:e1:10:ac:17:37:86:b3:49:2d:a6:
-                    ed:7e:f1:0f:af:d1:01:0e:1a:a5:45:da:b4:24:82:
-                    29:73:0c:5f:e8:3b:9e:85:c7:0f:6f:1b:53:80:fa:
-                    a7:50:77:7c:8e:01:5d:84:a8:b3:41:3e:b1:18:07:
-                    d2:b9:18:5c:9f:7e:b6:a4:49
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            Netscape Comment: 
-                OpenSSL Generated Certificate
-            X509v3 Subject Key Identifier: 
-                7B:2C:B7:89:5E:F9:2A:D3:A4:A4:F1:5D:EA:69:D1:F5:D1:46:64:CC
-            X509v3 Authority Key Identifier: 
-                keyid:82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
-
-    Signature Algorithm: sha1WithRSAEncryption
-        0e:db:f4:08:1a:d0:d5:00:8c:1f:d8:ca:16:3a:52:a6:ae:f3:
-        14:a3:17:41:e5:6d:6f:f6:62:7b:cd:b7:ff:fc:28:89:c8:3c:
-        93:19:cf:e6:c4:b8:74:95:8d:5c:d6:f5:88:c2:dd:86:05:7c:
-        d2:0d:72:b7:78:13:58:fc:53:b4:5c:e9:ad:0c:8d:88:91:d3:
-        9a:b6:cd:59:72:d7:d6:ba:11:54:65:04:fc:8f:10:e3:17:b1:
-        aa:96:cd:94:92:16:d8:98:e6:fe:4a:a8:29:f9:ca:c4:e4:46:
-        e8:73:4f:5d:95:76:f4:d6:36:7c:34:4f:3c:e2:18:a0:54:33:
-        ad:72
------BEGIN CERTIFICATE-----
-MIIC4zCCAkygAwIBAgIJAMdKgvadG/Z+MA0GCSqGSIb3DQEBBQUAMHIxCzAJBgNV
-BAYTAlBMMQwwCgYDVQQIEwNNYXoxEDAOBgNVBAoTB1NhbXN1bmcxDTALBgNVBAsT
-BFNQUkMxEDAOBgNVBAMTB1NhbXN1bmcxIjAgBgkqhkiG9w0BCQEWE3NhbXN1bmdA
-c2Ftc3VuZy5jb20wHhcNMTExMDA1MTIwMDUxWhcNMjExMDAyMTIwMDUxWjB4MQsw
-CQYDVQQGEwJQTDEMMAoGA1UECBMDTUFaMQwwCgYDVQQHEwNMZWcxDDAKBgNVBAoT
-A1NhbTENMAsGA1UECxMEU1BSQzEOMAwGA1UEAxMFRmlsaXAxIDAeBgkqhkiG9w0B
-CQEWEWZpbGlwQHNhbXN1bmcuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDS/sS0wXSCb34ojN8bWFd4Pl9eTLHh18UNGsPpLpp4itdfuc/OgyqaSoDwBzVh
-EWAVLCTxexUa4Ncva+41NbkW4RCsFzeGs0ktpu1+8Q+v0QEOGqVF2rQkgilzDF/o
-O56Fxw9vG1OA+qdQd3yOAV2EqLNBPrEYB9K5GFyffrakSQIDAQABo3sweTAJBgNV
-HRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZp
-Y2F0ZTAdBgNVHQ4EFgQUeyy3iV75KtOkpPFd6mnR9dFGZMwwHwYDVR0jBBgwFoAU
-ggh/2wAChuhTKqX6WK5nfxQ4yGAwDQYJKoZIhvcNAQEFBQADgYEADtv0CBrQ1QCM
-H9jKFjpSpq7zFKMXQeVtb/Zie823//woicg8kxnP5sS4dJWNXNb1iMLdhgV80g1y
-t3gTWPxTtFzprQyNiJHTmrbNWXLX1roRVGUE/I8Q4xexqpbNlJIW2Jjm/kqoKfnK
-xORG6HNPXZV29NY2fDRPPOIYoFQzrXI=
------END CERTIFICATE-----
diff --git a/tests/vcore/test-cases/keys/filip_rsa_key.pem b/tests/vcore/test-cases/keys/filip_rsa_key.pem
deleted file mode 100644 (file)
index 6d0f4d8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,FDE9F633EA955697
-
-ASWLPmOFfKlo46nJXTJLCkhvD/q1MsHXPaaSByVzaavXxwMxOc2g7VkIR2D0yViQ
-mxQFhJLVeq/1UI9pXL2+zk0awptHogwjTw81r2I+R6qkHsSjGjl4Ds6hOX3J211K
-UqO4+3kf6JJOizXbH/y6WWbj9jEJeE7zzmhuyq8k6Kp47leZsle5y13usii323tz
-OgAzZGsQBSkrlBNKKM58O7TkCO6UbZLjVEoBqcJU+p+UiKoGKdUV/MxkbGEKTEPN
-wrFiqIxSk9KuV5iDAjnYCPz6iQIE+Q3NOW+MTw0yjWoMb7uXJexGM6VYkYFZUffe
-16nAzJpYbG+CsJ5XTiGoiodazloVYdnDFnbDLDGS2kLgiuuHzF/DL1lFlbXwgpGj
-sXFp6CemJ+KnMz4aIfC63Wuav+jvAVw26pl/cYxbhboSkl+H9ZKbk+KcIeMN1Rb7
-LD35tsjO5rnQ1QlG0WP6qT6O1SPG/4GgJTyzTwuw6i8jQw62ahKB5hTri/Z8Fmrn
-kFh8F7gTJ+YnxrQuTK8r9QrZrXsE/YqUbHtVEI/m/6uydWdFHNWzJxe6oavuwks2
-3mumh1101mBEuEClzOzHP925oeXW+N8R+jFnA/7NkIjeOo+J9Z+QzBiq6DVJcuEY
-5aqXcCIS9AciUoh3/ovtT637r25nhYwCruZLZ+4+Vkpv9n/gPSipHXgHt2cynaID
-6O7xyoADa+zY1zTRd+A4aA+SWd/bxvKe+6sc/6iBlKA8bKwfPJcwg7il4bX4g5dk
-dI8gTyM9puDoHrdTaLwY8+JL0MCguEvkk7LDttNfN0gxYvxXTpZ+Tg==
------END RSA PRIVATE KEY-----
diff --git a/tests/vcore/test-cases/keys/magda_dsa_cert.pem b/tests/vcore/test-cases/keys/magda_dsa_cert.pem
deleted file mode 100644 (file)
index 0348db8..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number:
-            c7:4a:82:f6:9d:1b:f6:7f
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=PL, ST=Maz, O=Samsung, OU=SPRC, CN=Samsung/emailAddress=samsung@samsung.com
-        Validity
-            Not Before: Oct  5 12:11:33 2011 GMT
-            Not After : Oct  2 12:11:33 2021 GMT
-        Subject: C=PL, ST=Mazowieckie, L=legionowo, O=samsung, OU=sprc, CN=magda/emailAddress=magda@samsung.com
-        Subject Public Key Info:
-            Public Key Algorithm: dsaEncryption
-            DSA Public Key:
-                pub: 
-                    00:ac:40:42:0e:cc:a8:28:24:0b:43:09:7e:d6:23:
-                    35:a2:8c:e6:7d:62:66:fe:23:d6:58:b8:f7:32:9f:
-                    63:99:d3:2c:ff:af:60:0b:e0:d2:8c:0b:35:8b:c9:
-                    e6:77:0a:7d:8d:43:00:23:d4:e3:ff:ad:0b:b4:d3:
-                    b9:af:79:c2:08:f9:af:0b:c0:5e:7c:e0:4b:23:86:
-                    b9:2a:f4:7c:af:43:ca:b1:fa:13:42:df:5d:3f:96:
-                    b8:84:07:6a:19:b6:89:26:f1:a8:fa:c2:86:59:e9:
-                    e7:f1:17:0d:30:5a:3b:a4:1f:76:9a:b4:04:fe:3c:
-                    0a:56:5e:6f:17:00:f9:36:05
-                P:   
-                    00:b5:3c:23:9a:b0:58:65:7c:c7:35:ca:37:5c:a7:
-                    bc:e4:cd:71:a2:5b:e3:29:56:e1:65:b1:d6:30:90:
-                    06:bd:b0:8b:cd:ad:02:e2:da:e9:71:72:73:41:78:
-                    21:ca:0d:b9:3b:53:e2:77:fd:0c:0e:d9:76:a7:6a:
-                    94:0c:52:ab:df:8d:f8:cb:d5:04:39:55:fe:c4:35:
-                    45:8f:34:fe:dc:12:fc:7c:d8:d6:f9:8d:67:47:c9:
-                    17:d5:ff:f4:dc:88:16:4d:f0:62:cd:11:b7:e1:b5:
-                    69:61:23:a0:9b:0d:6d:40:69:8d:27:3d:9f:3b:f6:
-                    b4:88:93:bf:da:34:a6:77:15
-                Q:   
-                    00:b7:2b:f2:e4:00:9a:75:7e:dc:32:c8:03:99:d3:
-                    a3:40:60:d1:b8:cb
-                G:   
-                    24:6e:e6:79:4b:50:6c:cb:a5:44:c7:63:cd:e0:a8:
-                    c9:ad:85:5d:d9:be:e1:a7:2f:22:71:3d:ff:e3:32:
-                    6d:74:c1:dd:b1:40:34:cc:b0:e9:64:ef:93:82:bd:
-                    44:af:2d:9b:9d:8d:f7:97:32:91:38:e9:01:bc:6a:
-                    4c:c6:97:c2:47:56:6c:e1:5d:54:a0:0a:9f:2c:62:
-                    fd:42:ad:63:d4:3a:36:6c:09:07:68:5b:03:51:94:
-                    ce:13:e4:a3:ca:c4:75:ae:ba:08:69:74:55:bc:8c:
-                    d6:52:8c:26:30:3e:c2:9f:69:1b:5d:74:2f:4a:2f:
-                    d7:d4:3d:7e:fa:8a:a7:95
-        X509v3 extensions:
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            Netscape Comment: 
-                OpenSSL Generated Certificate
-            X509v3 Subject Key Identifier: 
-                99:2A:52:86:CC:2F:5A:D1:00:05:DF:A5:DD:6C:5C:71:17:02:C9:D5
-            X509v3 Authority Key Identifier: 
-                keyid:82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
-
-    Signature Algorithm: sha1WithRSAEncryption
-        81:f9:c0:bb:f8:0c:25:10:bf:04:5c:24:82:fa:c7:2f:44:d5:
-        e1:f7:cf:54:07:fb:45:29:d9:4b:a8:9b:e0:81:c6:82:bb:d7:
-        26:f2:fe:42:1e:ef:1f:29:2f:64:8a:83:d8:bf:7a:9d:8d:84:
-        69:23:6b:d3:25:eb:4f:cd:58:44:e9:dd:39:05:09:37:1e:18:
-        fd:6f:26:e9:ab:2e:e2:1c:c0:34:d6:6a:58:26:c0:a4:f0:c8:
-        30:ae:95:70:f0:35:c2:b2:a0:66:a6:d6:a7:6d:7c:58:1a:88:
-        da:ff:69:5d:5d:0e:fa:3a:73:c6:ad:7e:19:e4:15:d9:4b:1b:
-        47:07
------BEGIN CERTIFICATE-----
-MIIEDzCCA3igAwIBAgIJAMdKgvadG/Z/MA0GCSqGSIb3DQEBBQUAMHIxCzAJBgNV
-BAYTAlBMMQwwCgYDVQQIEwNNYXoxEDAOBgNVBAoTB1NhbXN1bmcxDTALBgNVBAsT
-BFNQUkMxEDAOBgNVBAMTB1NhbXN1bmcxIjAgBgkqhkiG9w0BCQEWE3NhbXN1bmdA
-c2Ftc3VuZy5jb20wHhcNMTExMDA1MTIxMTMzWhcNMjExMDAyMTIxMTMzWjCBijEL
-MAkGA1UEBhMCUEwxFDASBgNVBAgTC01hem93aWVja2llMRIwEAYDVQQHEwlsZWdp
-b25vd28xEDAOBgNVBAoTB3NhbXN1bmcxDTALBgNVBAsTBHNwcmMxDjAMBgNVBAMT
-BW1hZ2RhMSAwHgYJKoZIhvcNAQkBFhFtYWdkYUBzYW1zdW5nLmNvbTCCAbcwggEr
-BgcqhkjOOAQBMIIBHgKBgQC1PCOasFhlfMc1yjdcp7zkzXGiW+MpVuFlsdYwkAa9
-sIvNrQLi2ulxcnNBeCHKDbk7U+J3/QwO2XanapQMUqvfjfjL1QQ5Vf7ENUWPNP7c
-Evx82Nb5jWdHyRfV//TciBZN8GLNEbfhtWlhI6CbDW1AaY0nPZ879rSIk7/aNKZ3
-FQIVALcr8uQAmnV+3DLIA5nTo0Bg0bjLAoGAJG7meUtQbMulRMdjzeCoya2FXdm+
-4acvInE9/+MybXTB3bFANMyw6WTvk4K9RK8tm52N95cykTjpAbxqTMaXwkdWbOFd
-VKAKnyxi/UKtY9Q6NmwJB2hbA1GUzhPko8rEda66CGl0VbyM1lKMJjA+wp9pG110
-L0ov19Q9fvqKp5UDgYUAAoGBAKxAQg7MqCgkC0MJftYjNaKM5n1iZv4j1li49zKf
-Y5nTLP+vYAvg0owLNYvJ5ncKfY1DACPU4/+tC7TTua95wgj5rwvAXnzgSyOGuSr0
-fK9DyrH6E0LfXT+WuIQHahm2iSbxqPrChlnp5/EXDTBaO6Qfdpq0BP48ClZebxcA
-+TYFo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy
-YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUmSpShswvWtEABd+l3WxccRcCydUw
-HwYDVR0jBBgwFoAUggh/2wAChuhTKqX6WK5nfxQ4yGAwDQYJKoZIhvcNAQEFBQAD
-gYEAgfnAu/gMJRC/BFwkgvrHL0TV4ffPVAf7RSnZS6ib4IHGgrvXJvL+Qh7vHykv
-ZIqD2L96nY2EaSNr0yXrT81YROndOQUJNx4Y/W8m6asu4hzANNZqWCbApPDIMK6V
-cPA1wrKgZqbWp218WBqI2v9pXV0O+jpzxq1+GeQV2UsbRwc=
------END CERTIFICATE-----
diff --git a/tests/vcore/test-cases/keys/magda_dsa_key.pem b/tests/vcore/test-cases/keys/magda_dsa_key.pem
deleted file mode 100644 (file)
index 7842af6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
------BEGIN DSA PRIVATE KEY-----
-MIIBuwIBAAKBgQC1PCOasFhlfMc1yjdcp7zkzXGiW+MpVuFlsdYwkAa9sIvNrQLi
-2ulxcnNBeCHKDbk7U+J3/QwO2XanapQMUqvfjfjL1QQ5Vf7ENUWPNP7cEvx82Nb5
-jWdHyRfV//TciBZN8GLNEbfhtWlhI6CbDW1AaY0nPZ879rSIk7/aNKZ3FQIVALcr
-8uQAmnV+3DLIA5nTo0Bg0bjLAoGAJG7meUtQbMulRMdjzeCoya2FXdm+4acvInE9
-/+MybXTB3bFANMyw6WTvk4K9RK8tm52N95cykTjpAbxqTMaXwkdWbOFdVKAKnyxi
-/UKtY9Q6NmwJB2hbA1GUzhPko8rEda66CGl0VbyM1lKMJjA+wp9pG110L0ov19Q9
-fvqKp5UCgYEArEBCDsyoKCQLQwl+1iM1oozmfWJm/iPWWLj3Mp9jmdMs/69gC+DS
-jAs1i8nmdwp9jUMAI9Tj/60LtNO5r3nCCPmvC8BefOBLI4a5KvR8r0PKsfoTQt9d
-P5a4hAdqGbaJJvGo+sKGWenn8RcNMFo7pB92mrQE/jwKVl5vFwD5NgUCFC0583uX
-PgTY5e9pOTVpCwebt50S
------END DSA PRIVATE KEY-----
diff --git a/tests/vcore/test-cases/keys/ocsp_level0deprecated.crt b/tests/vcore/test-cases/keys/ocsp_level0deprecated.crt
deleted file mode 100644 (file)
index 67bfa31..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFVTCCBD2gAwIBAgIHBBrt1FojCzANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
-BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
-aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
-IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
-ODcwHhcNMTAwNjA5MDIwNzU3WhcNMTEwNjE5MTEwNDM2WjBRMRUwEwYDVQQKEwwq
-LnVidW50dS5jb20xITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEV
-MBMGA1UEAxMMKi51YnVudHUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAu8VcCeGdREV3PYYQukyrfUAay8Ic3fMhA+YUKzqbH8UuPhcjjS3izxaT
-vHLh7v80HS4DXYu6CqoQugZndV4R9KqJN1HVK5acar91VOeQgTSoowTSFtyg6aXJ
-JVdEETyftGHSpS4WjyQZ9FazTfC47c5lJr+3wCZ90UaxaWpNERpMc2L4ZxG1wGCw
-XYWVONtV817NecZVAiytvNPSmcnFm/OC/5GtzxNhfYmsNt1+MiC3IUFe2XnQwFhG
-rvn9IcG2RhEKOOu55pHM08FcnDbfyegBkEDAmQbFIUM+tFUI7nkDNQWy/Mgzuqtg
-DjydGu8h7BObEFrqXtUpm9CbTFZgzwIDAQABo4IBtjCCAbIwDwYDVR0TAQH/BAUw
-AwEBADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH/BAQD
-AgWgMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ29kYWRkeS5jb20vZ2Rz
-MS0xOS5jcmwwUwYDVR0gBEwwSjBIBgtghkgBhv1tAQcXATA5MDcGCCsGAQUFBwIB
-FitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMIGA
-BggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmdvZGFkZHku
-Y29tLzBKBggrBgEFBQcwAoY+aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
-bS9yZXBvc2l0b3J5L2dkX2ludGVybWVkaWF0ZS5jcnQwHwYDVR0jBBgwFoAU/axh
-MpNsRdbi7oVfmrrndplozOcwIwYDVR0RBBwwGoIMKi51YnVudHUuY29tggp1YnVu
-dHUuY29tMB0GA1UdDgQWBBTUVPFNlBiCNfPjhD8O8mDUv7MLUjANBgkqhkiG9w0B
-AQUFAAOCAQEAUjuOqqu+vS0StsxVXj44hvPye1MC/MkanIrdce5BgYMc5a+8UJba
-ay8h34vtsvfDsTifNY8ijDx79Hprh9V2LwfWWAiWK2SdrceIdGrxDvzmDHllO5YT
-ig2XhAA7ll4toSnrUfsZmi/bgb1V6VNoq36xvK+riDGnPhc7tNDZZb1fBKE+nA1p
-CZq80Liv1xri4Nj1YQ0kMQQnSHkUgEGg7bvtf+cNkIp3OXTNW8f7VFoaWVZNKW8c
-cxNljypjJM+h7xXCG/YRKws8eCi+xpO1Oc41tnSvbCbc0B6+xwFjRx5tfja309QI
-R2+uBFsmWtBCtn31o4CFNytEnwBOPVbZBA==
------END CERTIFICATE-----
diff --git a/tests/vcore/test-cases/keys/ocsp_level1.crt b/tests/vcore/test-cases/keys/ocsp_level1.crt
deleted file mode 100644 (file)
index b6276d4..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
-ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
-MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
-QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
-b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
-b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
-KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
-VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
-SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
-cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
-6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
-MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
-kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
-BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
-BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
-c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
-AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
-BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
-OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
-A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
-0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
-RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
-qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
-U+4=
------END CERTIFICATE-----
diff --git a/tests/vcore/test-cases/keys/ocsp_level2.crt b/tests/vcore/test-cases/keys/ocsp_level2.crt
deleted file mode 100644 (file)
index ec9fc33..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
-bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
-BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
-DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
-YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
-ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
-N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
-r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
-f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
-U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
-TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
-VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
-SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
-biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
-MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
-AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
-ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
-Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
-IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
-bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
-QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
-WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
-SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
------END CERTIFICATE-----
diff --git a/tests/vcore/test-cases/keys/ocsp_rootca.crt b/tests/vcore/test-cases/keys/ocsp_rootca.crt
deleted file mode 100644 (file)
index 8417dc7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----\r
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\r
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\r
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\r
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\r
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy\r
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\r
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\r
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\r
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\r
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY\r
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9\r
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS\r
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v\r
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu\r
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC\r
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd\r
------END CERTIFICATE-----\r
diff --git a/tests/vcore/test-cases/keys/operator.root.cert.pem b/tests/vcore/test-cases/keys/operator.root.cert.pem
deleted file mode 100644 (file)
index 343241f..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number:
-            85:7d:e1:c5:d9:de:7a:1f
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=PL, ST=Mazowieckie, O=Samsung, OU=SPRC, CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
-        Validity
-            Not Before: Jan  4 17:27:08 2011 GMT
-            Not After : Jan  3 17:27:08 2014 GMT
-        Subject: C=PL, ST=Mazowieckie, O=Samsung, OU=SPRC, CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c3:39:17:a8:f9:d0:69:37:9a:56:44:39:67:10:
-                    14:a9:4b:a2:0b:c7:fc:a1:e8:e8:f7:1c:06:f4:9c:
-                    83:f7:37:07:9d:9c:2c:1b:46:43:5f:f1:7b:91:a8:
-                    cd:c0:76:00:d5:9c:c9:28:f7:91:28:b6:97:ec:85:
-                    b1:10:0f:58:2e:f6:6f:98:b6:ab:7b:ca:08:10:7f:
-                    55:32:bf:32:db:a7:c2:86:83:03:ee:41:0a:24:de:
-                    17:e3:9d:8f:5b:fa:46:70:78:98:b4:c1:14:77:44:
-                    ab:59:7c:4c:d3:4a:f7:54:f2:30:0d:38:73:95:9f:
-                    21:0e:a9:86:3e:fc:82:4e:0b
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                25:A5:90:9F:4D:3A:A4:19:0A:80:46:5E:F3:FB:20:CE:56:30:33:DA
-            X509v3 Authority Key Identifier: 
-                keyid:25:A5:90:9F:4D:3A:A4:19:0A:80:46:5E:F3:FB:20:CE:56:30:33:DA
-                DirName:/C=PL/ST=Mazowieckie/O=Samsung/OU=SPRC/CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
-                serial:85:7D:E1:C5:D9:DE:7A:1F
-
-            X509v3 Basic Constraints: 
-                CA:TRUE
-    Signature Algorithm: sha1WithRSAEncryption
-        b9:d7:72:49:09:d8:6f:61:94:51:40:9d:c3:d3:23:53:97:b8:
-        12:ee:cb:dd:57:e6:1f:a2:76:38:5d:42:51:bd:a9:30:19:f7:
-        67:5b:a8:67:4a:9e:a1:f0:a9:22:14:94:77:32:27:79:37:9c:
-        0a:0f:52:80:14:62:00:94:45:85:3b:fd:ad:b4:c3:20:45:ba:
-        b7:91:1a:9e:38:51:0f:9b:d5:ce:74:c7:bd:4a:21:9a:2d:b5:
-        71:0b:42:d2:95:72:66:fe:eb:11:ad:62:44:6c:32:4e:b4:00:
-        37:d7:b8:d5:4b:f6:74:36:78:d6:ae:66:b3:ca:6e:42:ff:cb:
-        c2:e6
------BEGIN CERTIFICATE-----
-MIIDnzCCAwigAwIBAgIJAIV94cXZ3nofMA0GCSqGSIb3DQEBBQUAMIGSMQswCQYD
-VQQGEwJQTDEUMBIGA1UECBMLTWF6b3dpZWNraWUxEDAOBgNVBAoTB1NhbXN1bmcx
-DTALBgNVBAsTBFNQUkMxJzAlBgNVBAMTHk9wZXJhdG9yIFRlc3QgUm9vdCBDZXJ0
-aWZpY2F0ZTEjMCEGCSqGSIb3DQEJARYUb3BlcmF0b3JAc2Ftc3VuZy5jb20wHhcN
-MTEwMTA0MTcyNzA4WhcNMTQwMTAzMTcyNzA4WjCBkjELMAkGA1UEBhMCUEwxFDAS
-BgNVBAgTC01hem93aWVja2llMRAwDgYDVQQKEwdTYW1zdW5nMQ0wCwYDVQQLEwRT
-UFJDMScwJQYDVQQDEx5PcGVyYXRvciBUZXN0IFJvb3QgQ2VydGlmaWNhdGUxIzAh
-BgkqhkiG9w0BCQEWFG9wZXJhdG9yQHNhbXN1bmcuY29tMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDDOReo+dBpN5pWRDlnEBSpS6ILx/yh6Oj3HAb0nIP3Nwed
-nCwbRkNf8XuRqM3AdgDVnMko95EotpfshbEQD1gu9m+Ytqt7yggQf1UyvzLbp8KG
-gwPuQQok3hfjnY9b+kZweJi0wRR3RKtZfEzTSvdU8jANOHOVnyEOqYY+/IJOCwID
-AQABo4H6MIH3MB0GA1UdDgQWBBQlpZCfTTqkGQqARl7z+yDOVjAz2jCBxwYDVR0j
-BIG/MIG8gBQlpZCfTTqkGQqARl7z+yDOVjAz2qGBmKSBlTCBkjELMAkGA1UEBhMC
-UEwxFDASBgNVBAgTC01hem93aWVja2llMRAwDgYDVQQKEwdTYW1zdW5nMQ0wCwYD
-VQQLEwRTUFJDMScwJQYDVQQDEx5PcGVyYXRvciBUZXN0IFJvb3QgQ2VydGlmaWNh
-dGUxIzAhBgkqhkiG9w0BCQEWFG9wZXJhdG9yQHNhbXN1bmcuY29tggkAhX3hxdne
-eh8wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQC513JJCdhvYZRRQJ3D
-0yNTl7gS7svdV+YfonY4XUJRvakwGfdnW6hnSp6h8KkiFJR3Mid5N5wKD1KAFGIA
-lEWFO/2ttMMgRbq3kRqeOFEPm9XOdMe9SiGaLbVxC0LSlXJm/usRrWJEbDJOtAA3
-17jVS/Z0NnjWrmazym5C/8vC5g==
------END CERTIFICATE-----
diff --git a/tests/vcore/test-cases/keys/operator.second.cert.pem b/tests/vcore/test-cases/keys/operator.second.cert.pem
deleted file mode 100644 (file)
index f062d94..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number:
-            85:7d:e1:c5:d9:de:7a:20
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=PL, ST=Mazowieckie, O=Samsung, OU=SPRC, CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
-        Validity
-            Not Before: Jan  4 17:34:31 2011 GMT
-            Not After : Jan  4 17:34:31 2012 GMT
-        Subject: C=PL, ST=Malopolskie, L=Krakow, O=Samsung, OU=N/A, CN=Operator Test Second Level Certificate/emailAddress=second.operator@samsung.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ba:3c:58:ca:87:1e:59:68:54:8a:54:34:43:61:
-                    f1:81:e6:35:c1:46:74:16:c7:ff:f9:15:9e:0c:5a:
-                    6a:89:c1:13:0c:61:2e:ba:00:e0:71:ea:7e:31:ae:
-                    4e:ef:93:58:51:98:97:f3:bf:8a:9b:b2:c1:b7:0c:
-                    5f:3f:56:b3:13:3b:d0:80:be:04:66:89:84:50:ca:
-                    fe:f6:f7:6b:05:3b:30:4e:96:9c:5b:c5:80:bc:d6:
-                    be:6e:69:f4:b9:9b:4c:06:7a:ed:37:67:b2:fe:45:
-                    69:57:62:54:cb:69:69:48:b9:7d:a0:42:f1:b6:dc:
-                    f2:7f:eb:75:2a:d4:83:69:b9
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            Netscape Comment: 
-                OpenSSL Generated Certificate
-            X509v3 Subject Key Identifier: 
-                D9:F3:11:BF:98:5A:60:12:7A:85:B5:E7:A7:38:4F:CF:51:1D:C6:B2
-            X509v3 Authority Key Identifier: 
-                keyid:25:A5:90:9F:4D:3A:A4:19:0A:80:46:5E:F3:FB:20:CE:56:30:33:DA
-
-    Signature Algorithm: sha1WithRSAEncryption
-        69:6c:26:81:51:91:a6:e6:11:dc:81:35:03:73:85:4f:2f:29:
-        1f:20:f2:23:54:82:ca:8f:b8:a6:e3:3f:cd:72:5e:d7:e7:f5:
-        84:8a:33:e2:51:9f:36:4b:30:85:f4:4f:87:c7:9a:69:0b:15:
-        6e:92:c7:1f:2f:58:a4:57:f8:c2:cd:59:6c:d2:11:63:ae:bb:
-        b0:32:3f:09:e7:2e:ad:db:1b:fe:e7:a4:21:43:47:76:e1:de:
-        36:bb:26:3f:16:76:20:ed:a4:68:c1:48:ae:2b:95:fb:f6:d2:
-        f2:7f:74:f6:83:e2:89:06:b5:89:54:6e:7f:cf:88:94:66:e8:
-        da:32
------BEGIN CERTIFICATE-----
-MIIDPjCCAqegAwIBAgIJAIV94cXZ3nogMA0GCSqGSIb3DQEBBQUAMIGSMQswCQYD
-VQQGEwJQTDEUMBIGA1UECBMLTWF6b3dpZWNraWUxEDAOBgNVBAoTB1NhbXN1bmcx
-DTALBgNVBAsTBFNQUkMxJzAlBgNVBAMTHk9wZXJhdG9yIFRlc3QgUm9vdCBDZXJ0
-aWZpY2F0ZTEjMCEGCSqGSIb3DQEJARYUb3BlcmF0b3JAc2Ftc3VuZy5jb20wHhcN
-MTEwMTA0MTczNDMxWhcNMTIwMTA0MTczNDMxWjCBsTELMAkGA1UEBhMCUEwxFDAS
-BgNVBAgTC01hbG9wb2xza2llMQ8wDQYDVQQHEwZLcmFrb3cxEDAOBgNVBAoTB1Nh
-bXN1bmcxDDAKBgNVBAsTA04vQTEvMC0GA1UEAxMmT3BlcmF0b3IgVGVzdCBTZWNv
-bmQgTGV2ZWwgQ2VydGlmaWNhdGUxKjAoBgkqhkiG9w0BCQEWG3NlY29uZC5vcGVy
-YXRvckBzYW1zdW5nLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAujxY
-yoceWWhUilQ0Q2HxgeY1wUZ0Fsf/+RWeDFpqicETDGEuugDgcep+Ma5O75NYUZiX
-87+Km7LBtwxfP1azEzvQgL4EZomEUMr+9vdrBTswTpacW8WAvNa+bmn0uZtMBnrt
-N2ey/kVpV2JUy2lpSLl9oELxttzyf+t1KtSDabkCAwEAAaN7MHkwCQYDVR0TBAIw
-ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw
-HQYDVR0OBBYEFNnzEb+YWmASeoW156c4T89RHcayMB8GA1UdIwQYMBaAFCWlkJ9N
-OqQZCoBGXvP7IM5WMDPaMA0GCSqGSIb3DQEBBQUAA4GBAGlsJoFRkabmEdyBNQNz
-hU8vKR8g8iNUgsqPuKbjP81yXtfn9YSKM+JRnzZLMIX0T4fHmmkLFW6Sxx8vWKRX
-+MLNWWzSEWOuu7AyPwnnLq3bG/7npCFDR3bh3ja7Jj8WdiDtpGjBSK4rlfv20vJ/
-dPaD4okGtYlUbn/PiJRm6Noy
------END CERTIFICATE-----
diff --git a/tests/vcore/test-cases/keys/operator.second.key.pem b/tests/vcore/test-cases/keys/operator.second.key.pem
deleted file mode 100644 (file)
index ab1214a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,44C051D8935528BB
-
-iISuf9ELdyP5M0vlWOK4msH09HRAhN+43qRu/RDznpsTs2lX2sJITXXEmJC4EJzS
-Zk4jf3ScTj1JsMGlg5k0mZWLmDb4kUxTRVUqJX2W4uUYEmWav7LQHRAsPwNUSMs3
-DzZabSf1vplnKKoL9mMtX4E0mj79AkJp7tARQu4Zn2FDMg/UnCErzhGeoFysztmM
-v0Biyrf8yTbatMMr7Ea6rIsKS8KbkEeYDk4LpxBXkMeOutnnUUdhUEXZ/mwgJq2e
-+8LLPiWdFsrGxPdub7iuLXidXSpOd9VaC9LN/ORKF+EiJtF+twWSBotxYOtwmtgj
-xUHfXBcbaFoPnLKNS0nxwsOHF07LUfsCHzfVm1uGyWFkkLrPfcSjb6PahFlfO6w5
-fv8HnUOgeAjlhK6X+xhmw1tpwMUlmcYmq31eC8rwxP59jNQbhH6GVr5+rEMRHNgp
-loC1WqthoRtBEC0bi99VpIHVIepe9G+p40sIropoUWftfDSLl3RtONg5GyyZWQ4a
-ROxsiLHDZ7+q8eKkJuYPkiZ61/5MHuOsH5k57PG7ppG6/0p+ED4bTwxxDb6PU4pA
-08xUTZQ0CUn1x80o/lKw+1E9TJOTbCvrEJAnMksfOkNkNyedgDJaxfV63wYvnL4+
-BLzCqa6djpe0Mg2olQieV/piRUt7JaGA7bnaMAn+bJ56PzUnMl0/WlxzGTMtHjkf
-zUqgLLdxZpJP7zl4XleSfRWlPgL1iN1s84x48ej+MGgOGi7xTgX/sfCLkN4No/8k
-c5Po+lQU261XAYNuAjtjUFQP/FgIMM9CnJrDWp8xHZXUJBo0c5lOKg==
------END RSA PRIVATE KEY-----
diff --git a/tests/vcore/test-cases/keys/operator.second.p12 b/tests/vcore/test-cases/keys/operator.second.p12
deleted file mode 100644 (file)
index 2add1df..0000000
Binary files a/tests/vcore/test-cases/keys/operator.second.p12 and /dev/null differ
diff --git a/tests/vcore/test-cases/keys/root_cakey0.pem b/tests/vcore/test-cases/keys/root_cakey0.pem
deleted file mode 100644 (file)
index ff33c13..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,D2942E015452A445
-
-0M/tC+qVDqyhNsxZZB/dGLuNxsStSUA7TRDRiSBee9JsvcFZjq03D/VjBakNIeET
-6efmKfAngomfvrWtxhped3RI4vasX05swfnr4qiUKjLPyftmNEepbNGeI8MaiD7a
-fEOZuAacstyS5RMHRBXrktq+jtXW2meQTuvEMBJf1AeAIuaFNvr3OvvpCtDwRffi
-1ijUVuG0ZQ6MpP7cGeqLYUZ9StTMxeiEesAPM4YrG7HIY13KaHwMr1ZRtENe7qZ8
-R8vwgW188FYkSSrcQjCVEuj/ztTg9eVuSKdTNgjfKzTWnlrjAzi8CKBsrkYoarwS
-6Rv3TqVVnx4HHdo9RIUKZPeLOdcMD1OPK7aOUedPTAcht3Y7SQQphBQypLf6PLKB
-DCo79B4TUA1W9MijT2d2GN7oJHqHax8zO2j+yCLkEcHF32JZsEFE63Bwss72FXMg
-mTmpCwyzR+oN93687JDUBAP9zNVd76ZnpzwlMZirB6QTY/lrH+iXLH3R3PO6cl2R
-0Jei4IQ1oB+SX6GOPt4tKGTqktUFhsJYbXyifj4O1ZyDVYTp0JafOLxJfU33oYTm
-278yshFdyHRgfKIHvqctZ1xJN2ioVcWf+9DprHc5kGb6wUKRVfQpipTS2hgbMBz+
-UWRZWq+CUD5QkTz4cSQfhPWQF6TNWpTQc0dvAlo3Cmxrro1PriDItsCOeydeNWvn
-Dyynx7ODp/F1rX5ekaXkVxsdGgD/HuNF+c7tEytD7U4/CmevytuXRIrFM0alj2OE
-aBFTqKicBoKgDV9VUOTKwuFeNV7MSuVDUnngEBeYrinwGa7wuV7tzA==
------END RSA PRIVATE KEY-----
index c234082..a8bd11b 100644 (file)
@@ -23,7 +23,7 @@
 
 int main (int argc, char *argv[])
 {
-       DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
+       VcoreDPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
 
        return 0;
 }
index 4b7537b..b2afd8d 100644 (file)
@@ -1 +1,148 @@
-ADD_SUBDIRECTORY(src)
+# compiler warning flags
+ADD_DEFINITIONS("-Wall")
+ADD_DEFINITIONS("-Wextra")
+ADD_DEFINITIONS("-Werror")
+
+PKG_CHECK_MODULES(VCORE_DEPS
+    REQUIRED
+    libxml-2.0
+    libpcrecpp
+    openssl
+    xmlsec1
+    dlog
+    libsystemd-journal
+    )
+
+ADD_DEFINITIONS(${VCORE_DEPS_CFLAGS})
+ADD_DEFINITIONS(${VCORE_DEPS_CFLAGS_OTHER})
+
+SET(VCORE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+
+SET(VCORE_SOURCES
+    ${VCORE_DIR}/dpl/core/src/assert.cpp
+    ${VCORE_DIR}/dpl/core/src/exception.cpp
+    ${VCORE_DIR}/dpl/core/src/noncopyable.cpp
+    ${VCORE_DIR}/dpl/core/src/singleton.cpp
+    ${VCORE_DIR}/dpl/core/src/colors.cpp
+
+    ${VCORE_DIR}/dpl/log/src/abstract_log_provider.cpp
+    ${VCORE_DIR}/dpl/log/src/old_style_log_provider.cpp
+    ${VCORE_DIR}/dpl/log/src/dlog_log_provider.cpp
+    ${VCORE_DIR}/dpl/log/src/journal_log_provider.cpp
+    ${VCORE_DIR}/dpl/log/src/log.cpp
+
+    ${VCORE_DIR}/vcore/api.cpp
+    ${VCORE_DIR}/vcore/Base64.cpp
+    ${VCORE_DIR}/vcore/Certificate.cpp
+    ${VCORE_DIR}/vcore/CertificateCollection.cpp
+    ${VCORE_DIR}/vcore/CertificateConfigReader.cpp
+    ${VCORE_DIR}/vcore/CertificateLoader.cpp
+    ${VCORE_DIR}/vcore/CertStoreType.cpp
+    ${VCORE_DIR}/vcore/ReferenceValidator.cpp
+    ${VCORE_DIR}/vcore/SaxReader.cpp
+    ${VCORE_DIR}/vcore/SignatureData.cpp
+    ${VCORE_DIR}/vcore/SignatureFinder.cpp
+    ${VCORE_DIR}/vcore/SignatureReader.cpp
+    ${VCORE_DIR}/vcore/TimeConversion.cpp
+    ${VCORE_DIR}/vcore/ValidatorFactories.cpp
+    ${VCORE_DIR}/vcore/SignatureValidator.cpp
+    ${VCORE_DIR}/vcore/XmlsecAdapter.cpp
+    ${VCORE_DIR}/vcore/pkcs12.cpp
+    ${VCORE_DIR}/vcore/exception.cpp
+    ${VCORE_DIR}/vcore/utils.c
+    ${VCORE_DIR}/vcore/cert-svc-client.c
+    )
+
+SET(VCORE_INCLUDES
+    ${VCORE_DIR}/dpl/core/include
+    ${VCORE_DIR}/dpl/log/include
+    ${VCORE_DIR}
+    )
+
+########### VCORE SOURCES ########
+
+INCLUDE_DIRECTORIES(
+    SYSTEM
+    ${VCORE_DEPS_INCLUDE_DIRS}
+    ${PROJECT_SOURCE_DIR}/include
+    ${VCORE_INCLUDES}
+    )
+
+ADD_LIBRARY(${TARGET_VCORE_LIB} SHARED ${VCORE_SOURCES})
+
+# TODO: visibility needed to be hidden
+SET_TARGET_PROPERTIES(${TARGET_VCORE_LIB}
+    PROPERTIES
+        COMPILE_FLAGS "-D_GNU_SOURCE -fPIC -fvisibility=default"
+        SOVERSION ${SO_VERSION}
+        VERSION ${VERSION})
+
+TARGET_LINK_LIBRARIES(${TARGET_VCORE_LIB}
+    ${VCORE_DEPS_LIBRARIES}
+    ${TARGET_CERT_SVC_LIB}
+    )
+
+########## cert-server #############
+PKG_CHECK_MODULES(CERT_SERVER_DEP
+    REQUIRED
+    dlog
+    sqlite3
+    db-util
+    libsystemd-daemon
+    key-manager
+    )
+
+SET(CERT_SERVER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/server)
+
+SET(CERT_SERVER_SRC
+    ${CERT_SERVER_DIR}/src/cert-server-main.c
+    ${CERT_SERVER_DIR}/src/cert-server-logic.c
+    )
+
+INCLUDE_DIRECTORIES(
+    SYSTEM
+    ${CERT_SERVER_DEP_INCLUDE_DIRS}
+    ${PROJECT_SOURCE_DIR}/include
+    ${VCORE_DIR}
+    ${CERT_SERVER_DIR}/include
+    )
+
+SET_SOURCE_FILES_PROPERTIES(
+    ${CERT_SERVER_SRC}
+    PROPERTIES
+        COMPILE_FLAGS "-D_GNU_SOURCE -fvisibility=hidden -fPIE"
+    )
+
+ADD_EXECUTABLE(${TARGET_CERT_SERVER} ${CERT_SERVER_SRC})
+
+TARGET_LINK_LIBRARIES(${TARGET_CERT_SERVER}
+    ${CERT_SERVER_DEP_LIBRARIES}
+    -pie
+    )
+
+INSTALL(TARGETS ${TARGET_CERT_SERVER} DESTINATION ${TZ_SYS_BIN})
+
+########################################################
+INSTALL(TARGETS ${TARGET_VCORE_LIB}
+    DESTINATION ${LIBDIR}
+    )
+
+INSTALL(FILES
+    ${VCORE_DIR}/vcore/SignatureValidator.h
+    ${VCORE_DIR}/vcore/SignatureFinder.h
+    ${VCORE_DIR}/vcore/Certificate.h
+    ${VCORE_DIR}/vcore/SignatureData.h
+    ${VCORE_DIR}/vcore/CertStoreType.h
+    ${VCORE_DIR}/vcore/exception.h
+    DESTINATION ${INCLUDEDIR}/cert-svc/vcore
+    )
+
+INSTALL(FILES
+    ${VCORE_DIR}/cert-svc/ccert.h
+    ${VCORE_DIR}/cert-svc/cinstance.h
+    ${VCORE_DIR}/cert-svc/cerror.h
+    ${VCORE_DIR}/cert-svc/cpkcs12.h
+    ${VCORE_DIR}/cert-svc/cprimitives.h
+    ${VCORE_DIR}/cert-svc/cstring.h
+    DESTINATION ${INCLUDEDIR}/cert-svc/cert-svc
+    )
similarity index 99%
rename from vcore/src/cert-svc/ccert.h
rename to vcore/cert-svc/ccert.h
index 0715651..1ccfee1 100644 (file)
@@ -53,7 +53,7 @@ typedef enum certImportType_t {
 
 typedef enum certStatus_t {
     DISABLED     =  0,
-    ENABLED      =  1,
+    ENABLED      =  1
 } CertStatus;
 
 typedef struct CertSvcStoreCertList_t{
@@ -62,7 +62,7 @@ typedef struct CertSvcStoreCertList_t{
     CertStatus status;
     CertStoreType storeType;
     struct CertSvcStoreCertList_t *next;
-}CertSvcStoreCertList;
+} CertSvcStoreCertList;
 
 typedef enum certType_t {
     PEM_CRT          = 1 << 0,
@@ -70,7 +70,7 @@ typedef enum certType_t {
     P12_INTERMEDIATE = 1 << 2,
     P12_TRUSTED      = 1 << 3,
     P12_PKEY         = 1 << 4,
-    INVALID_DATA     = 1 << 5,
+    INVALID_DATA     = 1 << 5
 } CertType;
 
 typedef enum CertSvcCertificateForm_t {
diff --git a/vcore/dpl/core/include/dpl/assert.h b/vcore/dpl/core/include/dpl/assert.h
new file mode 100644 (file)
index 0000000..b2cb426
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        assert.h
+ * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
+ * @version     1.0
+ * @brief       This file is the implementation file of assert
+ */
+#ifndef DPL_ASSERT_H
+#define DPL_ASSERT_H
+
+namespace VcoreDPL {
+// Assertion handler procedure
+// Do not call directly
+// Always use Assert macro
+void AssertProc(const char *condition,
+                const char *file,
+                int line,
+                const char *function) __attribute__ ((__noreturn__));
+} // namespace VcoreDPL
+
+#define Assert(Condition)                                               \
+do {                                                                    \
+    if (!(Condition)) {                                                 \
+        VcoreDPL::AssertProc(#Condition, __FILE__, __LINE__, __FUNCTION__);  \
+    }                                                                   \
+} while (0)
+
+#define AssertMsg(Condition, Msg)                                         \
+    do {                                                                  \
+        if (!(Condition)) {                                               \
+            VcoreDPL::AssertProc(                                              \
+                (std::string(std::string(#Condition)+" ") + Msg).c_str(), \
+                __FILE__, __LINE__, __FUNCTION__);                        \
+        }                                                                 \
+    } while (0)
+
+#endif // DPL_ASSERT_H
diff --git a/vcore/dpl/core/include/dpl/colors.h b/vcore/dpl/core/include/dpl/colors.h
new file mode 100644 (file)
index 0000000..4c22139
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        colors.h
+ * @author      Lukasz Wrzosek (l.wrzosek@samsung.com)
+ * @version     1.0
+ * @brief       Some constants with definition of colors for Console
+ *              and html output
+ */
+
+#ifndef DPL_COLORS_H
+#define DPL_COLORS_H
+
+namespace VcoreDPL {
+namespace Colors {
+namespace Text {
+extern const char* BOLD_GREEN_BEGIN;
+extern const char* BOLD_GREEN_END;
+extern const char* PURPLE_BEGIN;
+extern const char* PURPLE_END;
+extern const char* RED_BEGIN;
+extern const char* RED_END;
+extern const char* GREEN_BEGIN;
+extern const char* GREEN_END;
+extern const char* CYAN_BEGIN;
+extern const char* CYAN_END;
+extern const char* BOLD_RED_BEGIN;
+extern const char* BOLD_RED_END;
+extern const char* BOLD_YELLOW_BEGIN;
+extern const char* BOLD_YELLOW_END;
+extern const char* BOLD_GOLD_BEGIN;
+extern const char* BOLD_GOLD_END;
+extern const char* BOLD_WHITE_BEGIN;
+extern const char* BOLD_WHITE_END;
+} //namespace Text
+
+namespace Html {
+extern const char* BOLD_GREEN_BEGIN;
+extern const char* BOLD_GREEN_END;
+extern const char* PURPLE_BEGIN;
+extern const char* PURPLE_END;
+extern const char* RED_BEGIN;
+extern const char* RED_END;
+extern const char* GREEN_BEGIN;
+extern const char* GREEN_END;
+extern const char* CYAN_BEGIN;
+extern const char* CYAN_END;
+extern const char* BOLD_RED_BEGIN;
+extern const char* BOLD_RED_END;
+extern const char* BOLD_YELLOW_BEGIN;
+extern const char* BOLD_YELLOW_END;
+extern const char* BOLD_GOLD_BEGIN;
+extern const char* BOLD_GOLD_END;
+extern const char* BOLD_WHITE_BEGIN;
+extern const char* BOLD_WHITE_END;
+} //namespace Html
+} //namespace Colors
+} //namespace VcoreDPL
+
+#endif /* DPL_COLORS_H */
diff --git a/vcore/dpl/core/include/dpl/exception.h b/vcore/dpl/core/include/dpl/exception.h
new file mode 100644 (file)
index 0000000..95ea4ac
--- /dev/null
@@ -0,0 +1,390 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file    exception.h
+ * @author  Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
+ * @version 1.0
+ * @brief   Header file for base exception
+ */
+#ifndef VcoreDPL_EXCEPTION_H
+#define VcoreDPL_EXCEPTION_H
+
+#include <string>
+#include <cstring>
+#include <cstdio>
+#include <exception>
+#include <cstdlib>
+#include <sstream>
+
+namespace VcoreDPL {
+void LogUnhandledException(const std::string &str);
+void LogUnhandledException(const std::string &str,
+                           const char *filename,
+                           int line,
+                           const char *function);
+}
+
+namespace VcoreDPL {
+class Exception {
+private:
+    static unsigned int m_exceptionCount;
+    static Exception* m_lastException;
+    static void (*m_terminateHandler)();
+
+    static void AddRef(Exception* exception)
+    {
+        if (!m_exceptionCount) {
+            m_terminateHandler = std::set_terminate(&TerminateHandler);
+        }
+
+        ++m_exceptionCount;
+        m_lastException = exception;
+    }
+
+    static void UnRef(Exception* e)
+    {
+        if (m_lastException == e) {
+            m_lastException = NULL;
+        }
+
+        --m_exceptionCount;
+
+        if (!m_exceptionCount) {
+            std::set_terminate(m_terminateHandler);
+            m_terminateHandler = NULL;
+        }
+    }
+
+    static void TerminateHandler()
+    {
+        if (m_lastException != NULL) {
+            DisplayKnownException(*m_lastException);
+            abort();
+        } else {
+            DisplayUnknownException();
+            abort();
+        }
+    }
+
+    Exception *m_reason;
+    std::string m_path;
+    std::string m_function;
+    int m_line;
+
+protected:
+    std::string m_message;
+    std::string m_className;
+
+public:
+    static std::string KnownExceptionToString(const Exception &e)
+    {
+        std::ostringstream message;
+        message <<
+        "\033[1;5;31m\n=== Unhandled DPL exception occurred ===\033[m\n\n";
+        message << "\033[1;33mException trace:\033[m\n\n";
+        message << e.DumpToString();
+        message << "\033[1;31m\n=== Will now abort ===\033[m\n";
+
+        return message.str();
+    }
+
+    static std::string UnknownExceptionToString()
+    {
+        std::ostringstream message;
+        message <<
+        "\033[1;5;31m\n=== Unhandled non-DPL exception occurred ===\033[m\n\n";
+        message << "\033[1;31m\n=== Will now abort ===\033[m\n";
+
+        return message.str();
+    }
+
+    static void DisplayKnownException(const Exception& e)
+    {
+        LogUnhandledException(KnownExceptionToString(e).c_str());
+    }
+
+    static void DisplayUnknownException()
+    {
+        LogUnhandledException(UnknownExceptionToString().c_str());
+    }
+
+    Exception(const Exception &other)
+    {
+        // Deep copy
+        if (other.m_reason != NULL) {
+            m_reason = new Exception(*other.m_reason);
+        } else {
+            m_reason = NULL;
+        }
+
+        m_message = other.m_message;
+        m_path = other.m_path;
+        m_function = other.m_function;
+        m_line = other.m_line;
+
+        m_className = other.m_className;
+
+        AddRef(this);
+    }
+
+    const Exception &operator =(const Exception &other)
+    {
+        if (this == &other) {
+            return *this;
+        }
+
+        // Deep copy
+        if (other.m_reason != NULL) {
+            m_reason = new Exception(*other.m_reason);
+        } else {
+            m_reason = NULL;
+        }
+
+        m_message = other.m_message;
+        m_path = other.m_path;
+        m_function = other.m_function;
+        m_line = other.m_line;
+
+        m_className = other.m_className;
+
+        AddRef(this);
+
+        return *this;
+    }
+
+    Exception(const char *path,
+              const char *function,
+              int line,
+              const std::string &message) :
+        m_reason(NULL),
+        m_path(path),
+        m_function(function),
+        m_line(line),
+        m_message(message)
+    {
+        AddRef(this);
+    }
+
+    Exception(const char *path,
+              const char *function,
+              int line,
+              const Exception &reason,
+              const std::string &message) :
+        m_reason(new Exception(reason)),
+        m_path(path),
+        m_function(function),
+        m_line(line),
+        m_message(message)
+    {
+        AddRef(this);
+    }
+
+    virtual ~Exception() throw()
+    {
+        if (m_reason != NULL) {
+            delete m_reason;
+            m_reason = NULL;
+        }
+
+        UnRef(this);
+    }
+
+    void Dump() const
+    {
+        // Show reason first
+        if (m_reason != NULL) {
+            m_reason->Dump();
+        }
+
+        // Afterward, dump exception
+        const char *file = strchr(m_path.c_str(), '/');
+
+        if (file == NULL) {
+            file = m_path.c_str();
+        } else {
+            ++file;
+        }
+
+        printf("\033[0;36m[%s:%i]\033[m %s() \033[4;35m%s\033[m: %s\033[m\n",
+               file, m_line,
+               m_function.c_str(),
+               m_className.c_str(),
+               m_message.empty() ? "<EMPTY>" : m_message.c_str());
+    }
+
+    std::string DumpToString() const
+    {
+        std::string ret;
+        if (m_reason != NULL) {
+            ret = m_reason->DumpToString();
+        }
+
+        const char *file = strchr(m_path.c_str(), '/');
+
+        if (file == NULL) {
+            file = m_path.c_str();
+        } else {
+            ++file;
+        }
+
+        char buf[1024];
+        snprintf(buf,
+                 sizeof(buf),
+                 "\033[0;36m[%s:%i]\033[m %s() \033[4;35m%s\033[m: %s\033[m\n",
+                 file,
+                 m_line,
+                 m_function.c_str(),
+                 m_className.c_str(),
+                 m_message.empty() ? "<EMPTY>" : m_message.c_str());
+
+        buf[sizeof(buf) - 1] = '\n';
+        ret += buf;
+
+        return ret;
+    }
+
+    Exception *GetReason() const
+    {
+        return m_reason;
+    }
+
+    std::string GetPath() const
+    {
+        return m_path;
+    }
+
+    std::string GetFunction() const
+    {
+        return m_function;
+    }
+
+    int GetLine() const
+    {
+        return m_line;
+    }
+
+    std::string GetMessage() const
+    {
+        return m_message;
+    }
+
+    std::string GetClassName() const
+    {
+        return m_className;
+    }
+};
+} // namespace VcoreDPL
+
+#define Try try
+
+#define Throw(ClassName) \
+    throw ClassName(__FILE__, __FUNCTION__, __LINE__)
+
+#define ThrowMsg(ClassName, Message)                                                 \
+    do                                                                               \
+    {                                                                                \
+        std::ostringstream dplLoggingStream;                                         \
+        dplLoggingStream << Message;                                                 \
+        throw ClassName(__FILE__, __FUNCTION__, __LINE__, dplLoggingStream.str());   \
+    } while (0)
+
+#define ReThrow(ClassName) \
+    throw ClassName(__FILE__, __FUNCTION__, __LINE__, _rethrown_exception)
+
+#define ReThrowMsg(ClassName, Message)                                               \
+    throw ClassName(__FILE__,                                                        \
+                    __FUNCTION__,                                                    \
+                    __LINE__,                                                        \
+                    _rethrown_exception,                                             \
+                    Message)
+
+#define Catch(ClassName)                                                             \
+    catch (const ClassName &_rethrown_exception)
+
+#define DECLARE_EXCEPTION_TYPE(BaseClass, Class)                                     \
+    class Class : public BaseClass {                                                 \
+    public:                                                                          \
+        Class(const char *path,                                                      \
+              const char *function,                                                  \
+              int line,                                                              \
+              const std::string & message = std::string())                           \
+          : BaseClass(path, function, line, message) {                               \
+                                                                                     \
+            BaseClass::m_className = #Class;                                         \
+        }                                                                            \
+                                                                                     \
+        Class(const char *path,                                                      \
+              const char *function,                                                  \
+              int line,                                                              \
+              const VcoreDPL::Exception & reason,                                    \
+              const std::string & message = std::string())                           \
+          : BaseClass(path, function, line, reason, message) {                       \
+            BaseClass::m_className = #Class;                                         \
+        }                                                                            \
+    };
+
+#define UNHANDLED_EXCEPTION_HANDLER_BEGIN try
+
+#define UNHANDLED_EXCEPTION_HANDLER_END                                              \
+    catch (const VcoreDPL::Exception &exception)                                     \
+    {                                                                                \
+        std::ostringstream msg;                                                      \
+        msg << VcoreDPL::Exception::KnownExceptionToString(exception);               \
+        VcoreDPL::LogUnhandledException(msg.str(),                                   \
+                                        __FILE__,                                    \
+                                        __LINE__,                                    \
+                                       __FUNCTION__);                                \
+        abort();                                                                     \
+    }                                                                                \
+    catch (std::exception& e)                                                        \
+    {                                                                                \
+        std::ostringstream msg;                                                      \
+        msg << e.what();                                                             \
+        msg << "\n";                                                                 \
+        msg << VcoreDPL::Exception::UnknownExceptionToString();                      \
+        VcoreDPL::LogUnhandledException(msg.str(),                                   \
+                                        __FILE__,                                    \
+                                        __LINE__,                                    \
+                                        __FUNCTION__);                               \
+        abort();                                                                     \
+    }                                                                                \
+    catch (...)                                                                      \
+    {                                                                                \
+        std::ostringstream msg;                                                      \
+        msg << VcoreDPL::Exception::UnknownExceptionToString();                      \
+        VcoreDPL::LogUnhandledException(msg.str(),                                   \
+                                        __FILE__,                                    \
+                                        __LINE__,                                    \
+                                        __FUNCTION__);                               \
+        abort();                                                                     \
+    }
+
+namespace VcoreDPL {
+namespace CommonException {
+/**
+ * Internal exception definitions
+ *
+ * These should normally not happen.
+ * Usually, exception trace with internal error includes
+ * important messages.
+ */
+DECLARE_EXCEPTION_TYPE(Exception, InternalError) ///< Unexpected error from
+                                                // underlying libraries or
+                                                // kernel
+}
+}
+
+#endif // VcoreDPL_EXCEPTION_H
diff --git a/vcore/dpl/core/include/dpl/noncopyable.h b/vcore/dpl/core/include/dpl/noncopyable.h
new file mode 100644 (file)
index 0000000..89372d0
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        noncopyable
+ * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
+ * @version     1.0
+ * @brief       This file is the implementation file of noncopyable
+ */
+#ifndef DPL_NONCOPYABLE_H
+#define DPL_NONCOPYABLE_H
+
+namespace VcoreDPL {
+class Noncopyable
+{
+  private:
+    Noncopyable(const Noncopyable &);
+    const Noncopyable &operator=(const Noncopyable &);
+
+  public:
+    Noncopyable();
+    virtual ~Noncopyable();
+};
+} // namespace VcoreDPL
+
+#endif // DPL_NONCOPYABLE_H
  *    limitations under the License.
  */
 /*
- * @file        abstract_waitable_input.h
+ * @file        singleton.h
  * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
  * @version     1.0
- * @brief       This file is the header file of abstract waitable input
+ * @brief       This file is the implementation file of singleton
  */
-#ifndef DPL_ABSTRACT_WAITABLE_INPUT_H
-#define DPL_ABSTRACT_WAITABLE_INPUT_H
-
-#include <dpl/waitable_handle.h>
-#include <dpl/abstract_input.h>
+#ifndef DPL_SINGLETON_H
+#define DPL_SINGLETON_H
 
 namespace VcoreDPL {
-class AbstractWaitableInput :
-    public AbstractInput
+template<typename Class>
+class Singleton :
+    private Class
 {
+    //
+    // Note:
+    //
+    // To remove posibility of instantiating directly Class,
+    // make Class' default constructor protected
+    //
+
+  private:
+    Singleton()
+    {}
+
+    static Singleton &InternalInstance();
+
   public:
-    virtual ~AbstractWaitableInput() {}
+    virtual ~Singleton()
+    {}
 
-    virtual WaitableHandle WaitableReadHandle() const = 0;
+    static Class &Instance();
 };
 } // namespace VcoreDPL
 
-#endif // DPL_ABSTRACT_WAITABLE_INPUT_H
+#endif // DPL_SINGLETON_H
diff --git a/vcore/dpl/core/include/dpl/singleton_impl.h b/vcore/dpl/core/include/dpl/singleton_impl.h
new file mode 100644 (file)
index 0000000..f8f9fd9
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        singleton_impl.h
+ * @author      Lukasz Wrzosek (l.wrzosek@samsung.com)
+ * @version     1.0
+ * @brief       This file is the implementation file of singleton
+ */
+#ifndef DPL_SINGLETON_IMPL_H
+#define DPL_SINGLETON_IMPL_H
+
+#include <dpl/singleton.h>
+
+/*
+ * WARNING!
+ *
+ * If some singleton's implementation uses another singletons implementation,
+ * those templates make the second singleton a dubleton. Be warned. Try to use
+ * singleton_safe_impl.h if possible.
+ */
+
+namespace VcoreDPL {
+template<typename Class>
+Singleton<Class>& Singleton<Class>::InternalInstance()
+{
+    static Singleton<Class> instance;
+    return instance;
+}
+
+template<typename Class>
+Class &Singleton<Class>::Instance()
+{
+    Singleton<Class>& instance = Singleton<Class>::InternalInstance();
+    return instance;
+}
+} // namespace VcoreDPL
+
+#define IMPLEMENT_SINGLETON(Type)                                                     \
+    template VcoreDPL::Singleton<Type>&VcoreDPL::Singleton<Type>::InternalInstance(); \
+    template Type & VcoreDPL::Singleton<Type>::Instance();                            \
+
+#endif // DPL_SINGLETON_IMPL_H
similarity index 98%
rename from vcore/src/dpl/core/src/assert.cpp
rename to vcore/dpl/core/src/assert.cpp
index 22761a4..a90b4a3 100644 (file)
@@ -23,7 +23,6 @@
 #include <sstream>
 #include <stddef.h>
 #include <dpl/assert.h>
-#include <dpl/colors.h>
 #include <dpl/exception.h>
 #include <dpl/log/log.h>
 
diff --git a/vcore/dpl/core/src/colors.cpp b/vcore/dpl/core/src/colors.cpp
new file mode 100644 (file)
index 0000000..e918453
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        colors.cpp
+ * @author      Lukasz Wrzosek (l.wrzosek@samsung.com)
+ * @version     1.0
+ * @brief       Some constants with definition of colors for Console
+ *              and html output
+ */
+#include <stddef.h>
+#include <dpl/colors.h>
+
+namespace VcoreDPL {
+namespace Colors {
+namespace Text {
+const char* BOLD_GREEN_BEGIN = "\033[1;32m";
+const char* BOLD_GREEN_END = "\033[m";
+const char* RED_BEGIN = "\033[0;31m";
+const char* RED_END = "\033[m";
+const char* PURPLE_BEGIN = "\033[0;35m";
+const char* PURPLE_END = "\033[m";
+const char* GREEN_BEGIN = "\033[0;32m";
+const char* GREEN_END = "\033[m";
+const char* CYAN_BEGIN = "\033[0;36m";
+const char* CYAN_END = "\033[m";
+const char* BOLD_RED_BEGIN = "\033[1;31m";
+const char* BOLD_RED_END = "\033[m";
+const char* BOLD_YELLOW_BEGIN = "\033[1;33m";
+const char* BOLD_YELLOW_END = "\033[m";
+const char* BOLD_GOLD_BEGIN = "\033[0;33m";
+const char* BOLD_GOLD_END = "\033[m";
+const char* BOLD_WHITE_BEGIN = "\033[1;37m";
+const char* BOLD_WHITE_END = "\033[m";
+} //namespace Text
+
+namespace Html {
+const char* BOLD_GREEN_BEGIN = "<font color=\"green\"><b>";
+const char* BOLD_GREEN_END = "</b></font>";
+const char* PURPLE_BEGIN = "<font color=\"purple\"><b>";
+const char* PURPLE_END = "</b></font>";
+const char* RED_BEGIN = "<font color=\"red\"><b>";
+const char* RED_END = "</b></font>";
+const char* GREEN_BEGIN = "<font color=\"green\">";
+const char* GREEN_END = "</font>";
+const char* CYAN_BEGIN = "<font color=\"cyan\">";
+const char* CYAN_END = "</font>";
+const char* BOLD_RED_BEGIN = "<font color=\"red\"><b>";
+const char* BOLD_RED_END = "</b></font>";
+const char* BOLD_YELLOW_BEGIN = "<font color=\"yellow\"><b>";
+const char* BOLD_YELLOW_END = "</b></font>";
+const char* BOLD_GOLD_BEGIN = "<font color=\"gold\"><b>";
+const char* BOLD_GOLD_END = "</b></font>";
+const char* BOLD_WHITE_BEGIN = "<font color=\"white\"><b>";
+const char* BOLD_WHITE_END = "</b></font>";
+} //namespace Html
+} //namespace Colors
+} //namespace VcoreDPL
diff --git a/vcore/dpl/core/src/noncopyable.cpp b/vcore/dpl/core/src/noncopyable.cpp
new file mode 100644 (file)
index 0000000..74fc9af
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        noncopyable.cpp
+ * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
+ * @version     1.0
+ * @brief       This file is the implementation file of noncopyable
+ */
+#include <stddef.h>
+#include <dpl/noncopyable.h>
+
+namespace VcoreDPL {
+Noncopyable::Noncopyable()
+{}
+
+Noncopyable::~Noncopyable()
+{}
+} // namespace VcoreDPL
similarity index 81%
rename from vcore/src/dpl/core/src/type_list.cpp
rename to vcore/dpl/core/src/singleton.cpp
index fa94806..54abd52 100644 (file)
  *    limitations under the License.
  */
 /*
- * @file        type_list.cpp
- * @author      Bartosz Janiak (b.janiak@samsung.com)
+ * @file        singleton.cpp
+ * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
  * @version     1.0
- * @brief       Generic type list template
+ * @brief       This file is the implementation file of singleton
  */
 #include <stddef.h>
-#include <dpl/type_list.h>
+#include <dpl/singleton.h>
 
 //
 // Note:
similarity index 99%
rename from vcore/src/server/src/cert-server-logic.c
rename to vcore/server/src/cert-server-logic.c
index 122d25f..a048acf 100644 (file)
@@ -37,7 +37,7 @@
 #include <cert-service-debug.h>
 #include <cert-svc/cerror.h>
 #include <cert-svc/ccert.h>
-#include <cert-svc-client.h>
+#include <vcore/cert-svc-client.h>
 
 #include <cert-server-logic.h>
 
similarity index 99%
rename from vcore/src/server/src/cert-server-main.c
rename to vcore/server/src/cert-server-main.c
index 0311dfb..1a1109e 100644 (file)
@@ -35,7 +35,7 @@
 #include <cert-service-debug.h>
 #include <cert-svc/cerror.h>
 #include <cert-svc/ccert.h>
-#include <cert-svc-client.h>
+#include <vcore/cert-svc-client.h>
 
 #include <cert-server-logic.h>
 
diff --git a/vcore/src/CMakeLists.txt b/vcore/src/CMakeLists.txt
deleted file mode 100644 (file)
index da69300..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-# compiler warning flags
-ADD_DEFINITIONS("-Wall")
-ADD_DEFINITIONS("-Wextra")
-ADD_DEFINITIONS("-Werror")
-
-PKG_CHECK_MODULES(VCORE_DEPS
-    REQUIRED
-    libxml-2.0
-    libpcrecpp
-    openssl
-    xmlsec1
-    dlog
-    libsystemd-journal
-    )
-
-ADD_DEFINITIONS(${VCORE_DEPS_CFLAGS})
-ADD_DEFINITIONS(${VCORE_DEPS_CFLAGS_OTHER})
-
-SET(VCORE_DIR
-    ${PROJECT_SOURCE_DIR}/vcore
-    )
-
-SET(VCORE_SRC_DIR
-    ${VCORE_DIR}/src/vcore
-    )
-
-########### DPL SOURCES ##########
-SET(VCORE_DPL_DIR
-    ${VCORE_DIR}/src/dpl
-    )
-SET(VCORE_DPL_CORE_SRC_DIR
-    ${VCORE_DPL_DIR}/core/src
-    )
-SET(VCORE_DPL_CORE_SOURCES
-    ${VCORE_DPL_CORE_SRC_DIR}/assert.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/binary_queue.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/char_traits.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/colors.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/errno_string.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/exception.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/file_input.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/noncopyable.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/singleton.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/string.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/type_list.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/thread.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/waitable_event.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/waitable_handle.cpp
-    ${VCORE_DPL_CORE_SRC_DIR}/waitable_handle_watch_support.cpp
-    )
-
-SET(VCORE_DPL_LOG_SRC_DIR
-    ${VCORE_DPL_DIR}/log/src
-    )
-SET(VCORE_DPL_LOG_SOURCES
-    ${VCORE_DPL_LOG_SRC_DIR}/abstract_log_provider.cpp
-    ${VCORE_DPL_LOG_SRC_DIR}/old_style_log_provider.cpp
-    ${VCORE_DPL_LOG_SRC_DIR}/dlog_log_provider.cpp
-    ${VCORE_DPL_LOG_SRC_DIR}/journal_log_provider.cpp
-    ${VCORE_DPL_LOG_SRC_DIR}/log.cpp
-    )
-########### DPL SOURCES ##########
-
-
-########### VCORE SOURCES ########
-SET(VCORE_SOURCES
-    ${VCORE_SRC_DIR}/api.cpp
-    ${VCORE_SRC_DIR}/Base64.cpp
-    ${VCORE_SRC_DIR}/Certificate.cpp
-    ${VCORE_SRC_DIR}/CertificateCollection.cpp
-    ${VCORE_SRC_DIR}/CertificateConfigReader.cpp
-    ${VCORE_SRC_DIR}/CertificateLoader.cpp
-    ${VCORE_SRC_DIR}/CertStoreType.cpp
-    ${VCORE_SRC_DIR}/ReferenceValidator.cpp
-    ${VCORE_SRC_DIR}/RevocationCheckerBase.cpp
-    ${VCORE_SRC_DIR}/SaxReader.cpp
-    ${VCORE_SRC_DIR}/SignatureData.cpp
-    ${VCORE_SRC_DIR}/SignatureFinder.cpp
-    ${VCORE_SRC_DIR}/SignatureReader.cpp
-    ${VCORE_SRC_DIR}/TimeConversion.cpp
-    ${VCORE_SRC_DIR}/VerificationStatus.cpp
-    ${VCORE_SRC_DIR}/ValidatorFactories.cpp
-    ${VCORE_SRC_DIR}/SignatureValidator.cpp
-    ${VCORE_SRC_DIR}/XmlsecAdapter.cpp
-    ${VCORE_SRC_DIR}/pkcs12.cpp
-    ${VCORE_SRC_DIR}/exception.cpp
-
-    ${VCORE_SRC_DIR}/utils.c
-    ${VCORE_SRC_DIR}/cert-svc-client.c
-    )
-
-SET(VCORE_INCLUDES
-    ${VCORE_DEPS_INCLUDE_DIRS}
-    ${VCORE_SRC_DIR}
-    ${VCORE_DIR}/src
-    ${VCORE_DIR}/src/legacy
-    )
-
-########### VCORE SOURCES ########
-
-SET(VCORE_ALL_SOURCES
-    ${VCORE_SOURCES}
-    ${VCORE_DPL_CORE_SOURCES}
-    ${VCORE_DPL_LOG_SOURCES}
-    )
-SET(VCORE_ALL_INCLUDES
-    ${PROJECT_SOURCE_DIR}/include
-    ${VCORE_INCLUDES}
-    ${VCORE_DPL_DIR}/core/include
-    ${VCORE_DPL_DIR}/log/include
-    )
-
-INCLUDE_DIRECTORIES(SYSTEM ${VCORE_ALL_INCLUDES})
-
-ADD_LIBRARY(${TARGET_VCORE_LIB} SHARED ${VCORE_ALL_SOURCES})
-
-# TODO: visibility needed to be hidden
-SET_TARGET_PROPERTIES(${TARGET_VCORE_LIB}
-    PROPERTIES
-        COMPILE_FLAGS "-D_GNU_SOURCE -fPIC -fvisibility=default"
-        SOVERSION ${SO_VERSION}
-        VERSION ${VERSION})
-
-TARGET_LINK_LIBRARIES(${TARGET_VCORE_LIB}
-    ${VCORE_DEPS_LIBRARIES}
-    ${TARGET_CERT_SVC_LIB}
-    )
-
-########## cert-server #############
-PKG_CHECK_MODULES(CERT_SERVER_DEP
-    REQUIRED
-    dlog
-    sqlite3
-    db-util
-    libsystemd-daemon
-    key-manager
-    )
-
-SET(CERT_SERVER_DIR
-    ${PROJECT_SOURCE_DIR}/vcore/src/server
-    )
-
-SET(CERT_SERVER_SRCS
-    ${CERT_SERVER_DIR}/src/cert-server-main.c
-    ${CERT_SERVER_DIR}/src/cert-server-logic.c
-    )
-
-INCLUDE_DIRECTORIES(
-    SYSTEM
-    ${CERT_SERVER_DEP_INCLUDE_DIRS}
-    ${PROJECT_SOURCE_DIR}/include
-    ${VCORE_DIR}/src
-    ${CERT_SERVER_DIR}/include
-    )
-
-SET_SOURCE_FILES_PROPERTIES(
-    ${CERT_SERVER_SRCS}
-    PROPERTIES
-        COMPILE_FLAGS "-D_GNU_SOURCE -fvisibility=hidden -fPIE"
-    )
-
-ADD_EXECUTABLE(${TARGET_CERT_SERVER} ${CERT_SERVER_SRCS})
-
-TARGET_LINK_LIBRARIES(${TARGET_CERT_SERVER}
-    ${CERT_SERVER_DEP_LIBRARIES}
-    -pie
-    )
-
-INSTALL(TARGETS ${TARGET_CERT_SERVER} DESTINATION ${BINDIR})
-
-########################################################
-INSTALL(TARGETS ${TARGET_VCORE_LIB}
-    DESTINATION ${LIBDIR}
-    )
-
-INSTALL(FILES
-    ${VCORE_SRC_DIR}/SignatureValidator.h
-    ${VCORE_SRC_DIR}/SignatureFinder.h
-
-    ${VCORE_SRC_DIR}/Certificate.h
-    ${VCORE_SRC_DIR}/SignatureData.h
-    ${VCORE_SRC_DIR}/CertStoreType.h
-    ${VCORE_SRC_DIR}/exception.h
-    DESTINATION ${INCLUDEDIR}/cert-svc/vcore
-    )
-
-INSTALL(FILES
-    ${VCORE_DIR}/src/cert-svc/ccert.h
-    ${VCORE_DIR}/src/cert-svc/cinstance.h
-    ${VCORE_DIR}/src/cert-svc/cerror.h
-    ${VCORE_DIR}/src/cert-svc/cpkcs12.h
-    ${VCORE_DIR}/src/cert-svc/cprimitives.h
-    ${VCORE_DIR}/src/cert-svc/cstring.h
-    DESTINATION ${INCLUDEDIR}/cert-svc/cert-svc
-    )
diff --git a/vcore/src/cert-svc/ccrl.h b/vcore/src/cert-svc/ccrl.h
deleted file mode 100644 (file)
index 02f8a7a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        ccrl.h
- * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
- * @version     1.0
- * @brief       This is part of C api for ValidationCore.
- */
-#ifndef _CERTSVC_CCRL_H_
-#define _CERTSVC_CCRL_H_
-
-#include <time.h>
-
-#include <cert-svc/ccert.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define CERTSVC_CRL_GOOD                 (1<<0)
-#define CERTSVC_CRL_REVOKED              (1<<1)
-#define CERTSVC_CRL_VERIFICATION_ERROR   (1<<3)
-#define CERTSVC_CRL_NO_SUPPORT           (1<<4)
-
-typedef void (*CertSvcCrlCacheWrite)(
-    const char *distributionPoint,
-    const char *body,
-    int bodySize,
-    time_t nextUpdateTime,
-    void *userParam);
-
-typedef int (*CertSvcCrlCacheRead)(
-    const char *distributionPoint,
-    char **body,
-    int *bodySize,
-    time_t *nextUpdateTime,
-    void *userParam);
-
-typedef void (*CertSvcCrlFree)(
-    char *buffer,
-    void *userParam);
-
-void certsvc_crl_cache_functions(
-    CertSvcInstance instance,
-    CertSvcCrlCacheWrite writePtr,
-    CertSvcCrlCacheRead readPtr,
-    CertSvcCrlFree freePtr);
-
-int certsvc_crl_check(
-    CertSvcCertificate certificate,
-    CertSvcCertificate *trustedStore,
-    int storeSize,
-    int force,
-    int *status,
-    void *userParam);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/vcore/src/cert-svc/cocsp.h b/vcore/src/cert-svc/cocsp.h
deleted file mode 100644 (file)
index f86816d..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        cocsp.h
- * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
- * @version     1.0
- * @brief       This is C api for ValidationCore.
- */
-#ifndef _CERTSVC_OCSP_C_API_H_
-#define _CERTSVC_OCSP_C_API_H_
-
-#include <time.h>
-
-#include <cert-svc/ccert.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define CERTSVC_OCSP_GOOD                (1<<0)
-#define CERTSVC_OCSP_REVOKED             (1<<1)
-#define CERTSVC_OCSP_UNKNOWN             (1<<2)
-#define CERTSVC_OCSP_VERIFICATION_ERROR  (1<<3)
-#define CERTSVC_OCSP_NO_SUPPORT          (1<<4)
-#define CERTSVC_OCSP_CONNECTION_FAILED   (1<<5)
-#define CERTSVC_OCSP_ERROR               (1<<6)
-/**
- * Implementation of ocsp call.
- *
- * Please note: to verify certificate you need certificate and his parrent.
- * This function will always verify chain_size-1 certificates from the chain.
- *
- * @param[in] chain Certificate to check.
- * @param[in] chain_size Size of certificate_array
- * @param[in] trusted Store with trusted certificates (additional certificates
- *                    that may by reqired during verification process).
- * @param[in] trusted_size Size of trusted certificate store.
- * @param[in] url Force OCSP to use specific server. Pass NULL to use OCSP server defined in certificate.
- * @param[out] status Bit field with description of chain validation.
- * @return CERTSVC_SUCCESS, CERTSVC_FAIL, CERTSVC_WRONG_ARGUMENT
- */
-int certsvc_ocsp_check(CertSvcCertificate *chain,
-                       int chainSize,
-                       CertSvcCertificate *trusted,
-                       int truestedSize,
-                       const char *url,
-                       int *status);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/vcore/src/dpl/core/include/dpl/char_traits.h b/vcore/src/dpl/core/include/dpl/char_traits.h
deleted file mode 100644 (file)
index a9d0bc0..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        char_traits.h
- * @author      Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version     1.0
- * @brief       Char traits are used to create basic_string extended with
- * additional features
- *              Current char traits could be extended in feature to boost
- * performance
- */
-#ifndef DPL_CHAR_TRAITS
-#define DPL_CHAR_TRAITS
-
-#include <cstring>
-#include <string>
-#include <ostream>
-#include <algorithm>
-#include <dpl/exception.h>
-
-namespace VcoreDPL {
-typedef std::char_traits<wchar_t> CharTraits;
-} // namespace VcoreDPL
-
-#endif // DPL_CHAR_TRAITS
diff --git a/vcore/src/dpl/core/include/dpl/file_input.h b/vcore/src/dpl/core/include/dpl/file_input.h
deleted file mode 100644 (file)
index d982957..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        file_input.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of file input
- */
-#ifndef DPL_FILE_INPUT_H
-#define DPL_FILE_INPUT_H
-
-#include <dpl/noncopyable.h>
-#include <dpl/exception.h>
-#include <dpl/abstract_waitable_input.h>
-
-namespace VcoreDPL {
-class FileInput :
-    private Noncopyable,
-    public AbstractWaitableInput
-{
-  public:
-    class Exception
-    {
-      public:
-        DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-        DECLARE_EXCEPTION_TYPE(Base, OpenFailed)
-        DECLARE_EXCEPTION_TYPE(Base, CloseFailed)
-    };
-
-  protected:
-    int m_fd;
-
-  public:
-    FileInput();
-    FileInput(const std::string &fileName);
-    virtual ~FileInput();
-
-    void Open(const std::string &fileName);
-    void Close();
-
-    // AbstractInput
-    virtual BinaryQueueAutoPtr Read(size_t size);
-
-    // AbstractWaitableInput
-    virtual WaitableHandle WaitableReadHandle() const;
-};
-} // namespace VcoreDPL
-
-#endif // DPL_FILE_INPUT_H
diff --git a/vcore/src/dpl/core/include/dpl/optional.h b/vcore/src/dpl/core/include/dpl/optional.h
deleted file mode 100644 (file)
index 2f37aa1..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        optional_value.h
- * @author      Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version     1.0
- */
-
-#ifndef DPL_OPTIONAL_H
-#define DPL_OPTIONAL_H
-
-#include <dpl/exception.h>
-#include <dpl/availability.h>
-
-namespace VcoreDPL {
-template <typename Type>
-class Optional
-{
-    class Exception
-    {
-      public:
-        DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-        DECLARE_EXCEPTION_TYPE(Base, NullReference)
-    };
-
-  public:
-    Optional() :
-        m_null(true),
-        m_value()
-    {}
-
-    Optional(const Type& t) :
-        m_null(false),
-        m_value(t)
-    {}
-
-    bool IsNull() const
-    {
-        return m_null;
-    }
-
-    Type& operator*()
-    {
-        if (m_null) {
-            Throw(typename Exception::NullReference);
-        }
-        return m_value;
-    }
-
-    const Type& operator*() const
-    {
-        if (m_null) {
-            Throw(typename Exception::NullReference);
-        }
-        return m_value;
-    }
-
-    const Type* operator->() const
-    {
-        if (m_null) {
-            Throw(typename Exception::NullReference);
-        }
-        return &m_value;
-    }
-
-    Type* operator->()
-    {
-        if (m_null) {
-            Throw(typename Exception::NullReference);
-        }
-        return &m_value;
-    }
-
-    bool operator!() const
-    {
-        return m_null;
-    }
-
-    Optional<Type>& operator=(const Type& other)
-    {
-        m_null = false;
-        m_value = other;
-        return *this;
-    }
-
-    bool operator==(const Optional<Type>& aSecond) const
-    {
-        return LogicalOperator<true>(*this, aSecond,
-                                     std::equal_to<Type>(), std::equal_to<bool>());
-    }
-
-    bool operator==(const Type& aSecond) const
-    {
-        return Optional<Type>(aSecond) == *this;
-    }
-
-    bool operator!=(const Optional<Type>& aSecond) const
-    {
-        return !(*this == aSecond);
-    }
-
-    bool operator<(const Optional<Type>& aSecond) const
-    {
-        return LogicalOperator<false>(*this, aSecond,
-                                      std::less<Type>(), std::less<bool>());
-    }
-
-    bool operator>(const Optional<Type>& aSecond) const
-    {
-        return LogicalOperator<false>(*this, aSecond,
-                                      std::greater<Type>(), std::greater<bool>());
-    }
-
-    bool operator<=(const Optional<Type>& aSecond) const
-    {
-        return *this == aSecond || *this < aSecond;
-    }
-
-    bool operator>=(const Optional<Type>& aSecond) const
-    {
-        return *this == aSecond || *this > aSecond;
-    }
-
-    static Optional<Type> Null;
-
-  private:
-    bool m_null;
-    Type m_value;
-
-    template <bool taEquality, typename taComparator, typename taNullComparator>
-    static bool LogicalOperator(const Optional<Type>& aFirst,
-                                const Optional<Type>& aSecond,
-                                taComparator aComparator,
-                                taNullComparator aNullComparator)
-    {
-        if (aFirst.m_null == aSecond.m_null) {
-            if (aFirst.m_null) {
-                return taEquality;
-            } else {
-                return aComparator(aFirst.m_value, aSecond.m_value);
-            }
-        } else {
-            return aNullComparator(aFirst.m_null, aSecond.m_null);
-        }
-    }
-} DPL_DEPRECATED_WITH_MESSAGE("Use boost::optional instead");
-
-template<typename Type>
-Optional<Type> Optional<Type>::Null = Optional<Type>();
-} //namespace VcoreDPL
-
-template<typename Type>
-std::ostream& operator<<(std::ostream& aStream,
-                         const VcoreDPL::Optional<Type>& aOptional)
-{
-    if (aOptional.IsNull()) {
-        return aStream << "null optional";
-    } else {
-        return aStream << *aOptional;
-    }
-}
-
-#endif // DPL_OPTIONAL_VALUE_H
diff --git a/vcore/src/dpl/core/include/dpl/optional_typedefs.h b/vcore/src/dpl/core/include/dpl/optional_typedefs.h
deleted file mode 100644 (file)
index bd411f2..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-#ifndef DPL_OPTIONAL_TYPEDEFS_H
-#define DPL_OPTIONAL_TYPEDEFS_H
-
-#include <string>
-#include <dpl/string.h>
-#include <boost/optional.hpp>
-
-namespace VcoreDPL {
-typedef boost::optional<String> OptionalString;
-typedef boost::optional<int> OptionalInt;
-typedef boost::optional<unsigned int> OptionalUInt;
-typedef boost::optional<bool> OptionalBool;
-typedef boost::optional<float> OptionalFloat;
-typedef boost::optional<std::string> OptionalStdString;
-} //namespace VcoreDPL
-
-#endif /* DPL_OPTIONAL_TYPEDEFS_H */
-
diff --git a/vcore/src/dpl/core/include/dpl/scoped_array.h b/vcore/src/dpl/core/include/dpl/scoped_array.h
deleted file mode 100644 (file)
index e117f33..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*!
- * @file        scoped_ptr.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of scoped array RAII
- *
- * This module is deprecated, please use standard C++11 feature: std::unique_ptr<Type[]>
- */
-#ifndef DPL_SCOPED_ARRAY_H
-#define DPL_SCOPED_ARRAY_H
-
-#include <cstddef>
-
-#include <dpl/assert.h>
-#include <dpl/scoped_resource.h>
-#include <dpl/availability.h>
-
-namespace VcoreDPL {
-template<typename Class>
-struct ScopedArrayPolicy
-{
-    typedef Class* Type;
-    static Type NullValue()
-    {
-        return NULL;
-    }
-    static void Destroy(Type ptr)
-    {
-        delete[] ptr;
-    }
-};
-
-template<typename Class>
-class ScopedArray : public ScopedResource<ScopedArrayPolicy<Class> >
-{
-    typedef ScopedArrayPolicy<Class> Policy;
-    typedef ScopedResource<Policy> BaseType;
-
-  public:
-    explicit ScopedArray(Class *ptr = Policy::NullValue()) : BaseType(ptr) { }
-
-    Class &operator [](std::ptrdiff_t k) const
-    {
-        Assert(this->m_value != Policy::NullValue() &&
-               "Dereference of scoped NULL array!");
-        Assert(k >= 0 && "Negative array index");
-
-        return this->m_value[k];
-    }
-} DPL_DEPRECATED_WITH_MESSAGE("use standard C++11 feature: std::unique_ptr<Type[]>");
-} // namespace VcoreDPL
-
-#endif // DPL_SCOPED_PTR_H
diff --git a/vcore/src/dpl/core/include/dpl/string.h b/vcore/src/dpl/core/include/dpl/string.h
deleted file mode 100644 (file)
index 68d6a09..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        string.h
- * @author      Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version     1.0
- */
-#ifndef DPL_STRING
-#define DPL_STRING
-
-#include <dpl/exception.h>
-#include <dpl/char_traits.h>
-#include <string>
-#include <ostream>
-#include <numeric>
-
-namespace VcoreDPL {
-// @brief DPL string
-typedef std::basic_string<wchar_t, CharTraits> String;
-
-// @brief String exception class
-class StringException
-{
-  public:
-    DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-
-    // @brief Invalid init for UTF8 to UTF32 converter
-    DECLARE_EXCEPTION_TYPE(Base, IconvInitErrorUTF8ToUTF32)
-
-    // @brief Invalid taStdContainerinit for UTF32 to UTF32 converter
-    DECLARE_EXCEPTION_TYPE(Base, IconvInitErrorUTF32ToUTF8)
-
-    // @brief Invalid conversion for UTF8 to UTF32 converter
-    DECLARE_EXCEPTION_TYPE(Base, IconvConvertErrorUTF8ToUTF32)
-
-    // @brief Invalid conversion for UTF8 to UTF32 converter
-    DECLARE_EXCEPTION_TYPE(Base, IconvConvertErrorUTF32ToUTF8)
-
-    // @brief Invalid ASCII character detected in FromASCII
-    DECLARE_EXCEPTION_TYPE(Base, InvalidASCIICharacter)
-
-    // @brief Invalid ASCII character detected in FromASCII
-    DECLARE_EXCEPTION_TYPE(Base, ICUInvalidCharacterFound)
-};
-
-//!\brief convert ASCII string to VcoreDPL::String
-String FromASCIIString(const std::string& aString);
-
-//!\brief convert UTF32 string to VcoreDPL::String
-String FromUTF32String(const std::wstring& aString);
-
-//@brief Returns String object created from UTF8 string
-//@param[in] aString input UTF-8 string
-String FromUTF8String(const std::string& aString);
-
-//@brief Returns String content as std::string
-std::string ToUTF8String(const String& aString);
-
-//@brief Compare two unicode strings
-int StringCompare(const String &left,
-                  const String &right,
-                  bool caseInsensitive = false);
-
-//@brief Splits the string into substrings.
-//@param[in] str Input string
-//@param[in] delimiters array or string containing a sequence of substring
-// delimiters. Can be also a single delimiter character.
-//@param[in] it InserterIterator that is used to save the generated substrings.
-template<typename StringType, typename Delimiters, typename InserterIterator>
-void Tokenize(const StringType& str,
-              const Delimiters& delimiters,
-              InserterIterator it,
-              bool ignoreEmpty = false)
-{
-    typename StringType::size_type nextSearchStart = 0;
-    typename StringType::size_type pos;
-    typename StringType::size_type length;
-
-    while (true) {
-        pos = str.find_first_of(delimiters, nextSearchStart);
-        length =
-            ((pos == StringType::npos) ? str.length() : pos) - nextSearchStart;
-
-        if (!ignoreEmpty || length > 0) {
-            *it = str.substr(nextSearchStart, length);
-            it++;
-        }
-
-        if (pos == StringType::npos) {
-            return;
-        }
-
-        nextSearchStart = pos + 1;
-    }
-}
-
-namespace Utils {
-
-template<typename T> class ConcatFunc : public std::binary_function<T, T, T>
-{
-public:
-    explicit ConcatFunc(const T & val) : m_delim(val) {}
-    T operator()(const T & arg1, const T & arg2) const
-    {
-        return arg1 + m_delim + arg2;
-    }
-private:
-    T m_delim;
-};
-
-}
-
-template<typename ForwardIterator>
-typename ForwardIterator::value_type Join(ForwardIterator begin, ForwardIterator end, typename ForwardIterator::value_type delim)
-{
-    typedef typename ForwardIterator::value_type value;
-    if(begin == end) return value();
-    Utils::ConcatFunc<value> func(delim);
-    ForwardIterator init = begin;
-    return std::accumulate(++begin, end, *init, func);
-}
-
-template<class StringType> void TrimLeft(StringType & obj, typename StringType::const_pointer separators)
-{
-    obj.erase(0, obj.find_first_not_of(separators));
-}
-
-template<class StringType> void TrimRight(StringType & obj, typename StringType::const_pointer separators)
-{
-    obj.erase(obj.find_last_not_of(separators)+1);
-}
-
-template<class StringType> void Trim(StringType & obj, typename StringType::const_pointer separators)
-{
-    TrimLeft(obj, separators);
-    TrimRight(obj, separators);
-}
-
-
-} //namespace VcoreDPL
-
-std::ostream& operator<<(std::ostream& aStream, const VcoreDPL::String& aString);
-
-#endif // DPL_STRING
diff --git a/vcore/src/dpl/core/include/dpl/thread.h b/vcore/src/dpl/core/include/dpl/thread.h
deleted file mode 100644 (file)
index d13740b..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        thread.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of thread
- */
-#ifndef DPL_THREAD_H
-#define DPL_THREAD_H
-
-#include <dpl/waitable_handle_watch_support.h>
-#include <dpl/noncopyable.h>
-#include <dpl/exception.h>
-#include <dpl/assert.h>
-#include <boost/optional.hpp>
-#include <stdint.h>
-#include <cstdlib>
-#include <pthread.h>
-#include <thread>
-#include <vector>
-#include <list>
-#include <mutex>
-
-namespace VcoreDPL {
-class Thread :
-    private Noncopyable,
-    public WaitableHandleWatchSupport
-{
-  public:
-    class Exception
-    {
-      public:
-        DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-        DECLARE_EXCEPTION_TYPE(Base, CreateFailed)
-        DECLARE_EXCEPTION_TYPE(Base, DestroyFailed)
-        DECLARE_EXCEPTION_TYPE(Base, RunFailed)
-        DECLARE_EXCEPTION_TYPE(Base, QuitFailed)
-        DECLARE_EXCEPTION_TYPE(Base, UnmanagedThread)
-    };
-
-    typedef void (*EventDeleteProc)(void *event, void *userParam);
-    typedef void (*EventDispatchProc)(void *event, void *userParam);
-
-  protected:
-    /**
-     * Main thread entry
-     * The method is intended to be overloaded with custom code.
-     * Default implementation just executes Exec method to process
-     * all thread exents
-     */
-    virtual int ThreadEntry();
-
-    /**
-     * Start processing of thread events
-     */
-    int Exec();
-
-  private:
-    struct InternalEvent
-    {
-        void *event;
-        void *userParam;
-        EventDispatchProc eventDispatchProc;
-        EventDeleteProc eventDeleteProc;
-
-        InternalEvent(void *eventArg,
-                      void *userParamArg,
-                      EventDispatchProc eventDispatchProcArg,
-                      EventDeleteProc eventDeleteProcArg) :
-            event(eventArg),
-            userParam(userParamArg),
-            eventDispatchProc(eventDispatchProcArg),
-            eventDeleteProc(eventDeleteProcArg)
-        {}
-    };
-
-    struct InternalTimedEvent :
-        InternalEvent
-    {
-        unsigned long dueTimeMiliseconds;
-        unsigned long registerTimeMiliseconds;
-
-        InternalTimedEvent(void *eventArg,
-                           void *userParamArg,
-                           unsigned long dueTimeMilisecondsArg,
-                           unsigned long registerTimeMilisecondsArg,
-                           EventDispatchProc eventDispatchProcArg,
-                           EventDeleteProc eventDeleteProcArg) :
-            InternalEvent(eventArg,
-                          userParamArg,
-                          eventDispatchProcArg,
-                          eventDeleteProcArg),
-            dueTimeMiliseconds(dueTimeMilisecondsArg),
-            registerTimeMiliseconds(registerTimeMilisecondsArg)
-        {}
-
-        bool operator<(const InternalTimedEvent &other)
-        {
-            return registerTimeMiliseconds + dueTimeMiliseconds >
-                   other.registerTimeMiliseconds + other.dueTimeMiliseconds;
-        }
-    };
-
-    // Internal event list
-    typedef std::list<InternalEvent> InternalEventList;
-
-    // Internal timed event list
-    typedef std::vector<InternalTimedEvent> InternalTimedEventVector;
-
-    // State managment
-    std::thread m_thread;
-    volatile bool m_abandon;
-    volatile bool m_running;
-    std::mutex m_stateMutex;
-    WaitableEvent m_quitEvent;
-
-    // Event processing
-    std::mutex m_eventMutex;
-    InternalEventList m_eventList;
-    WaitableEvent m_eventInvoker;
-
-    // Timed events processing
-    std::mutex m_timedEventMutex;
-    InternalTimedEventVector m_timedEventVector;
-    WaitableEvent m_timedEventInvoker;
-
-    // WaitableHandleWatchSupport
-    virtual Thread *GetInvokerThread();
-    virtual void HandleDirectInvoker();
-    bool m_directInvoke;
-
-    // Internals
-    unsigned long GetCurrentTimeMiliseconds() const;
-    void ProcessEvents();
-    void ProcessTimedEvents();
-
-    static void *StaticThreadEntry(void *param);
-
-  public:
-    explicit Thread();
-    virtual ~Thread();
-
-    /**
-     * Run thread. Does nothing if thread is already running
-     */
-    void Run();
-
-    /**
-     * Send quit message to thread and wait for its end
-     * Does nothing is thread is not running
-     */
-    void Quit();
-
-    /**
-     * Checks if current thread is main one
-     * Returns true if it is main program thread, false otherwise
-     */
-    static bool IsMainThread();
-
-    /**
-     * Current thread retrieval
-     * Returns DPL thread handle or NULL if it is main program thread
-     */
-    static Thread *GetCurrentThread();
-
-    /**
-     * Low-level event push, usually used only by EventSupport
-     */
-    void PushEvent(void *event,
-                   EventDispatchProc eventDispatchProc,
-                   EventDeleteProc eventDeleteProc,
-                   void *userParam);
-
-    /**
-     * Low-level timed event push, usually used only by EventSupport
-     */
-    void PushTimedEvent(void *event,
-                        double dueTimeSeconds,
-                        EventDispatchProc eventDispatchProc,
-                        EventDeleteProc eventDeleteProc,
-                        void *userParam);
-
-    /**
-     * Sleep for a number of seconds
-     */
-    static void Sleep(uint64_t seconds);
-
-    /**
-     * Sleep for a number of miliseconds
-     */
-    static void MiliSleep(uint64_t miliseconds);
-
-    /**
-     * Sleep for a number of microseconds
-     */
-    static void MicroSleep(uint64_t microseconds);
-
-    /**
-     * Sleep for a number of nanoseconds
-     */
-    static void NanoSleep(uint64_t nanoseconds);
-};
-
-extern bool g_TLSforMainCreated;
-
-// In case of using TLV in main thread, pthread_exit(NULL) has to be called in
-// this thread explicitly.
-// On the other hand, possibly, because of the kernel bug, there exist
-// a problem, if any other thread than main exist during pthread_exit call
-// (process can become non-responsive)
-// TODO further investigation is required.
-template<typename Type>
-class ThreadLocalVariable :
-    public Noncopyable
-{
-  public:
-    typedef Type ValueType;
-
-    class Exception
-    {
-      public:
-        DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-        DECLARE_EXCEPTION_TYPE(Base, NullReference)
-        DECLARE_EXCEPTION_TYPE(Base, KeyCreateFailed)
-    };
-
-  private:
-    pthread_key_t m_key;
-
-    struct ManagedValue
-    {
-        ValueType value;
-        boost::optional<pthread_key_t> guardKey;
-    };
-
-    static void MainThreadExitClean()
-    {
-        // There is a possible bug in kernel. If this function is called
-        // before ALL threads are closed, process will hang!
-        // Because of that, by default this function has to be called in well
-        // known "threads state".
-
-        // pthread_exit(NULL);
-    }
-
-    static void InternalDestroy(void *specific)
-    {
-        // Destroy underlying type
-        ManagedValue *instance = static_cast<ManagedValue *>(specific);
-        if (!instance->guardKey) {
-            delete instance;
-        } else {
-            int result = pthread_setspecific(*(instance->guardKey), instance);
-
-            Assert(result == 0 &&
-                   "Failed to set thread local variable");
-        }
-    }
-
-    Type &Reference(bool allowInstantiate = false)
-    {
-        ManagedValue *instance =
-            static_cast<ManagedValue *>(pthread_getspecific(m_key));
-
-        if (!instance) {
-            // Check if it is allowed to instantiate
-            if (!allowInstantiate) {
-                Throw(typename Exception::NullReference);
-            }
-
-            // checking, if specific data is created for Main thread
-            // If yes, pthread_exit(NULL) is required
-            if (!g_TLSforMainCreated) {
-                if (Thread::IsMainThread()) {
-                    g_TLSforMainCreated = true;
-                    atexit(&MainThreadExitClean);
-                }
-            }
-
-            // Need to instantiate underlying type
-            instance = new ManagedValue();
-
-            int result = pthread_setspecific(m_key, instance);
-
-            Assert(result == 0 &&
-                   "Failed to set thread local variable");
-        }
-
-        return instance->value;
-    }
-
-  public:
-    ThreadLocalVariable()
-    {
-        int result = pthread_key_create(&m_key, &InternalDestroy);
-        if (result != 0) {
-            ThrowMsg(typename Exception::KeyCreateFailed,
-                     "Failed to allocate thread local variable: " << result);
-        }
-    }
-
-    ~ThreadLocalVariable()
-    {
-        pthread_key_delete(m_key);
-    }
-
-    Type &operator=(const Type &other)
-    {
-        Type &reference = Reference(true);
-        reference = other;
-        return reference;
-    }
-
-    bool IsNull() const
-    {
-        return pthread_getspecific(m_key) == NULL;
-    }
-
-    Type& operator*()
-    {
-        return Reference();
-    }
-
-    const Type& operator*() const
-    {
-        return Reference();
-    }
-
-    const Type* operator->() const
-    {
-        return &Reference();
-    }
-
-    Type* operator->()
-    {
-        return &Reference();
-    }
-
-    bool operator!() const
-    {
-        return IsNull();
-    }
-
-    void Reset()
-    {
-        ManagedValue *specific =
-            static_cast<ManagedValue *>(pthread_getspecific(m_key));
-
-        if (!specific) {
-            return;
-        }
-
-        // TODO Should be an assert? is it developers fault to Reset Guarded
-        // value?
-        specific->guardKey = boost::optional<pthread_key_t>();
-
-        InternalDestroy(specific);
-
-        int result = pthread_setspecific(m_key, NULL);
-
-        Assert(result == 0 &&
-               "Failed to reset thread local variable");
-    }
-
-    // GuardValue(true) allows to defer destroy (by pthread internal
-    // functionality) thread specific value until GuardValue(false) will be
-    // called.
-    void GuardValue(bool guard)
-    {
-        ManagedValue *instance =
-            static_cast<ManagedValue *>(pthread_getspecific(m_key));
-
-        Assert(instance && "Failed to get the value");
-
-        instance->guardKey = guard ? m_key : boost::optional<pthread_key_t>();
-    }
-};
-} // namespace VcoreDPL
-
-#endif // DPL_THREAD_H
diff --git a/vcore/src/dpl/core/include/dpl/type_list.h b/vcore/src/dpl/core/include/dpl/type_list.h
deleted file mode 100644 (file)
index e28172d..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        type_list.h
- * @author      Bartosz Janiak (b.janiak@samsung.com)
- * @version     1.0
- * @brief       Generic type list template
- */
-#ifndef DPL_TYPE_LIST_H
-#define DPL_TYPE_LIST_H
-
-#include <cstddef>
-
-namespace VcoreDPL {
-class TypeListGuard
-{
-  public:
-    template<size_t Index>
-    struct Element
-    {
-        struct ERROR_TypeListElementIndexIsOutOfBounds;
-        typedef ERROR_TypeListElementIndexIsOutOfBounds Type;
-    };
-
-    static const size_t Size = 0;
-};
-
-template<typename HeadType, typename TailType>
-class TypeList
-{
-  private:
-    class DummyClass
-    {};
-
-    template<typename List, size_t Enum>
-    struct TypeCounter : public TypeCounter<typename List::Tail, Enum + 1>
-    {};
-
-    template<size_t Enum>
-    struct TypeCounter<TypeListGuard, Enum>
-    {
-        static const size_t Size = Enum;
-    };
-
-  public:
-    typedef TailType Tail;
-    typedef HeadType Head;
-    typedef TypeList<HeadType, TailType> ThisType;
-
-    template<size_t Index, typename DummyType = DummyClass>
-    struct Element
-    {
-        typedef typename TailType::template Element<Index - 1>::Type Type;
-    };
-
-    template<typename DummyType>
-    struct Element<0, DummyType>
-    {
-        typedef HeadType Type;
-    };
-
-    template<typename Type, typename DummyType = DummyClass>
-    struct Contains
-    {
-        typedef typename TailType::template Contains<Type>::Yes Yes;
-    };
-
-    template<typename DummyType>
-    struct Contains<HeadType, DummyType>
-    {
-        typedef int Yes;
-    };
-
-    static const size_t Size = TypeCounter<ThisType, 0>::Size;
-};
-
-template<typename T1 = TypeListGuard, typename T2 = TypeListGuard,
-         typename T3 = TypeListGuard, typename T4 = TypeListGuard,
-         typename T5 = TypeListGuard, typename T6 = TypeListGuard,
-         typename T7 = TypeListGuard, typename T8 = TypeListGuard,
-         typename T9 = TypeListGuard, typename T10 = TypeListGuard,
-         typename T11 = TypeListGuard, typename T12 = TypeListGuard,
-         typename T13 = TypeListGuard, typename T14 = TypeListGuard,
-         typename T15 = TypeListGuard, typename T16 = TypeListGuard,
-         typename T17 = TypeListGuard, typename T18 = TypeListGuard,
-         typename T19 = TypeListGuard, typename T20 = TypeListGuard,
-         typename T21 = TypeListGuard, typename T22 = TypeListGuard,
-         typename T23 = TypeListGuard, typename T24 = TypeListGuard,
-         typename T25 = TypeListGuard, typename T26 = TypeListGuard,
-         typename T27 = TypeListGuard, typename T28 = TypeListGuard,
-         typename T29 = TypeListGuard, typename T30 = TypeListGuard,
-         typename T31 = TypeListGuard, typename T32 = TypeListGuard,
-         typename T33 = TypeListGuard, typename T34 = TypeListGuard,
-         typename T35 = TypeListGuard, typename T36 = TypeListGuard,
-         typename T37 = TypeListGuard, typename T38 = TypeListGuard,
-         typename T39 = TypeListGuard, typename T40 = TypeListGuard,
-         typename T41 = TypeListGuard, typename T42 = TypeListGuard,
-         typename T43 = TypeListGuard, typename T44 = TypeListGuard,
-         typename T45 = TypeListGuard, typename T46 = TypeListGuard,
-         typename T47 = TypeListGuard, typename T48 = TypeListGuard,
-         typename T49 = TypeListGuard, typename T50 = TypeListGuard,
-         typename T51 = TypeListGuard, typename T52 = TypeListGuard,
-         typename T53 = TypeListGuard, typename T54 = TypeListGuard,
-         typename T55 = TypeListGuard, typename T56 = TypeListGuard,
-         typename T57 = TypeListGuard, typename T58 = TypeListGuard,
-         typename T59 = TypeListGuard, typename T60 = TypeListGuard,
-         typename T61 = TypeListGuard, typename T62 = TypeListGuard,
-         typename T63 = TypeListGuard, typename T64 = TypeListGuard>
-struct TypeListDecl
-{
-    typedef TypeList<T1,
-                     typename TypeListDecl<
-                         T2, T3, T4, T5, T6, T7, T8,
-                         T9, T10, T11, T12, T13, T14, T15,
-                         T16, T17, T18, T19, T20, T21, T22,
-                         T23, T24, T25, T26, T27, T28, T29,
-                         T30, T31, T32, T33, T34, T35, T36,
-                         T37, T38, T39, T40, T41, T42, T43,
-                         T44, T45, T46, T47, T48, T49, T50,
-                         T51, T52, T53, T54, T55, T56, T57,
-                         T58, T59, T60, T61, T62, T63, T64>::Type> Type;
-};
-
-template<>
-struct TypeListDecl<TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard,
-                    TypeListGuard, TypeListGuard, TypeListGuard, TypeListGuard>
-{
-    typedef TypeListGuard Type;
-};
-} // namespace VcoreDPL
-
-#endif // DPL_TYPE_LIST_H
diff --git a/vcore/src/dpl/core/include/dpl/waitable_event.h b/vcore/src/dpl/core/include/dpl/waitable_event.h
deleted file mode 100644 (file)
index b6305b0..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        waitable_event.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of waitable event
- */
-#ifndef DPL_WAITABLE_EVENT_H
-#define DPL_WAITABLE_EVENT_H
-
-#include <dpl/waitable_handle.h>
-#include <dpl/noncopyable.h>
-#include <dpl/exception.h>
-#include <vector>
-
-namespace VcoreDPL {
-class WaitableEvent :
-    private Noncopyable
-{
-  public:
-    class Exception
-    {
-      public:
-        DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-        DECLARE_EXCEPTION_TYPE(Base, CreateFailed)
-        DECLARE_EXCEPTION_TYPE(Base, DestroyFailed)
-        DECLARE_EXCEPTION_TYPE(Base, SignalFailed)
-        DECLARE_EXCEPTION_TYPE(Base, ResetFailed)
-    };
-
-  private:
-    int m_pipe[2];
-
-  public:
-    WaitableEvent();
-    virtual ~WaitableEvent();
-
-    WaitableHandle GetHandle() const;
-
-    void Signal() const;
-    void Reset() const;
-};
-} // namespace VcoreDPL
-
-#endif // DPL_WAITABLE_EVENT_H
diff --git a/vcore/src/dpl/core/include/dpl/waitable_handle.h b/vcore/src/dpl/core/include/dpl/waitable_handle.h
deleted file mode 100644 (file)
index 5ffd76c..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        waitable_handle.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the header file of waitable handle
- */
-#ifndef DPL_WAITABLE_HANDLE_H
-#define DPL_WAITABLE_HANDLE_H
-
-#include <dpl/noncopyable.h>
-#include <dpl/exception.h>
-#include <vector>
-
-namespace VcoreDPL {
-/**
- * Waitable unix wait handle definition
- */
-typedef int WaitableHandle;
-
-/**
- * Waitable handle list
- */
-typedef std::vector<WaitableHandle> WaitableHandleList;
-
-/**
- * Wait mode
- */
-class WaitMode
-{
-  public:
-    enum Type
-    {
-        Read,  ///< Wait for readability state changes
-        Write  ///< Wait for writability state changes
-    };
-};
-
-/**
- * Waitable handle list ex
- */
-typedef std::vector<std::pair<WaitableHandle,
-                              WaitMode::Type> > WaitableHandleListEx;
-
-/**
- * Waitable handle index list
- */
-typedef std::vector<size_t> WaitableHandleIndexList;
-
-/**
- * Wait exceptions
- */
-DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, WaitFailed)
-
-/**
- * Wait for single handle readability
- * Convience function.
- *
- * @return Signaled waitable handle index list
- * @throw WaitFailed Fatal error occurred while waiting for signal
- */
-WaitableHandleIndexList WaitForSingleHandle(
-    WaitableHandle handle,
-    unsigned long miliseconds =
-        0xFFFFFFFF);
-
-/**
- * Wait for single handle
- * Convience function.
- *
- * @return Signaled waitable handle index list
- * @throw WaitFailed Fatal error occurred while waiting for signal
- */
-WaitableHandleIndexList WaitForSingleHandle(
-    WaitableHandle handle,
-    WaitMode::Type mode,
-    unsigned long miliseconds =
-        0xFFFFFFFF);
-
-/**
- * Wait for multiple handles readability
- *
- * @return Signaled waitable handle index list
- * @throw WaitFailed Fatal error occurred while waiting for signal
- */
-WaitableHandleIndexList WaitForMultipleHandles(
-    const WaitableHandleList &handleList,
-    unsigned long miliseconds = 0xFFFFFFFF);
-
-/**
- * Wait for multiple handles readability
- *
- * @return Signaled waitable handle index list
- * @throw WaitFailed Fatal error occurred while waiting for signal
- */
-WaitableHandleIndexList WaitForMultipleHandles(
-    const WaitableHandleListEx &handleListEx,
-    unsigned long miliseconds = 0xFFFFFFFF);
-} // namespace VcoreDPL
-
-#endif // DPL_WAITABLE_HANDLE_H
diff --git a/vcore/src/dpl/core/include/dpl/waitable_handle_watch_support.h b/vcore/src/dpl/core/include/dpl/waitable_handle_watch_support.h
deleted file mode 100644 (file)
index 4f3f142..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        waitable_handle_watch_support.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of waitable handle watch
- * support
- */
-#ifndef DPL_WAITABLE_HANDLE_WATCH_SUPPORT_H
-#define DPL_WAITABLE_HANDLE_WATCH_SUPPORT_H
-
-#include <dpl/waitable_event.h>
-#include <dpl/waitable_handle.h>
-#include <dpl/exception.h>
-#include <list>
-#include <map>
-#include <mutex>
-
-namespace VcoreDPL {
-class Thread;
-
-class WaitableHandleWatchSupport
-{
-  public:
-    class WaitableHandleListener
-    {
-      public:
-        virtual ~WaitableHandleListener() {}
-
-        virtual void OnWaitableHandleEvent(WaitableHandle waitableHandle,
-                                           WaitMode::Type mode) = 0;
-    };
-
-  protected:
-    // Invoker waitable handle
-    // Signaled by Add/Remove methods
-    // After being signaled one must call Handle invoke to reset invoker
-    WaitableHandle WaitableInvokerHandle() const;
-
-    // Waitable handle ex list
-    WaitableHandleListEx WaitableWatcherHandles() const;
-
-    // Perform actions for signaled waitable handle
-    // Called in execution context, after
-    void HandleWatcher(WaitableHandle waitableHandle, WaitMode::Type mode);
-
-    // Perform actions after invoker was signaled
-    void InvokerFinished();
-
-    // Get invoker context
-    virtual Thread *GetInvokerThread() = 0;
-
-    // Invoke direct invoker
-    virtual void HandleDirectInvoker() = 0;
-
-  private:
-    // Waitable event watchers
-    struct WaitableHandleWatcher
-    {
-        WaitableHandleListener *listener;
-        WaitMode::Type mode;
-
-        WaitableHandleWatcher(WaitableHandleListener *l, WaitMode::Type m) :
-            listener(l),
-            mode(m)
-        {}
-    };
-
-    typedef std::list<WaitableHandleWatcher> WaitableHandleListenerList;
-
-    struct WaitableHandleWatchers
-    {
-        WaitableHandleListenerList listeners;
-        size_t readListenersCount;
-        size_t writeListenersCount;
-
-        WaitableHandleWatchers() :
-            readListenersCount(0),
-            writeListenersCount(0)
-        {}
-    };
-
-    typedef std::map<WaitableHandle,
-                     WaitableHandleWatchers> WaitableHandleWatchersMap;
-
-    // Waitable event watch support
-    mutable std::recursive_mutex m_watchersMutex;
-    WaitableHandleWatchersMap m_watchersMap;
-    WaitableEvent m_watchersInvoker;
-    WaitableEvent m_watchersInvokerCommit;
-
-    // Invoke call
-    void CommitInvoker();
-
-  public:
-    /**
-     * Constructor
-     */
-    explicit WaitableHandleWatchSupport();
-
-    /**
-     * Destructor
-     */
-    virtual ~WaitableHandleWatchSupport();
-
-    /**
-     * Adds listener for specific waitable event
-     *
-     * @param[in] listener Listener to attach
-     * @param[in] waitableHandle Waitable handle to listen for changes
-     * @param[in] mode Type of changes to listen to
-     * @return none
-     * @see WaitMode::Type
-     */
-    void AddWaitableHandleWatch(WaitableHandleListener *listener,
-                                WaitableHandle waitableHandle,
-                                WaitMode::Type mode);
-
-    /**
-     * Remove listener for specific waitable event
-     *
-     * @param[in] listener Listener to detach
-     * @param[in] waitableHandle Waitable handle to unlisten for changes
-     * @param[in] mode Type of changes to unlisten to
-     * @return none
-     * @see WaitMode::Type
-     */
-    void RemoveWaitableHandleWatch(WaitableHandleListener *listener,
-                                   WaitableHandle waitableHandle,
-                                   WaitMode::Type mode);
-
-};
-} // namespace VcoreDPL
-
-#endif // DPL_WAITABLE_HANDLE_WATCH_SUPPORT_H
diff --git a/vcore/src/dpl/core/include/dpl/workaround.h b/vcore/src/dpl/core/include/dpl/workaround.h
deleted file mode 100644 (file)
index 19c26ef..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        workaround.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the header file of workaround
- */
-#ifndef DPL_WORKAROUND_H
-#define DPL_WORKAROUND_H
-
-/**
- * Define following macro to track invalid waitable handles
- * in WaitForSingle/WaitForMultiple functions
- */
-#define DPL_ENABLE_WAITABLE_HANDLE_BADF_CHECK
-
-/**
- * Define following macro to enable workaround for problem
- * with GLIB loop integration and EBADF error handling
- */
-#define DPL_ENABLE_GLIB_LOOP_INTEGRATION_WORKAROUND
-
-/**
- * Define following macro to enable workaround for problem
- * with invalid conversions in htons/ntohs macros
- */
-#define DPL_ENABLE_HTONS_NTOHS_I386_WORKAROUND
-
-#endif // DPL_WORKAROUND_H
diff --git a/vcore/src/dpl/core/src/char_traits.cpp b/vcore/src/dpl/core/src/char_traits.cpp
deleted file mode 100644 (file)
index 32b9197..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        char_traits.cpp
- * @author      Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version     1.0
- * @biref       Char traits are used to create basic_string extended with
- * additional features
- *              Current char traits could be extended in feature to boost
- * performance
- */
-#include <stddef.h>
-#include <dpl/char_traits.h>
-
-//
-// Note:
-//
-// The file here is left blank to enable precompilation
-// of templates in corresponding header file.
-// Do not remove this file.
-//
diff --git a/vcore/src/dpl/core/src/file_input.cpp b/vcore/src/dpl/core/src/file_input.cpp
deleted file mode 100644 (file)
index 18bef68..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        file_input.cpp
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of named input pipe
- */
-#include <stddef.h>
-#include <dpl/file_input.h>
-#include <dpl/binary_queue.h>
-#include <dpl/log/log.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-
-namespace VcoreDPL {
-namespace // anonymous
-{
-const size_t DEFAULT_READ_BUFFER_SIZE = 4096;
-} // namespace anonymous
-
-FileInput::FileInput() :
-    m_fd(-1)
-{}
-
-FileInput::FileInput(const std::string& fileName) :
-    m_fd(-1)
-{
-    Open(fileName);
-}
-
-FileInput::~FileInput()
-{
-    Close();
-}
-
-void FileInput::Open(const std::string& fileName)
-{
-    // Open non-blocking
-    int fd = TEMP_FAILURE_RETRY(open(fileName.c_str(), O_RDONLY | O_NONBLOCK));
-
-    // Throw an exception if an error occurred
-    if (fd == -1) {
-        ThrowMsg(Exception::OpenFailed, fileName);
-    }
-
-    // Close if any existing
-    Close();
-
-    // Save new descriptor
-    m_fd = fd;
-
-    LogPedantic("Opened file: " << fileName);
-}
-
-void FileInput::Close()
-{
-    if (m_fd == -1) {
-        return;
-    }
-
-    if (TEMP_FAILURE_RETRY(close(m_fd)) == -1) {
-        Throw(Exception::CloseFailed);
-    }
-
-    m_fd = -1;
-
-    LogPedantic("Closed file");
-}
-
-BinaryQueueAutoPtr FileInput::Read(size_t size)
-{
-    size_t bytesToRead = size >
-        DEFAULT_READ_BUFFER_SIZE ? DEFAULT_READ_BUFFER_SIZE : size;
-
-    // Malloc default read buffer size
-    // It is unmanaged, so it can be then attached directly to binary queue
-    void *buffer = malloc(bytesToRead);
-
-    if (buffer == NULL) {
-        throw std::bad_alloc();
-    }
-
-    LogPedantic("Trying to read " << bytesToRead << " bytes");
-
-    ssize_t result = TEMP_FAILURE_RETRY(read(m_fd, buffer, bytesToRead));
-
-    LogPedantic("Read " << result << " bytes from file");
-
-    if (result > 0) {
-        // Succedded to read socket data
-        BinaryQueueAutoPtr binaryQueue(new BinaryQueue());
-
-        // Append unmanaged memory
-        binaryQueue->AppendUnmanaged(buffer,
-                                     result,
-                                     &BinaryQueue::BufferDeleterFree,
-                                     NULL);
-
-        // Return buffer
-        return binaryQueue;
-    } else if (result == 0) {
-        // Socket was gracefuly closed
-        free(buffer);
-
-        // Return empty buffer
-        return BinaryQueueAutoPtr(new BinaryQueue());
-    } else {
-        // Must first save errno value, because it may be altered
-        int lastErrno = errno;
-
-        // Free buffer
-        free(buffer);
-
-        // Interpret error result
-        (void)lastErrno;
-
-        // FIXME: Handle specific errno
-        Throw(AbstractInput::Exception::ReadFailed);
-    }
-}
-
-WaitableHandle FileInput::WaitableReadHandle() const
-{
-    return static_cast<WaitableHandle>(m_fd);
-}
-} // namespace VcoreDPL
diff --git a/vcore/src/dpl/core/src/string.cpp b/vcore/src/dpl/core/src/string.cpp
deleted file mode 100644 (file)
index 5679633..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        string.cpp
- * @author      Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- */
-#include <stddef.h>
-#include <memory>
-#include <dpl/string.h>
-#include <dpl/char_traits.h>
-#include <dpl/errno_string.h>
-#include <dpl/exception.h>
-#include <dpl/log/log.h>
-#include <string>
-#include <vector>
-#include <algorithm>
-#include <cstring>
-#include <errno.h>
-#include <iconv.h>
-#include <unicode/ustring.h>
-
-// TODO: Completely move to ICU
-namespace VcoreDPL {
-namespace //anonymous
-{
-class ASCIIValidator
-{
-    const std::string& m_TestedString;
-
-  public:
-    ASCIIValidator(const std::string& aTestedString);
-
-    void operator()(char aCharacter) const;
-};
-
-ASCIIValidator::ASCIIValidator(const std::string& aTestedString) :
-    m_TestedString(aTestedString)
-{}
-
-void ASCIIValidator::operator()(char aCharacter) const
-{
-    // Check for ASCII data range
-    if (aCharacter <= 0) {
-        ThrowMsg(
-            StringException::InvalidASCIICharacter,
-            "invalid character code " << static_cast<int>(aCharacter)
-                                      << " from string [" <<
-            m_TestedString
-                                      << "] passed as ASCII");
-    }
-}
-
-const iconv_t gc_IconvOperError = reinterpret_cast<iconv_t>(-1);
-const size_t gc_IconvConvertError = static_cast<size_t>(-1);
-} // namespace anonymous
-
-String FromUTF8String(const std::string& aIn)
-{
-    if (aIn.empty()) {
-        return String();
-    }
-
-    size_t inbytes = aIn.size();
-
-    // Default iconv UTF-32 module adds BOM (4 bytes) in from of string
-    // The worst case is when 8bit UTF-8 char converts to 32bit UTF-32
-    // newsize = oldsize * 4 + end + bom
-    // newsize - bytes for UTF-32 string
-    // oldsize - letters in UTF-8 string
-    // end - end character for UTF-32 (\0)
-    // bom - Unicode header in front of string (0xfeff)
-    size_t outbytes = sizeof(wchar_t) * (inbytes + 2);
-    std::vector<wchar_t> output(inbytes + 2, 0);
-
-    size_t outbytesleft = outbytes;
-    char* inbuf = const_cast<char*>(aIn.c_str());
-
-    // vector is used to provide buffer for iconv which expects char* buffer
-    // but during conversion from UTF32 uses internaly wchar_t
-    char* outbuf = reinterpret_cast<char*>(&output[0]);
-
-    iconv_t iconvHandle = iconv_open("UTF-32", "UTF-8");
-
-    if (gc_IconvOperError == iconvHandle) {
-        int error = errno;
-
-        ThrowMsg(StringException::IconvInitErrorUTF8ToUTF32,
-                 "iconv_open failed for " << "UTF-32 <- UTF-8" <<
-                 "error: " << GetErrnoString(error));
-    }
-
-    size_t iconvRet = iconv(iconvHandle,
-                            &inbuf,
-                            &inbytes,
-                            &outbuf,
-                            &outbytesleft);
-
-    iconv_close(iconvHandle);
-
-    if (gc_IconvConvertError == iconvRet) {
-        ThrowMsg(StringException::IconvConvertErrorUTF8ToUTF32,
-                 "iconv failed for " << "UTF-32 <- UTF-8" << "error: "
-                                     << GetErrnoString());
-    }
-
-    // Ignore BOM in front of UTF-32
-    return &output[1];
-}
-
-std::string ToUTF8String(const VcoreDPL::String& aIn)
-{
-    if (aIn.empty()) {
-        return std::string();
-    }
-
-    size_t inbytes = aIn.size() * sizeof(wchar_t);
-    size_t outbytes = inbytes + sizeof(char);
-
-    // wstring returns wchar_t but iconv expects char*
-    // iconv internally is processing input as wchar_t
-    char* inbuf = reinterpret_cast<char*>(const_cast<wchar_t*>(aIn.c_str()));
-    std::vector<char> output(inbytes, 0);
-    char* outbuf = &output[0];
-
-    size_t outbytesleft = outbytes;
-
-    iconv_t iconvHandle = iconv_open("UTF-8", "UTF-32");
-
-    if (gc_IconvOperError == iconvHandle) {
-        ThrowMsg(StringException::IconvInitErrorUTF32ToUTF8,
-                 "iconv_open failed for " << "UTF-8 <- UTF-32"
-                                          << "error: " << GetErrnoString());
-    }
-
-    size_t iconvRet = iconv(iconvHandle,
-                            &inbuf,
-                            &inbytes,
-                            &outbuf,
-                            &outbytesleft);
-
-    iconv_close(iconvHandle);
-
-    if (gc_IconvConvertError == iconvRet) {
-        ThrowMsg(StringException::IconvConvertErrorUTF32ToUTF8,
-                 "iconv failed for " << "UTF-8 <- UTF-32"
-                                     << "error: " << GetErrnoString());
-    }
-
-    return &output[0];
-}
-
-String FromASCIIString(const std::string& aString)
-{
-    String output;
-
-    std::for_each(aString.begin(), aString.end(), ASCIIValidator(aString));
-    std::copy(aString.begin(), aString.end(), std::back_inserter<String>(output));
-
-    return output;
-}
-
-String FromUTF32String(const std::wstring& aString)
-{
-    return String(&aString[0]);
-}
-
-static UChar *ConvertToICU(const String &inputString)
-{
-    std::unique_ptr<UChar[]> outputString;
-    int32_t size = 0;
-    int32_t convertedSize = 0;
-    UErrorCode error = U_ZERO_ERROR;
-
-    // Calculate size of output string
-    ::u_strFromWCS(NULL,
-                   0,
-                   &size,
-                   inputString.c_str(),
-                   -1,
-                   &error);
-
-    if (error == U_ZERO_ERROR ||
-        error == U_BUFFER_OVERFLOW_ERROR)
-    {
-        // What buffer size is ok ?
-        LogDebug("ICU: Output buffer size: " << size);
-    } else {
-        ThrowMsg(StringException::ICUInvalidCharacterFound,
-                 "ICU: Failed to retrieve output string size. Error: "
-                 << error);
-    }
-
-    // Allocate proper buffer
-    outputString.reset(new UChar[size + 1]);
-    ::memset(outputString.get(), 0, sizeof(UChar) * (size + 1));
-
-    error = U_ZERO_ERROR;
-
-    // Do conversion
-    ::u_strFromWCS(outputString.get(),
-                   size + 1,
-                   &convertedSize,
-                   inputString.c_str(),
-                   -1,
-                   &error);
-
-    if (!U_SUCCESS(error)) {
-        ThrowMsg(StringException::ICUInvalidCharacterFound,
-                 "ICU: Failed to convert string. Error: " << error);
-    }
-
-    // Done
-    return outputString.release();
-}
-
-int StringCompare(const String &left,
-                  const String &right,
-                  bool caseInsensitive)
-{
-    // Convert input strings
-    std::unique_ptr<UChar[]> leftICU(ConvertToICU(left));
-    std::unique_ptr<UChar[]> rightICU(ConvertToICU(right));
-
-    if (caseInsensitive) {
-        return static_cast<int>(u_strcasecmp(leftICU.get(), rightICU.get(), 0));
-    } else {
-        return static_cast<int>(u_strcmp(leftICU.get(), rightICU.get()));
-    }
-}
-} //namespace VcoreDPL
-
-std::ostream& operator<<(std::ostream& aStream, const VcoreDPL::String& aString)
-{
-    return aStream << VcoreDPL::ToUTF8String(aString);
-}
diff --git a/vcore/src/dpl/core/src/thread.cpp b/vcore/src/dpl/core/src/thread.cpp
deleted file mode 100644 (file)
index 045880c..0000000
+++ /dev/null
@@ -1,609 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        thread.cpp
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of thread
- */
-#include <stddef.h>
-#include <dpl/thread.h>
-#include <dpl/log/log.h>
-#include <sys/time.h>
-#include <algorithm>
-#include <dpl/assert.h>
-#include <errno.h>
-#include <time.h>
-#include <string.h>
-
-namespace // anonymous
-{
-static const size_t NANOSECONDS_PER_SECOND =
-    static_cast<uint64_t>(1000 * 1000 * 1000);
-
-static const size_t NANOSECONDS_PER_MILISECOND =
-    static_cast<uint64_t>(1000 * 1000);
-
-static const size_t NANOSECONDS_PER_MICROSECOND =
-    static_cast<uint64_t>(1000);
-
-static const std::thread::id g_mainThread = std::this_thread::get_id();
-
-class ThreadSpecific
-{
-  public:
-    pthread_key_t threadSpecific;
-
-    ThreadSpecific() :
-        threadSpecific(0)
-    {
-        threadSpecific = 0;
-        pthread_key_create(&threadSpecific, NULL);
-    }
-
-    virtual ~ThreadSpecific()
-    {
-        pthread_key_delete(threadSpecific);
-    }
-};
-
-static ThreadSpecific g_threadSpecific;
-} // namespace anonymous
-
-namespace VcoreDPL {
-bool g_TLSforMainCreated = false;
-
-Thread::Thread() :
-    m_thread(),
-    m_abandon(false),
-    m_running(false),
-    m_directInvoke(false)
-{}
-
-Thread::~Thread()
-{
-    // Ensure that we quit thread
-    // Always wait thread by yourself; if thread is still running
-    // this may be sometimes very bad. When derived, some resources
-    // may leak or be doubly freed
-    Quit();
-
-    // Remove any remainig events
-    // Thread proc is surely not running now
-    for (InternalEventList::iterator iterator = m_eventList.begin();
-         iterator != m_eventList.end();
-         ++iterator)
-    {
-        iterator->eventDeleteProc(iterator->event, iterator->userParam);
-    }
-
-    m_eventList.clear();
-}
-
-bool Thread::IsMainThread()
-{
-    return (std::this_thread::get_id() == g_mainThread);
-}
-
-Thread *Thread::GetCurrentThread()
-{
-    if (std::this_thread::get_id() == g_mainThread) {
-        return NULL;
-    }
-
-    void *threadSpecific = pthread_getspecific(g_threadSpecific.threadSpecific);
-
-    // Is this a managed thread ?
-    if (threadSpecific == NULL) {
-        Throw(Exception::UnmanagedThread);
-    }
-
-    return static_cast<Thread *>(threadSpecific);
-}
-
-void *Thread::StaticThreadEntry(void *param)
-{
-    LogDebug("Entered static thread entry");
-
-    // Retrieve context
-    Thread *This = static_cast<Thread *>(param);
-    Assert(This != NULL);
-
-    // Set thread specific
-    int result = pthread_setspecific(g_threadSpecific.threadSpecific, This);
-
-    if (result)
-        LogError("Failed to set threadSpecific.");
-
-    // Enter thread proc
-    // Do not allow exceptions to hit pthread core
-    UNHANDLED_EXCEPTION_HANDLER_BEGIN
-    {
-        This->ThreadEntry();
-    }
-    UNHANDLED_EXCEPTION_HANDLER_END
-
-    // Critical section
-    {
-        // Leave running state
-        std::lock_guard<std::mutex> lock(This->m_stateMutex);
-
-        This->m_running = false;
-
-        // Abandon thread
-        if (This->m_abandon) {
-            LogDebug("Thread was abandoned");
-            This->m_thread.detach();
-        } else {
-            LogDebug("Thread is joinable");
-        }
-    }
-
-    return NULL;
-}
-
-int Thread::ThreadEntry()
-{
-    LogDebug("Entered default thread entry");
-    return Exec();
-}
-
-void Thread::ProcessEvents()
-{
-    LogDebug("Processing events");
-
-    // Steal current event list
-    InternalEventList stolenEvents;
-
-    // Enter event list critical section
-    {
-        std::lock_guard<std::mutex> lock(m_eventMutex);
-        m_eventList.swap(stolenEvents);
-        m_eventInvoker.Reset();
-    }
-
-    // Process event list
-    LogDebug("Stolen " << stolenEvents.size() << " internal events");
-
-    for (InternalEventList::iterator iterator = stolenEvents.begin();
-         iterator != stolenEvents.end();
-         ++iterator)
-    {
-        // Dispatch immediate event
-        iterator->eventDispatchProc(iterator->event, iterator->userParam);
-
-        // Delete event
-        iterator->eventDeleteProc(iterator->event, iterator->userParam);
-    }
-}
-
-void Thread::ProcessTimedEvents()
-{
-    // Critical section on timed events mutex
-    {
-        std::lock_guard<std::mutex> lock(m_timedEventMutex);
-
-        // Get current time
-        unsigned long currentTimeMiliseconds = GetCurrentTimeMiliseconds();
-
-        // Info
-        LogDebug("Processing timed events. Time now: " << currentTimeMiliseconds << " ms");
-
-        // All timed events are sorted chronologically
-        // Emit timed out events
-        while (!m_timedEventVector.empty() &&
-               currentTimeMiliseconds >=
-               m_timedEventVector.begin()->registerTimeMiliseconds +
-               m_timedEventVector.begin()->dueTimeMiliseconds)
-        {
-            // Info
-            LogDebug("Transforming timed event into immediate event. Absolute due time: " <<
-                    (m_timedEventVector.begin()->registerTimeMiliseconds +
-                     m_timedEventVector.begin()->dueTimeMiliseconds) << " ms");
-
-            // Emit immediate event
-            PushEvent(m_timedEventVector.begin()->event,
-                      m_timedEventVector.begin()->eventDispatchProc,
-                      m_timedEventVector.begin()->eventDeleteProc,
-                      m_timedEventVector.begin()->userParam);
-
-            // Remove timed eventand fix heap
-            std::pop_heap(m_timedEventVector.begin(), m_timedEventVector.end());
-            m_timedEventVector.pop_back();
-        }
-    }
-}
-
-unsigned long Thread::GetCurrentTimeMiliseconds() const
-{
-    timeval tv;
-    gettimeofday(&tv, NULL);
-    return static_cast<unsigned long>(tv.tv_sec) * 1000 +
-           static_cast<unsigned long>(tv.tv_usec) / 1000;
-}
-
-int Thread::Exec()
-{
-    LogDebug("Executing thread event processing");
-
-    const std::size_t MIN_HANDLE_LIST_SIZE = 4;
-
-    // Start processing of events
-    WaitableHandleListEx handleList;
-
-    // index 0: Quit waitable event handle
-    handleList.push_back(std::make_pair(m_quitEvent.GetHandle(), WaitMode::Read));
-
-    // index 1: Event occurred event handle
-    handleList.push_back(std::make_pair(m_eventInvoker.GetHandle(),
-                                        WaitMode::Read));
-
-    // index 2: Timed event occurred event handle
-    handleList.push_back(std::make_pair(m_timedEventInvoker.GetHandle(),
-                                        WaitMode::Read));
-
-    // index 3: Waitable handle watch support invoker
-    handleList.push_back(std::make_pair(WaitableHandleWatchSupport::
-                                            WaitableInvokerHandle(),
-                                        WaitMode::Read));
-
-    //
-    // Watch list might have been initialized before threaded started
-    // Need to fill waitable event watch list in this case
-    //
-    {
-        WaitableHandleListEx waitableHandleWatchHandles =
-            WaitableHandleWatchSupport::WaitableWatcherHandles();
-        std::copy(
-            waitableHandleWatchHandles.begin(),
-            waitableHandleWatchHandles.end(), std::back_inserter(handleList));
-    }
-
-    // Quit flag
-    bool quit = false;
-
-    while (!quit) {
-        // Retrieve minimum wait time, according to timed events list
-        unsigned long minimumWaitTime;
-
-        // Critical section on timed events mutex
-        {
-            std::lock_guard<std::mutex> lock(m_timedEventMutex);
-
-            if (!m_timedEventVector.empty()) {
-                unsigned long currentTimeMiliseconds =
-                    GetCurrentTimeMiliseconds();
-                unsigned long destinationTimeMiliseconds =
-                    m_timedEventVector.begin()->registerTimeMiliseconds +
-                    m_timedEventVector.begin()->dueTimeMiliseconds;
-
-                // Are we already late with timed event ?
-                if (currentTimeMiliseconds > destinationTimeMiliseconds) {
-                    minimumWaitTime = 0;
-                } else {
-                    minimumWaitTime = destinationTimeMiliseconds -
-                        currentTimeMiliseconds;
-                }
-            } else {
-                minimumWaitTime = 0xFFFFFFFF; // Infinity
-            }
-        }
-
-        // Info
-        LogDebug("Thread loop minimum wait time: " << minimumWaitTime << " ms");
-
-        // Do thread waiting
-        WaitableHandleIndexList waitableHandleIndexList =
-            WaitForMultipleHandles(handleList, minimumWaitTime);
-
-        if (waitableHandleIndexList.empty()) {
-            // Timeout occurred. Process timed events.
-            LogDebug("Timed event list elapsed invoker");
-            ProcessTimedEvents();
-            continue;
-        }
-
-        // Go through each index
-        for (WaitableHandleIndexList::const_iterator
-             waitableHandleIndexIterator = waitableHandleIndexList.begin();
-             waitableHandleIndexIterator != waitableHandleIndexList.end();
-             ++waitableHandleIndexIterator)
-        {
-            size_t index = *waitableHandleIndexIterator;
-
-            LogDebug("Event loop triggered with index: " << index);
-
-            switch (index) {
-            case 0:
-                // Quit waitable event handle
-                quit = true;
-                break;
-
-            case 1:
-                // Event occurred event handle
-                ProcessEvents();
-
-                // Handle direct invoker
-                if (m_directInvoke) {
-                    m_directInvoke = false;
-
-                    LogDebug("Handling direct invoker");
-
-                    // Update list
-                    while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
-                        handleList.pop_back();
-                    }
-
-                    // Insert current waitable event handles instead
-                    {
-                        WaitableHandleListEx waitableHandleWatchHandles =
-                            WaitableHandleWatchSupport::WaitableWatcherHandles();
-                        std::copy(
-                            waitableHandleWatchHandles.begin(),
-                            waitableHandleWatchHandles.end(),
-                            std::back_inserter(handleList));
-                    }
-                }
-
-                // Done
-                break;
-
-            case 2:
-                // Timed event list changed
-                LogDebug("Timed event list changed invoker");
-                ProcessTimedEvents();
-
-                // Reset timed event invoker
-                m_timedEventInvoker.Reset();
-
-                // Done
-                break;
-
-            case 3:
-                // Waitable handle watch support invoker
-                LogDebug("Waitable handle watch invoker event occurred");
-
-                // First, remove all previous handles
-                while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
-                    handleList.pop_back();
-                }
-
-                // Insert current waitable event handles instead
-                {
-                    WaitableHandleListEx waitableHandleWatchHandles =
-                        WaitableHandleWatchSupport::WaitableWatcherHandles();
-                    std::copy(
-                        waitableHandleWatchHandles.begin(),
-                        waitableHandleWatchHandles.end(),
-                        std::back_inserter(handleList));
-                }
-
-                // Handle invoker in waitable watch support
-                WaitableHandleWatchSupport::InvokerFinished();
-
-                LogDebug("Waitable handle watch invoker event handled");
-
-                // Done
-                break;
-
-            default:
-                // Waitable event watch list
-                LogDebug("Waitable handle watch event occurred");
-
-                // Handle event in waitable handle watch
-                {
-                    std::pair<WaitableHandle,
-                              WaitMode::Type> handle = handleList[index];
-                    WaitableHandleWatchSupport::HandleWatcher(handle.first,
-                                                              handle.second);
-                }
-
-                if (m_directInvoke) {
-                    m_directInvoke = false;
-
-                    LogDebug("Handling direct invoker");
-
-                    // Update list
-                    while (handleList.size() > MIN_HANDLE_LIST_SIZE) {
-                        handleList.pop_back();
-                    }
-
-                    // Insert current waitable event handles instead
-                    {
-                        WaitableHandleListEx waitableHandleWatchHandles =
-                            WaitableHandleWatchSupport::
-                                WaitableWatcherHandles();
-                        std::copy(waitableHandleWatchHandles.begin(),
-                                  waitableHandleWatchHandles.end(),
-                                  std::back_inserter(handleList));
-                    }
-                }
-
-                LogDebug("Waitable handle watch event handled");
-
-                // Done
-                break;
-            }
-        }
-    }
-
-    LogDebug("Leaving thread event processing");
-    return 0;
-}
-
-void Thread::Run()
-{
-    LogDebug("Running thread");
-
-    // Critical section
-    {
-        std::lock_guard<std::mutex> lock(m_stateMutex);
-
-        if (m_running) {
-            return;
-        }
-
-        try{
-            m_thread = std::thread(StaticThreadEntry,this);
-        }catch(std::system_error e){
-            Throw(Exception::RunFailed);
-        }
-
-        // At default, we abandon thread
-        m_abandon = true;
-
-        // Enter running state
-        m_running = true;
-    }
-
-    LogDebug("Thread run");
-}
-
-void Thread::Quit()
-{
-    // Critical section
-    {
-        std::lock_guard<std::mutex> lock(m_stateMutex);
-
-        // Is thread running ?
-        if (!m_running) {
-            return;
-        }
-
-        LogDebug("Quitting thread...");
-
-        // Do not abandon thread, we will join
-        m_abandon = false;
-
-        // Singal quit waitable event
-        m_quitEvent.Signal();
-    }
-
-    try{
-        m_thread.join();
-    }catch(std::system_error e){
-        Throw(Exception::QuitFailed);
-    }
-
-    LogDebug("Thread quit");
-}
-
-void Thread::PushEvent(void *event,
-                       EventDispatchProc eventDispatchProc,
-                       EventDeleteProc eventDeleteProc,
-                       void *userParam)
-{
-    // Enter event list critical section
-    std::lock_guard<std::mutex> lock(m_eventMutex);
-
-    // Push new event
-    m_eventList.push_back(InternalEvent(event, userParam, eventDispatchProc,
-                                        eventDeleteProc));
-
-    // Trigger invoker
-    m_eventInvoker.Signal();
-
-    LogDebug("Event pushed and invoker signaled");
-}
-
-void Thread::PushTimedEvent(void *event,
-                            double dueTimeSeconds,
-                            EventDispatchProc eventDispatchProc,
-                            EventDeleteProc eventDeleteProc,
-                            void *userParam)
-{
-    // Check for developer errors
-    Assert(dueTimeSeconds >= 0.0);
-
-    // Enter timed event list critical section
-    std::lock_guard<std::mutex> lock(m_timedEventMutex);
-
-    // Get current time
-    unsigned long currentTimeMiliseconds = GetCurrentTimeMiliseconds();
-
-    // Convert to miliseconds
-    unsigned long dueTimeMiliseconds =
-        static_cast<unsigned long>(1000.0 * dueTimeSeconds);
-
-    // Push new timed event
-    m_timedEventVector.push_back(InternalTimedEvent(event, userParam,
-                                                    dueTimeMiliseconds,
-                                                    currentTimeMiliseconds,
-                                                    eventDispatchProc,
-                                                    eventDeleteProc));
-
-    // Heapify timed events
-    std::make_heap(m_timedEventVector.begin(), m_timedEventVector.end());
-
-    // Trigger invoker
-    m_timedEventInvoker.Signal();
-
-    LogDebug("Timed event pushed and invoker signaled: "
-        "due time: " << dueTimeMiliseconds << " ms, absolute due time: " <<
-        (currentTimeMiliseconds + dueTimeMiliseconds) << " ms");
-}
-
-Thread *Thread::GetInvokerThread()
-{
-    return this;
-}
-
-void Thread::HandleDirectInvoker()
-{
-    // We must be in ProcessEvents call stack
-    // Mark that situation to handle direct invoker
-    m_directInvoke = true;
-}
-
-void Thread::Sleep(uint64_t seconds)
-{
-    NanoSleep(seconds * NANOSECONDS_PER_SECOND);
-}
-
-void Thread::MiliSleep(uint64_t miliseconds)
-{
-    NanoSleep(miliseconds * NANOSECONDS_PER_MILISECOND);
-}
-
-void Thread::MicroSleep(uint64_t microseconds)
-{
-    NanoSleep(microseconds * NANOSECONDS_PER_MICROSECOND);
-}
-
-void Thread::NanoSleep(uint64_t nanoseconds)
-{
-    timespec requestedTime = {
-        static_cast<time_t>(
-            nanoseconds / NANOSECONDS_PER_SECOND),
-
-        static_cast<long>(
-            nanoseconds % NANOSECONDS_PER_SECOND)
-    };
-
-    timespec remainingTime;
-
-    for (;;) {
-        if (nanosleep(&requestedTime, &remainingTime) == 0) {
-            break;
-        }
-
-        int error = errno;
-        Assert(error == EINTR);
-
-        requestedTime = remainingTime;
-    }
-}
-} // namespace VcoreDPL
diff --git a/vcore/src/dpl/core/src/waitable_event.cpp b/vcore/src/dpl/core/src/waitable_event.cpp
deleted file mode 100644 (file)
index 8ff1417..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        waitable_event.cpp
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of waitable event
- */
-#include <stddef.h>
-#include <dpl/waitable_event.h>
-#include <sys/select.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <errno.h>
-
-namespace VcoreDPL {
-WaitableEvent::WaitableEvent()
-{
-    if (pipe(m_pipe) == -1) {
-        Throw(Exception::CreateFailed);
-    }
-
-    if (fcntl(m_pipe[0], F_SETFL, O_NONBLOCK |
-              fcntl(m_pipe[0], F_GETFL)) == -1)
-    {
-        Throw(Exception::CreateFailed);
-    }
-}
-
-WaitableEvent::~WaitableEvent()
-{
-    if (TEMP_FAILURE_RETRY(close(m_pipe[0])) == -1) {
-        Throw(Exception::DestroyFailed);
-    }
-
-    if (TEMP_FAILURE_RETRY(close(m_pipe[1])) == -1) {
-        Throw(Exception::DestroyFailed);
-    }
-}
-
-WaitableHandle WaitableEvent::GetHandle() const
-{
-    return m_pipe[0];
-}
-
-void WaitableEvent::Signal() const
-{
-    char data = 0;
-
-    if (TEMP_FAILURE_RETRY(write(m_pipe[1], &data, 1)) != 1) {
-        Throw(Exception::SignalFailed);
-    }
-}
-
-void WaitableEvent::Reset() const
-{
-    char data;
-
-    if (TEMP_FAILURE_RETRY(read(m_pipe[0], &data, 1)) != 1) {
-        Throw(Exception::ResetFailed);
-    }
-}
-} // namespace VcoreDPL
diff --git a/vcore/src/dpl/core/src/waitable_handle.cpp b/vcore/src/dpl/core/src/waitable_handle.cpp
deleted file mode 100644 (file)
index 58d0a35..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        waitable_handle.cpp
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of waitable handle
- */
-#include <stddef.h>
-#include <dpl/waitable_event.h>
-#include <dpl/workaround.h>
-#include <sys/select.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <dpl/assert.h>
-
-namespace VcoreDPL {
-namespace // anonymous
-{
-void CheckWaitableHandle(WaitableHandle handle)
-{
-#ifdef DPL_ENABLE_WAITABLE_HANDLE_BADF_CHECK
-    // Try to get descriptor flags
-    int result = fcntl(handle, F_GETFL);
-
-    if (result == -1 && errno == EBADF) {
-        AssertMsg(0, "CheckWaitableHandle: Invalid WaitableHandle! (EBADF)");
-    }
-
-    AssertMsg(result != -1, "CheckWaitableHandle: Invalid WaitableHandle!");
-#endif // DPL_ENABLE_WAITABLE_HANDLE_BADF_CHECK
-}
-} // namespace anonymous
-
-WaitableHandleIndexList WaitForSingleHandle(WaitableHandle handle,
-                                            unsigned long miliseconds)
-{
-    WaitableHandleList waitHandles;
-    waitHandles.push_back(handle);
-    return WaitForMultipleHandles(waitHandles, miliseconds);
-}
-
-WaitableHandleIndexList WaitForSingleHandle(WaitableHandle handle,
-                                            WaitMode::Type mode,
-                                            unsigned long miliseconds)
-{
-    WaitableHandleListEx waitHandles;
-    waitHandles.push_back(std::make_pair(handle, mode));
-    return WaitForMultipleHandles(waitHandles, miliseconds);
-}
-
-WaitableHandleIndexList WaitForMultipleHandles(
-    const WaitableHandleList &waitableHandleList,
-    unsigned long miliseconds)
-{
-    WaitableHandleListEx handleList;
-
-    for (WaitableHandleList::const_iterator iterator = waitableHandleList.begin();
-         iterator != waitableHandleList.end();
-         ++iterator)
-    {
-        // Wait for multiple objects
-        handleList.push_back(std::make_pair(*iterator, WaitMode::Read));
-    }
-
-    // Do waiting
-    return WaitForMultipleHandles(handleList, miliseconds);
-}
-
-WaitableHandleIndexList WaitForMultipleHandles(
-    const WaitableHandleListEx &waitableHandleListEx,
-    unsigned long miliseconds)
-{
-    fd_set readFds, writeFds, errorFds;
-
-    // Fill sets
-    int maxFd = -1;
-
-    FD_ZERO(&readFds);
-    FD_ZERO(&writeFds);
-    FD_ZERO(&errorFds);
-
-    // Add read wait handles
-    for (WaitableHandleListEx::const_iterator iterator =
-             waitableHandleListEx.begin();
-         iterator != waitableHandleListEx.end();
-         ++iterator)
-    {
-        if (iterator->first > maxFd) {
-            maxFd = iterator->first;
-        }
-
-        CheckWaitableHandle(iterator->first);
-
-        // Handle errors along with read and write events
-        FD_SET(iterator->first, &errorFds);
-
-        if (iterator->second == WaitMode::Read) {
-            FD_SET(iterator->first, &readFds);
-        } else if (iterator->second == WaitMode::Write) {
-            FD_SET(iterator->first, &writeFds);
-        }
-    }
-
-    // Do select
-    timeval timeout;
-    timeval *effectiveTimeout = NULL;
-    if (miliseconds != 0xFFFFFFFF) {
-        timeout.tv_sec = miliseconds / 1000;
-        timeout.tv_usec = (miliseconds % 1000) * 1000;
-        effectiveTimeout = &timeout;
-    }
-
-    if (TEMP_FAILURE_RETRY(select(maxFd + 1, &readFds, &writeFds, &errorFds,
-                                  effectiveTimeout)) == -1)
-    {
-        Throw(WaitFailed);
-    }
-
-    // Check results
-    WaitableHandleIndexList indexes;
-    size_t index = 0;
-
-    for (WaitableHandleListEx::const_iterator iterator =
-             waitableHandleListEx.begin();
-         iterator != waitableHandleListEx.end();
-         ++iterator)
-    {
-        // Always return errors, no matter what type of listening is set
-        if (FD_ISSET(iterator->first, &errorFds)) {
-            indexes.push_back(index);
-        } else if (iterator->second == WaitMode::Read) {
-            if (FD_ISSET(iterator->first, &readFds)) {
-                indexes.push_back(index);
-            }
-        } else if (iterator->second == WaitMode::Write) {
-            if (FD_ISSET(iterator->first, &writeFds)) {
-                indexes.push_back(index);
-            }
-        }
-        ++index;
-    }
-
-    // Successfuly awaited some events or timeout occurred
-    return indexes;
-}
-} // namespace VcoreDPL
diff --git a/vcore/src/dpl/core/src/waitable_handle_watch_support.cpp b/vcore/src/dpl/core/src/waitable_handle_watch_support.cpp
deleted file mode 100644 (file)
index b7b2644..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        waitable_handle_watch_support.cpp
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of waitable handle watch
- * support
- */
-#include <stddef.h>
-#include <dpl/waitable_handle_watch_support.h>
-#include <dpl/thread.h>
-#include <dpl/log/log.h>
-#include <algorithm>
-#include <dpl/assert.h>
-
-namespace VcoreDPL {
-WaitableHandleWatchSupport::WaitableHandleWatchSupport()
-{}
-
-WaitableHandleWatchSupport::~WaitableHandleWatchSupport()
-{
-    // Developer assertions
-    if (!m_watchersMap.empty()) {
-        LogWarning("### Leaked watchers map dump ###");
-
-        for (WaitableHandleWatchersMap::const_iterator iterator =
-                 m_watchersMap.begin();
-             iterator != m_watchersMap.end();
-             ++iterator)
-        {
-            LogWarning("###   Waitable handle: " << iterator->first);
-
-            LogWarning("###     Read listeners: " << iterator->second.readListenersCount);
-            LogWarning("###     Write listeners: " << iterator->second.writeListenersCount);
-
-            for (WaitableHandleListenerList::const_iterator listenersIterator =
-                     iterator->second.listeners.begin();
-                 listenersIterator != iterator->second.listeners.end();
-                 ++listenersIterator)
-            {
-                LogWarning("###       Mode: " << listenersIterator->mode
-                    << ". Listener: " << listenersIterator->listener);
-            }
-        }
-    }
-}
-
-WaitableHandle WaitableHandleWatchSupport::WaitableInvokerHandle() const
-{
-    return m_watchersInvoker.GetHandle();
-}
-
-WaitableHandleListEx WaitableHandleWatchSupport::WaitableWatcherHandles() const
-{
-    // Critical section
-    {
-        std::lock_guard<std::recursive_mutex> lock(m_watchersMutex);
-
-        WaitableHandleListEx handleList;
-
-        for (WaitableHandleWatchersMap::const_iterator iterator =
-                 m_watchersMap.begin();
-             iterator != m_watchersMap.end();
-             ++iterator)
-        {
-            // Register waitable event id for wait
-            // Check if there are any read listeners and write listeners
-            // and register for both if applicable
-            if (iterator->second.readListenersCount > 0) {
-                handleList.push_back(std::make_pair(iterator->first,
-                                                    WaitMode::Read));
-            }
-
-            if (iterator->second.writeListenersCount > 0) {
-                handleList.push_back(std::make_pair(iterator->first,
-                                                    WaitMode::Write));
-            }
-        }
-
-        return handleList;
-    }
-}
-
-void WaitableHandleWatchSupport::InvokerFinished()
-{
-    LogDebug("Invoker finished called");
-
-    // Reset invoker
-    m_watchersInvoker.Reset();
-
-    // Commit invoke
-    m_watchersInvokerCommit.Signal();
-}
-
-void WaitableHandleWatchSupport::HandleWatcher(WaitableHandle waitableHandle,
-                                               WaitMode::Type mode)
-{
-    //
-    // Waitable event occurred
-    // Now call all listeners for that waitable event. It is possible
-    // that some of listeners early disappeared. This is not a problem.
-    // Warning: Listeners and/or watcher may also disappear during dispatching
-    // handlers!
-    //
-    LogDebug("Waitable event occurred");
-
-    // Critical section for other threads
-    {
-        std::lock_guard<std::recursive_mutex> lock(m_watchersMutex);
-
-        // Notice: We must carefully call watchers here as they may disappear
-        // (zero listeners) or be created during each of handler call
-        //         All removed listeners are handled correctly. Adding
-        // additional listener to the same waitable handle
-        //         during handler dispatch sequence is _not_ supported.
-        WaitableHandleWatchersMap trackedWatchers = m_watchersMap;
-
-        for (WaitableHandleWatchersMap::const_iterator trackedWatchersIterator
-                 = trackedWatchers.begin();
-             trackedWatchersIterator != trackedWatchers.end();
-             ++trackedWatchersIterator)
-        {
-            // Check if this watcher still exists
-            // If not, go to next tracked watcher
-            if (m_watchersMap.find(trackedWatchersIterator->first) ==
-                m_watchersMap.end())
-            {
-                LogDebug("Watcher disappeared during watcher handler");
-                continue;
-            }
-
-            // Is this is a waitable handle that we are searching for ?
-            if (waitableHandle != trackedWatchersIterator->first) {
-                continue;
-            }
-
-            // Track watcher listeners list
-            WaitableHandleListenerList trackedListeners =
-                trackedWatchersIterator->second.listeners;
-
-            LogDebug("Calling waitable event listeners (" << trackedListeners.size() << ")...");
-
-            // Notice: We must carefully call listeners here as they may
-            // disappear or be created during each of handler call
-            //         All removed listeners are handled correctly. Adding
-            // additional listener to the same waitable handle
-            //         during handler dispatch sequence is should be also
-            // handled, as an extremly case.
-
-            // Call all waitable event listeners who listen for that event
-            for (WaitableHandleListenerList::const_iterator
-                 trackedListenersIterator = trackedListeners.begin();
-                 trackedListenersIterator != trackedListeners.end();
-                 ++trackedListenersIterator)
-            {
-                // Check if this watcher still exists
-                // If not, there cannot be another one. Must exit now (after
-                // break, we actually exit)
-                if (m_watchersMap.find(trackedWatchersIterator->first) ==
-                    m_watchersMap.end())
-                {
-                    LogDebug("Watcher disappeared during watcher handler");
-                    break;
-                }
-
-                // Check if this watcher listener still exists
-                // If not, go to next tracked watcher listener
-                bool listenerStillExists = false;
-
-                for (WaitableHandleListenerList::const_iterator
-                     searchListenerIterator =
-                         trackedWatchersIterator->second.listeners.begin();
-                     searchListenerIterator !=
-                     trackedWatchersIterator->second.listeners.end();
-                     ++searchListenerIterator)
-                {
-                    if (searchListenerIterator->listener ==
-                        trackedListenersIterator->listener &&
-                        searchListenerIterator->mode ==
-                        trackedListenersIterator->mode)
-                    {
-                        listenerStillExists = true;
-                        break;
-                    }
-                }
-
-                if (!listenerStillExists) {
-                    LogDebug("Watcher listener disappeared during watcher handler");
-                    break;
-                }
-
-                // Is this is a listener mode that we are searching for ?
-                if (mode != trackedListenersIterator->mode) {
-                    continue;
-                }
-
-                // Call waitable event watch listener
-                LogDebug("Before tracker listener call...");
-                trackedListenersIterator->listener->OnWaitableHandleEvent(
-                    trackedWatchersIterator->first,
-                    trackedListenersIterator->mode);
-                LogDebug("After tracker listener call...");
-            }
-
-            // Now call all those listeners who registered during listener calls
-            // FIXME: Implement! Notice, that scenario may be recursive!
-
-            LogDebug("Waitable event listeners called");
-
-            // No more waitable events possible - consistency check
-            break;
-        }
-    }
-}
-
-void WaitableHandleWatchSupport::AddWaitableHandleWatch(
-    WaitableHandleListener* listener,
-    WaitableHandle waitableHandle,
-    WaitMode::Type mode)
-{
-    // Enter waitable event list critical section
-    std::lock_guard<std::recursive_mutex> lock(m_watchersMutex);
-
-    // Find proper list to register into
-    WaitableHandleWatchersMap::iterator mapIterator = m_watchersMap.find(
-            waitableHandle);
-
-    if (mapIterator != m_watchersMap.end()) {
-        // Assert if there is no such listener already that is listening in this
-        // mode
-        for (WaitableHandleListenerList::iterator listenersIterator =
-                 mapIterator->second.listeners.begin();
-             listenersIterator != mapIterator->second.listeners.end();
-             ++listenersIterator)
-        {
-            // Must not insert same listener-mode pair
-            Assert(
-                listenersIterator->listener != listener ||
-                listenersIterator->mode != mode);
-        }
-    }
-
-    LogDebug("Adding waitable handle watch : " << waitableHandle);
-
-    // Push new waitable event watch
-    if (mapIterator != m_watchersMap.end()) {
-        mapIterator->second.listeners.push_back(WaitableHandleWatcher(listener,
-                                                                      mode));
-    } else {
-        m_watchersMap[waitableHandle].listeners.push_back(WaitableHandleWatcher(
-                                                              listener, mode));
-    }
-
-    // Update counters
-    switch (mode) {
-    case WaitMode::Read:
-        m_watchersMap[waitableHandle].readListenersCount++;
-        break;
-
-    case WaitMode::Write:
-        m_watchersMap[waitableHandle].writeListenersCount++;
-        break;
-
-    default:
-        Assert(0);
-    }
-
-    // Trigger waitable event invoker to commit changes
-    CommitInvoker();
-
-    LogDebug("Waitable event watch added and invoker signaled");
-}
-
-void WaitableHandleWatchSupport::RemoveWaitableHandleWatch(
-    WaitableHandleListener *listener,
-    WaitableHandle waitableHandle,
-    WaitMode::Type mode)
-{
-    // Enter waitable event list critical section
-    std::lock_guard<std::recursive_mutex> lock(m_watchersMutex);
-
-    // Find proper list with listener
-    WaitableHandleWatchersMap::iterator mapIterator = m_watchersMap.find(
-            waitableHandle);
-
-    Assert(mapIterator != m_watchersMap.end());
-
-    // Assert if there is such listener and mode
-    WaitableHandleListenerList::iterator listIterator =
-        mapIterator->second.listeners.end();
-
-    for (WaitableHandleListenerList::iterator listenersIterator =
-             mapIterator->second.listeners.begin();
-         listenersIterator != mapIterator->second.listeners.end();
-         ++listenersIterator)
-    {
-        // Check same pair listener-mode
-        if (listenersIterator->listener == listener &&
-            listenersIterator->mode == mode)
-        {
-            listIterator = listenersIterator;
-            break;
-        }
-    }
-
-    // Same pair listener-mode must exist
-    Assert(listIterator != mapIterator->second.listeners.end());
-
-    LogDebug("Removing waitable handle watch : " << waitableHandle);
-
-    // Remove waitable event watch
-    mapIterator->second.listeners.erase(listIterator);
-
-    // Update counters
-    switch (mode) {
-    case WaitMode::Read:
-        mapIterator->second.readListenersCount--;
-        break;
-
-    case WaitMode::Write:
-        mapIterator->second.writeListenersCount--;
-        break;
-
-    default:
-        Assert(0);
-    }
-
-    // If list is empty, remove it too
-    if (mapIterator->second.listeners.empty()) {
-        m_watchersMap.erase(mapIterator);
-    }
-
-    // Trigger waitable event invoker to commit changes
-    CommitInvoker();
-
-    LogDebug("Waitable event watch removed and invoker signaled");
-}
-
-void WaitableHandleWatchSupport::CommitInvoker()
-{
-    // Check calling context and execute invoker
-    if (Thread::GetCurrentThread() == GetInvokerThread()) {
-        LogDebug("Calling direct invoker");
-
-        // Direct invoker call
-        HandleDirectInvoker();
-    } else {
-        LogDebug("Calling indirect invoker");
-
-        // Indirect invoker call
-        m_watchersInvoker.Signal();
-
-        WaitableHandleList waitHandles;
-        waitHandles.push_back(m_watchersInvokerCommit.GetHandle());
-        WaitForMultipleHandles(waitHandles);
-
-        m_watchersInvokerCommit.Reset();
-    }
-}
-
-} // namespace VcoreDPL
diff --git a/vcore/src/dpl/db/include/dpl/db/naive_synchronization_object.h b/vcore/src/dpl/db/include/dpl/db/naive_synchronization_object.h
deleted file mode 100644 (file)
index d774ce0..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        naive_synchronization_object.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of SQL naive
- * synchronization object
- */
-#ifndef DPL_NAIVE_SYNCHRONIZATION_OBJECT_H
-#define DPL_NAIVE_SYNCHRONIZATION_OBJECT_H
-
-#include <dpl/db/sql_connection.h>
-
-namespace VcoreDPL {
-namespace DB {
-/**
- * Naive synchronization object used to synchronize SQL connection
- * to the same database across different threads and processes
- */
-class NaiveSynchronizationObject :
-    public SqlConnection::SynchronizationObject
-{
-  public:
-    // [SqlConnection::SynchronizationObject]
-    virtual void Synchronize();
-    virtual void NotifyAll();
-};
-} // namespace DB
-} // namespace VcoreDPL
-
-#endif // DPL_NAIVE_SYNCHRONIZATION_OBJECT_H
diff --git a/vcore/src/dpl/db/include/dpl/db/orm.h b/vcore/src/dpl/db/include/dpl/db/orm.h
deleted file mode 100644 (file)
index 11df75f..0000000
+++ /dev/null
@@ -1,1117 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        orm.h
- * @author      Bartosz Janiak (b.janiak@samsung.com)
- * @version     1.0
- * @brief       DPL-ORM: Object-relational mapping for sqlite database, written on top of DPL.
- */
-
-#include <cstdlib>
-#include <cstdio>
-#include <string>
-#include <typeinfo>
-#include <utility>
-#include <set>
-#include <list>
-#include <memory>
-#include <boost/optional.hpp>
-
-#include <dpl/db/sql_connection.h>
-#include <dpl/db/orm_interface.h>
-#include <dpl/string.h>
-#include <dpl/type_list.h>
-#include <dpl/assert.h>
-#include <dpl/foreach.h>
-
-#ifndef DPL_ORM_H
-#define DPL_ORM_H
-
-namespace VcoreDPL {
-namespace DB {
-namespace ORM {
-
-//TODO move to type utils
-#define DPL_CHECK_TYPE_INSTANTIABILITY(type) \
-    { \
-        type _ignored_; \
-        (void)_ignored_; \
-    }
-
-#define DECLARE_COLUMN_TYPE_LIST() typedef VcoreDPL::TypeListDecl<
-#define SELECTED_COLUMN(table_name, column_name) table_name::column_name,
-#define DECLARE_COLUMN_TYPE_LIST_END(name) VcoreDPL::TypeListGuard>::Type name;
-
-typedef size_t ColumnIndex;
-typedef size_t ArgumentIndex;
-typedef boost::optional<VcoreDPL::String> OptionalString;
-typedef boost::optional<int> OptionalInteger;
-typedef VcoreDPL::DB::SqlConnection::DataCommand DataCommand;
-
-namespace RelationTypes {
-    extern const char Equal[];
-    extern const char LessThan[];
-    extern const char And[];
-    extern const char Or[];
-    extern const char Is[];
-    extern const char In[];
-    //TODO define more relation types
-}
-
-namespace DataCommandUtils {
-    //TODO move to VcoreDPL::DataCommand?
-    void BindArgument(DataCommand *command, ArgumentIndex index, int argument);
-    void BindArgument(DataCommand *command, ArgumentIndex index, const OptionalInteger& argument);
-    void BindArgument(DataCommand *command, ArgumentIndex index, const VcoreDPL::String& argument);
-    void BindArgument(DataCommand *command, ArgumentIndex index, const OptionalString& argument);
-}
-class __attribute__ ((visibility("hidden"))) Expression {
-public:
-    virtual ~Expression() {}
-    virtual std::string GetString() const = 0;
-    virtual ArgumentIndex BindTo(DataCommand *command, ArgumentIndex index) = 0;
-};
-
-typedef std::shared_ptr<Expression> ExpressionPtr;
-
-namespace OrderingUtils {
-
-template<typename CompoundType> inline std::string OrderByInternal()
-{
-    std::string order = OrderByInternal<typename CompoundType::Tail>();
-    if(!order.empty()) return CompoundType::Head::GetString() + ", " + order;
-    else return CompoundType::Head::GetString();
-}
-
-template<> inline std::string OrderByInternal<TypeListGuard>()
-{
-    return std::string();
-}
-
-}
-
-template<typename ColumnType>
-class __attribute__ ((visibility("hidden"))) OrderingExpression {
-protected:
-    static std::string GetSchemaAndName()
-    {
-        std::string statement;
-        statement += ColumnType::GetTableName();
-        statement += ".";
-        statement += ColumnType::GetColumnName();
-        statement += " ";
-        return statement;
-    }
-public:
-    virtual ~OrderingExpression() {}
-};
-
-template<const char* Operator, typename LeftExpression, typename RightExpression>
-class __attribute__ ((visibility("hidden"))) BinaryExpression : public Expression {
-protected:
-    LeftExpression  m_leftExpression;
-    RightExpression m_rightExpression;
-    bool            m_outerParenthesis;
-public:
-    BinaryExpression(const LeftExpression& leftExpression, const RightExpression& rightExpression, bool outerParenthesis = true) :
-        m_leftExpression(leftExpression),
-        m_rightExpression(rightExpression),
-        m_outerParenthesis(outerParenthesis)
-    {}
-
-    virtual std::string GetString() const
-    {
-        return  (m_outerParenthesis ? "( " : " " ) +
-                 m_leftExpression.GetString() + " " + Operator + " " + m_rightExpression.GetString() +
-                (m_outerParenthesis ? " )" : " " ) ;
-    }
-
-    virtual ArgumentIndex BindTo(DataCommand *command, ArgumentIndex index)
-    {
-        index = m_leftExpression.BindTo(command, index);
-        return  m_rightExpression.BindTo(command, index);
-    }
-
-    template<typename TableDefinition>
-    struct ValidForTable {
-        typedef std::pair<typename LeftExpression ::template ValidForTable<TableDefinition>::Yes ,
-                          typename RightExpression::template ValidForTable<TableDefinition>::Yes >
-                Yes;
-    };
-};
-
-template<typename LeftExpression, typename RightExpression>
-BinaryExpression<RelationTypes::And, LeftExpression, RightExpression>
-    And(const LeftExpression& leftExpression, const RightExpression& rightExpression)
-{
-    return BinaryExpression<RelationTypes::And, LeftExpression, RightExpression>
-            (leftExpression, rightExpression);
-}
-
-template<typename LeftExpression, typename RightExpression>
-BinaryExpression<RelationTypes::Or, LeftExpression, RightExpression>
-    Or(const LeftExpression& leftExpression, const RightExpression& rightExpression)
-{
-    return BinaryExpression<RelationTypes::Or, LeftExpression, RightExpression>
-            (leftExpression, rightExpression);
-}
-
-template<typename ArgumentType>
-class __attribute__ ((visibility("hidden"))) ExpressionWithArgument : public Expression {
-protected:
-    ArgumentType argument;
-
-public:
-    explicit ExpressionWithArgument(const ArgumentType& _argument) : argument(_argument) {}
-
-    virtual ArgumentIndex BindTo(DataCommand *command, ArgumentIndex index)
-    {
-        DataCommandUtils::BindArgument(command, index, argument);
-        return index + 1;
-    }
-};
-
-template<typename ColumnData, const char* Relation>
-class __attribute__ ((visibility("hidden"))) Compare : public ExpressionWithArgument<typename ColumnData::ColumnType> {
-public:
-    explicit Compare(typename ColumnData::ColumnType column) :
-        ExpressionWithArgument<typename ColumnData::ColumnType>(column)
-    {}
-
-    virtual std::string GetString() const
-    {
-        std::string statement;
-        statement += ColumnData::GetTableName();
-        statement += ".";
-        statement += ColumnData::GetColumnName();
-        statement += " ";
-        statement += Relation;
-        statement += " ?";
-        return statement;
-    }
-
-    template<typename TableDefinition>
-    struct ValidForTable {
-        typedef typename TableDefinition::ColumnList::template Contains<ColumnData> Yes;
-    };
-};
-#define ORM_DEFINE_COMPARE_EXPRESSION(name, relationType)                      \
-    template<typename ColumnData>                                              \
-    class __attribute__ ((visibility("hidden"))) name : public Compare<ColumnData, RelationTypes::relationType> {     \
-    public:                                                                    \
-        name(typename ColumnData::ColumnType column) :                         \
-            Compare<ColumnData, RelationTypes::relationType>(column)           \
-        {}                                                                     \
-    };
-
-ORM_DEFINE_COMPARE_EXPRESSION(Equals, Equal)
-ORM_DEFINE_COMPARE_EXPRESSION(Is, Is)
-
-#define ORM_DEFINE_ORDERING_EXPRESSION(name, value)                                     \
-    template<typename ColumnType>                                                       \
-    class __attribute__ ((visibility("hidden"))) name                                   \
-        : OrderingExpression<ColumnType> {                                              \
-    public:                                                                             \
-        static std::string GetString()                                                  \
-        {                                                                               \
-            std::string statement = OrderingExpression<ColumnType>::GetSchemaAndName(); \
-            statement += value;                                                         \
-            return statement;                                                           \
-        }                                                                               \
-    };
-
-ORM_DEFINE_ORDERING_EXPRESSION(OrderingAscending, "ASC")
-ORM_DEFINE_ORDERING_EXPRESSION(OrderingDescending, "DESC")
-
-template<typename ColumnData1, typename ColumnData2>
-class __attribute__ ((visibility("hidden"))) CompareBinaryColumn {
-private:
-    std::string m_relation;
-public:
-    CompareBinaryColumn(const char* Relation) :
-      m_relation(Relation)
-    {}
-
-    virtual ~CompareBinaryColumn() {}
-
-    virtual std::string GetString() const
-    {
-        std::string statement;
-        statement += ColumnData1::GetTableName();
-        statement += ".";
-        statement += ColumnData1::GetColumnName();
-        statement += " ";
-        statement += m_relation;
-        statement += " ";
-        statement += ColumnData2::GetTableName();
-        statement += ".";
-        statement += ColumnData2::GetColumnName();
-
-        return statement;
-    }
-};
-
-template<typename ColumnData1, typename ColumnData2>
-CompareBinaryColumn<ColumnData1, ColumnData2>
-    Equal()
-{
-    return CompareBinaryColumn<ColumnData1, ColumnData2>(RelationTypes::Equal);
-}
-
-template<typename ColumnData, const char* Relation>
-class __attribute__ ((visibility("hidden"))) NumerousArguments : public Expression {
-protected:
-    std::set<typename ColumnData::ColumnType> m_argumentList;
-public:
-    NumerousArguments(const std::set<typename ColumnData::ColumnType>& argumentList) : m_argumentList(argumentList) {}
-
-    virtual std::string GetString() const
-    {
-        std::string statement;
-        statement += ColumnData::GetColumnName();
-        statement += " ";
-        statement += Relation;
-        statement += " ( ";
-
-        int argumentCount = m_argumentList.size();
-        while(argumentCount)
-        {
-            statement += "?";
-            argumentCount--;
-            if (argumentCount)
-            {
-                statement += ", ";
-            }
-        }
-
-        statement += " )";
-
-        return statement;
-    }
-
-    virtual ArgumentIndex BindTo(DataCommand *command, ArgumentIndex index)
-    {
-        ArgumentIndex argumentIndex = index;
-        FOREACH(argumentIt, m_argumentList)
-        {
-            DataCommandUtils::BindArgument(command, argumentIndex, *argumentIt);
-            argumentIndex++;
-        }
-        return  argumentIndex + 1;
-    }
-
-    template<typename TableDefinition>
-    struct ValidForTable {
-        typedef typename TableDefinition::ColumnList::template Contains<ColumnData> Yes;
-    };
-};
-
-#define ORM_DEFINE_COMPARE_EXPRESSION_NUMEROUS_ARGUMENTS(name, relationType)                      \
-    template<typename ColumnData>                                              \
-    class __attribute__ ((visibility("hidden"))) name : public NumerousArguments<ColumnData, RelationTypes::relationType> {     \
-    public:                                                                    \
-        name(std::set<typename ColumnData::ColumnType> column) :                         \
-            NumerousArguments<ColumnData, RelationTypes::relationType>(column)           \
-        {}                                                                     \
-    };
-
-ORM_DEFINE_COMPARE_EXPRESSION_NUMEROUS_ARGUMENTS(In, In)
-
-template<typename ColumnType>
-ColumnType GetColumnFromCommand(ColumnIndex columnIndex, DataCommand *command);
-
-class __attribute__ ((visibility("hidden"))) CustomColumnBase {
-public:
-    CustomColumnBase() {}
-    virtual ~CustomColumnBase() {}
-};
-
-template<typename ColumnType>
-class __attribute__ ((visibility("hidden"))) CustomColumn : public CustomColumnBase {
-private:
-    ColumnType m_columnData;
-
-public:
-    CustomColumn() {}
-    CustomColumn(ColumnType data)
-    {
-        m_columnData = data;
-    }
-
-    void SetColumnData(ColumnType data)
-    {
-        m_columnData = data;
-    }
-
-    ColumnType GetColumnData() const
-    {
-        return m_columnData;
-    }
-};
-
-template<typename ColumnList>
-class __attribute__ ((visibility("hidden"))) CustomRowUtil {
-public:
-    static void MakeColumnList(std::vector<CustomColumnBase*>& columnList)
-    {
-        typedef CustomColumn<typename ColumnList::Head::ColumnType> Type;
-        Type* pColumn = new Type();
-        columnList.push_back(pColumn);
-        CustomRowUtil<typename ColumnList::Tail>::MakeColumnList(columnList);
-    }
-
-    static void CopyColumnList(const std::vector<CustomColumnBase*>& srcList, std::vector<CustomColumnBase*>& dstList)
-    {
-        CopyColumnList(srcList, dstList, 0);
-    }
-
-    static ColumnIndex GetColumnIndex(const std::string& columnName)
-    {
-        return GetColumnIndex(columnName, 0);
-    }
-
-private:
-    static void CopyColumnList(const std::vector<CustomColumnBase*>& srcList, std::vector<CustomColumnBase*>& dstList, ColumnIndex index)
-    {
-        typedef CustomColumn<typename ColumnList::Head::ColumnType> Type;
-        Type* pColumn = new Type(((Type*)(srcList.at(index)))->GetColumnData());
-        dstList.push_back(pColumn);
-        CustomRowUtil<typename ColumnList::Tail>::CopyColumnList(srcList, dstList, index + 1);
-    }
-
-    static ColumnIndex GetColumnIndex(const std::string& columnName, ColumnIndex index)
-    {
-        if (ColumnList::Head::GetColumnName() == columnName)
-            return index;
-
-        return CustomRowUtil<typename ColumnList::Tail>::GetColumnIndex(columnName, index + 1);
-    }
-
-template<typename Other>
-friend class CustomRowUtil;
-};
-
-template<>
-class __attribute__ ((visibility("hidden"))) CustomRowUtil<VcoreDPL::TypeListGuard> {
-public:
-    static void MakeColumnList(std::vector<CustomColumnBase*>&) {}
-private:
-    static void CopyColumnList(const std::vector<CustomColumnBase*>&, std::vector<CustomColumnBase*>&, ColumnIndex) {}
-    static ColumnIndex GetColumnIndex(const std::string&, ColumnIndex) { return -1; }
-
-template<typename Other>
-friend class CustomRowUtil;
-};
-
-template<typename ColumnList>
-class __attribute__ ((visibility("hidden"))) CustomRow {
-private:
-    std::vector<CustomColumnBase*> m_columns;
-
-public:
-    CustomRow()
-    {
-        CustomRowUtil<ColumnList>::MakeColumnList(m_columns);
-    }
-
-    CustomRow(const CustomRow& r)
-    {
-        CustomRowUtil<ColumnList>::CopyColumnList(r.m_columns, m_columns);
-    }
-
-    virtual ~CustomRow()
-    {
-        while (!m_columns.empty())
-        {
-            CustomColumnBase* pCustomColumn = m_columns.back();
-            m_columns.pop_back();
-            if (pCustomColumn)
-                delete pCustomColumn;
-        }
-    }
-
-    template<typename ColumnType>
-    void SetColumnData(ColumnIndex columnIndex, ColumnType data)
-    {
-        typedef CustomColumn<ColumnType> Type;
-        Assert(columnIndex < m_columns.size());
-        Type* pColumn = dynamic_cast<Type*>(m_columns.at(columnIndex));
-        Assert(pColumn);
-        pColumn->SetColumnData(data);
-    }
-
-    template<typename ColumnData>
-    typename ColumnData::ColumnType GetColumnData()
-    {
-        typedef CustomColumn<typename ColumnData::ColumnType> Type;
-        ColumnIndex index = CustomRowUtil<ColumnList>::GetColumnIndex(ColumnData::GetColumnName());
-        Assert(index < m_columns.size());
-        Type* pColumn = dynamic_cast<Type*>(m_columns.at(index));
-        Assert(pColumn);
-        return pColumn->GetColumnData();
-    }
-};
-
-template<typename CustomRow, typename ColumnType>
-void SetColumnData(CustomRow& row, ColumnType columnData, ColumnIndex columnIndex)
-{
-    row.SetColumnData<ColumnType>(columnIndex, columnData);
-}
-
-template<typename ColumnList, typename CustomRow>
-class  __attribute__ ((visibility("hidden"))) FillCustomRowUtil {
-public:
-    static void FillCustomRow(CustomRow& row, DataCommand* command)
-    {
-        FillCustomRow(row, 0, command);
-    }
-
-private:
-    static void FillCustomRow(CustomRow& row, ColumnIndex columnIndex, DataCommand* command)
-    {
-        typename ColumnList::Head::ColumnType columnData;
-        columnData = GetColumnFromCommand<typename ColumnList::Head::ColumnType>(columnIndex, command);
-        SetColumnData<CustomRow, typename ColumnList::Head::ColumnType>(row, columnData, columnIndex);
-        FillCustomRowUtil<typename ColumnList::Tail, CustomRow>::FillCustomRow(row, columnIndex + 1, command);
-    }
-
-template<typename Other, typename OtherRow>
-friend class FillCustomRowUtil;
-};
-
-template<typename CustomRow>
-class  __attribute__ ((visibility("hidden"))) FillCustomRowUtil<VcoreDPL::TypeListGuard, CustomRow> {
-private:
-    static void FillCustomRow(CustomRow&, ColumnIndex, DataCommand *)
-    { /* do nothing, we're past the last element of column list */ }
-
-template<typename Other, typename OtherRow>
-friend class FillCustomRowUtil;
-};
-
-template<typename ColumnList, typename Row>
-class  __attribute__ ((visibility("hidden"))) FillRowUtil {
-public:
-    static void FillRow(Row& row, DataCommand *command)
-    {
-        FillRow(row, 0, command);
-    }
-
-private:
-    static void FillRow(Row& row, ColumnIndex columnIndex, DataCommand *command)
-    {
-        typename ColumnList::Head::ColumnType rowField;
-        rowField = GetColumnFromCommand<typename ColumnList::Head::ColumnType>(columnIndex, command);
-        ColumnList::Head::SetRowField(row, rowField);
-        FillRowUtil<typename ColumnList::Tail, Row>::FillRow(row, columnIndex + 1, command);
-    }
-
-template<typename Other, typename OtherRow>
-friend class FillRowUtil;
-};
-
-template<typename Row>
-class  __attribute__ ((visibility("hidden"))) FillRowUtil<VcoreDPL::TypeListGuard, Row> {
-private:
-    static void FillRow(Row&, ColumnIndex, DataCommand *)
-    { /* do nothing, we're past the last element of column list */ }
-
-template<typename Other, typename OtherRow>
-friend class FillRowUtil;
-};
-
-template<typename ColumnList>
-class  __attribute__ ((visibility("hidden"))) JoinUtil {
-public:
-    static std::string GetColumnNames()
-    {
-        std::string result;
-        result = ColumnList::Head::GetTableName();
-        result += ".";
-        result += ColumnList::Head::GetColumnName();
-        if (ColumnList::Tail::Size > 0)
-            result += ", ";
-
-        return result += JoinUtil<typename ColumnList::Tail>::GetColumnNames();
-    }
-
-    static std::string GetJoinTableName(const std::string& tableName)
-    {
-        std::string joinTableName = ColumnList::Head::GetTableName();
-        if (tableName.find(joinTableName) == std::string::npos)
-            return joinTableName;
-
-        return JoinUtil<typename ColumnList::Tail>::GetJoinTableName(tableName);
-    }
-};
-
-template<>
-class  __attribute__ ((visibility("hidden"))) JoinUtil<VcoreDPL::TypeListGuard> {
-public:
-    static std::string GetColumnNames() { return ""; }
-    static std::string GetJoinTableName(std::string) { return ""; }
-};
-
-class Exception {
-public:
-    DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-    DECLARE_EXCEPTION_TYPE(Base, SelectReuseWithDifferentQuerySignature)
-    DECLARE_EXCEPTION_TYPE(Base, RowFieldNotInitialized)
-    DECLARE_EXCEPTION_TYPE(Base, EmptyUpdateStatement)
-};
-
-template<typename TableDefinition>
-class  __attribute__ ((visibility("hidden"))) Query
-{
-protected:
-    explicit Query(IOrmInterface* interface) :
-        m_interface(interface),
-        m_command(NULL)
-    {
-    }
-
-    virtual ~Query()
-    {
-        if (m_command == NULL)
-            return;
-
-        TableDefinition::FreeTableDataCommand(m_command, m_interface);
-    }
-
-    IOrmInterface* m_interface;
-    DataCommand *m_command;
-    std::string m_commandString;
-    ArgumentIndex m_bindArgumentIndex;
-};
-
-template<typename TableDefinition>
-class  __attribute__ ((visibility("hidden"))) QueryWithWhereClause : public Query<TableDefinition>
-{
-protected:
-    ExpressionPtr m_whereExpression;
-
-    void Prepare()
-    {
-        if ( !!m_whereExpression )
-        {
-            this->m_commandString += " WHERE ";
-            this->m_commandString += m_whereExpression->GetString();
-        }
-    }
-
-    void Bind()
-    {
-        if ( !!m_whereExpression )
-        {
-            this->m_bindArgumentIndex = m_whereExpression->BindTo(
-                this->m_command, this->m_bindArgumentIndex);
-        }
-    }
-
-public:
-    explicit QueryWithWhereClause(IOrmInterface* interface) :
-        Query<TableDefinition>(interface)
-    {
-    }
-
-    template<typename Expression>
-    void Where(const Expression& expression)
-    {
-        DPL_CHECK_TYPE_INSTANTIABILITY(typename Expression::template ValidForTable<TableDefinition>::Yes);
-        if ( !!m_whereExpression && ( typeid(Expression) != typeid(*m_whereExpression) ) )
-        {
-            std::ostringstream str;
-            str << "Current ORM implementation doesn't allow to reuse Select"
-                    " instance with different query signature (particularly "
-                    "WHERE on different column).\n";
-            str << "Query: ";
-            str << this->m_commandString;
-            ThrowMsg(Exception::SelectReuseWithDifferentQuerySignature,
-                str.str());
-        }
-        //TODO maybe don't make a copy here but just generate the string part of the query.
-        m_whereExpression.reset(new Expression(expression));
-    }
-
-};
-
-template<typename TableDefinition>
-class  __attribute__ ((visibility("hidden"))) Delete : public QueryWithWhereClause<TableDefinition>
-{
-protected:
-    void Prepare()
-    {
-        if ( !this->m_command)
-        {
-            this->m_commandString  = "DELETE FROM ";
-            this->m_commandString += TableDefinition::GetName();
-
-            QueryWithWhereClause<TableDefinition>::Prepare();
-
-            this->m_command = TableDefinition::AllocTableDataCommand(
-                    this->m_commandString.c_str(),
-                    Query<TableDefinition>::m_interface);
-            LogDebug("Prepared SQL command " << this->m_commandString);
-        }
-    }
-
-    void Bind()
-    {
-        this->m_bindArgumentIndex = 1;
-        QueryWithWhereClause<TableDefinition>::Bind();
-    }
-
-public:
-    explicit Delete(IOrmInterface *interface = NULL) :
-        QueryWithWhereClause<TableDefinition>(interface)
-    {
-    }
-
-    void Execute()
-    {
-        Prepare();
-        Bind();
-        this->m_command->Step();
-        this->m_command->Reset();
-    }
-};
-
-namespace {
-class BindVisitor {
-private:
-    DataCommand *m_command;
-public:
-    ArgumentIndex m_bindArgumentIndex;
-
-    BindVisitor(DataCommand *command) :
-        m_command(command),
-        m_bindArgumentIndex(1)
-    {}
-
-    template<typename ColumnType>
-    void Visit(const char*, const ColumnType& value, bool isSet)
-    {
-        if ( isSet )
-        {
-            DataCommandUtils::BindArgument(m_command, m_bindArgumentIndex, value);
-            m_bindArgumentIndex++;
-        }
-    }
-};
-} //anonymous namespace
-template<typename TableDefinition>
-class __attribute__ ((visibility("hidden"))) Insert : public Query<TableDefinition>
-{
-public:
-    typedef typename TableDefinition::Row Row;
-    typedef VcoreDPL::DB::SqlConnection::RowID RowID;
-
-protected:
-    boost::optional<std::string> m_orClause;
-    Row m_row;
-
-    class PrepareVisitor {
-    public:
-        std::string m_columnNames;
-        std::string m_values;
-
-        template<typename ColumnType>
-        void Visit(const char* name, const ColumnType&, bool isSet)
-        {
-            if ( isSet )
-            {
-                if ( !m_columnNames.empty() )
-                {
-                    m_columnNames += ", ";
-                    m_values += ", ";
-                }
-                m_columnNames += name;
-                m_values += "?";
-            }
-        }
-    };
-
-    void Prepare()
-    {
-        if ( !this->m_command )
-        {
-            this->m_commandString = "INSERT ";
-            if ( !!m_orClause )
-            {
-                this->m_commandString += " OR " + *m_orClause + " ";
-            }
-            this->m_commandString += "INTO ";
-            this->m_commandString += TableDefinition::GetName();
-
-            PrepareVisitor visitor;
-            m_row.VisitColumns(visitor);
-
-            this->m_commandString += " ( " + visitor.m_columnNames + " ) ";
-            this->m_commandString += "VALUES ( " + visitor.m_values + " )";
-
-            LogDebug("Prepared SQL command " << this->m_commandString);
-            this->m_command = TableDefinition::AllocTableDataCommand(
-                this->m_commandString.c_str(),
-                Query<TableDefinition>::m_interface);
-        }
-    }
-
-    void Bind()
-    {
-        BindVisitor visitor(this->m_command);
-        m_row.VisitColumns(visitor);
-    }
-
-public:
-    explicit Insert(
-            IOrmInterface* interface = NULL,
-            const boost::optional<std::string>& orClause = boost::optional<std::string>()) :
-        Query<TableDefinition>(interface),
-        m_orClause(orClause)
-    {
-    }
-
-    void Values(const Row& row)
-    {
-        if ( this->m_command )
-        {
-            if ( !row.IsSignatureMatching(m_row) )
-            {
-                ThrowMsg(Exception::SelectReuseWithDifferentQuerySignature,
-                    "Current ORM implementation doesn't allow to reuse Insert instance "
-                    "with different query signature.");
-            }
-        }
-        m_row = row;
-    }
-
-    RowID Execute()
-    {
-        Prepare();
-        Bind();
-        this->m_command->Step();
-
-        RowID result = TableDefinition::GetLastInsertRowID(
-            Query<TableDefinition>::m_interface);
-
-        this->m_command->Reset();
-        return result;
-    }
-};
-
-template<typename TableDefinition>
-class __attribute__ ((visibility("hidden"))) Select : public QueryWithWhereClause<TableDefinition>
-{
-public:
-    typedef typename TableDefinition::ColumnList       ColumnList;
-    typedef typename TableDefinition::Row              Row;
-
-    typedef std::list<Row>                             RowList;
-protected:
-    boost::optional<std::string> m_orderBy;
-    std::string m_JoinClause;
-    bool                       m_distinctResults;
-
-    void Prepare(const char* selectColumnName)
-    {
-        if ( !this->m_command )
-        {
-            this->m_commandString  = "SELECT ";
-            if (m_distinctResults)
-                this->m_commandString += "DISTINCT ";
-            this->m_commandString += selectColumnName;
-            this->m_commandString += " FROM ";
-            this->m_commandString += TableDefinition::GetName();
-
-            this->m_commandString += m_JoinClause;
-
-            QueryWithWhereClause<TableDefinition>::Prepare();
-
-            if ( !!m_orderBy )
-            {
-                this->m_commandString += " ORDER BY " + *m_orderBy;
-            }
-
-            this->m_command = TableDefinition::AllocTableDataCommand(
-                this->m_commandString.c_str(),
-                Query<TableDefinition>::m_interface);
-
-            LogDebug("Prepared SQL command " << this->m_commandString);
-        }
-    }
-
-    void Bind()
-    {
-        this->m_bindArgumentIndex = 1;
-        QueryWithWhereClause<TableDefinition>::Bind();
-    }
-
-    template<typename ColumnType>
-    ColumnType GetColumn(ColumnIndex columnIndex)
-    {
-        return GetColumnFromCommand<ColumnType>(columnIndex, this->m_command);
-    }
-
-    Row GetRow()
-    {
-        Row row;
-        FillRowUtil<ColumnList, Row>::FillRow(row, this->m_command);
-        return row;
-    }
-
-    template<typename ColumnList, typename CustomRow>
-    CustomRow GetCustomRow()
-    {
-        CustomRow row;
-        FillCustomRowUtil<ColumnList, CustomRow>::FillCustomRow(row, this->m_command);
-        return row;
-    }
-
-public:
-
-    explicit Select(IOrmInterface *interface = NULL) :
-        QueryWithWhereClause<TableDefinition>(interface),
-        m_distinctResults(false)
-    {
-    }
-
-    void Distinct()
-    {
-        m_distinctResults = true;
-    }
-
-    template<typename CompoundType>
-    void OrderBy(const CompoundType&)
-    {
-        m_orderBy = OrderingUtils::OrderByInternal<typename CompoundType::Type>();
-    }
-
-    void OrderBy(const std::string & orderBy) //backward compatibility
-    {
-        m_orderBy = orderBy;
-    }
-
-    void OrderBy(const char * orderBy) //backward compatibility
-    {
-        m_orderBy = std::string(orderBy);
-    }
-
-    template<typename ColumnList, typename Expression>
-    void Join(const Expression& expression) {
-        std::string usedTableNames = TableDefinition::GetName();
-        if (!m_JoinClause.empty())
-            usedTableNames += m_JoinClause;
-
-        this->m_JoinClause += " JOIN ";
-        this->m_JoinClause += JoinUtil<ColumnList>::GetJoinTableName(usedTableNames);
-        this->m_JoinClause += " ON ";
-        this->m_JoinClause += expression.GetString();
-    }
-
-    template<typename ColumnData>
-    typename ColumnData::ColumnType GetSingleValue()
-    {
-        Prepare(ColumnData::GetColumnName());
-        Bind();
-        this->m_command->Step();
-
-        typename ColumnData::ColumnType result =
-            GetColumn<typename ColumnData::ColumnType>(0);
-
-        this->m_command->Reset();
-        return result;
-    }
-
-    //TODO return range - pair of custom iterators
-    template<typename ColumnData>
-    std::list<typename ColumnData::ColumnType> GetValueList()
-    {
-        Prepare(ColumnData::GetColumnName());
-        Bind();
-
-        std::list<typename ColumnData::ColumnType> resultList;
-
-        while (this->m_command->Step())
-            resultList.push_back(GetColumn<typename ColumnData::ColumnType>(0));
-
-        this->m_command->Reset();
-        return resultList;
-    }
-
-    Row GetSingleRow()
-    {
-        Prepare("*");
-        Bind();
-        this->m_command->Step();
-
-        Row result = GetRow();
-
-        this->m_command->Reset();
-        return result;
-    }
-
-    //TODO return range - pair of custom iterators
-    RowList GetRowList()
-    {
-        Prepare("*");
-        Bind();
-
-        RowList resultList;
-
-        while (this->m_command->Step())
-            resultList.push_back(GetRow());
-
-        this->m_command->Reset();
-        return resultList;
-    }
-
-    template<typename ColumnList, typename CustomRow>
-    CustomRow GetCustomSingleRow()
-    {
-        Prepare(JoinUtil<ColumnList>::GetColumnNames().c_str());
-        Bind();
-        this->m_command->Step();
-
-        CustomRow result = GetCustomRow<ColumnList, CustomRow>();
-
-        this->m_command->Reset();
-        return result;
-    }
-
-    template<typename ColumnList, typename CustomRow>
-    std::list<CustomRow> GetCustomRowList()
-    {
-        Prepare(JoinUtil<ColumnList>::GetColumnNames().c_str());
-        Bind();
-
-        std::list<CustomRow> resultList;
-
-        while (this->m_command->Step())
-            resultList.push_back(GetCustomRow<ColumnList, CustomRow>());
-
-        this->m_command->Reset();
-        return resultList;
-    }
-};
-
-template<typename TableDefinition>
-class __attribute__ ((visibility("hidden"))) Update : public QueryWithWhereClause<TableDefinition> {
-public:
-    typedef typename TableDefinition::Row Row;
-
-protected:
-    boost::optional<std::string> m_orClause;
-    Row m_row;
-
-    class PrepareVisitor {
-    public:
-        std::string m_setExpressions;
-
-        template<typename ColumnType>
-        void Visit(const char* name, const ColumnType&, bool isSet)
-        {
-            if ( isSet )
-            {
-                if ( !m_setExpressions.empty() )
-                {
-                    m_setExpressions += ", ";
-                }
-                m_setExpressions += name;
-                m_setExpressions += " = ";
-                m_setExpressions += "?";
-            }
-        }
-    };
-
-    void Prepare()
-    {
-        if ( !this->m_command )
-        {
-            this->m_commandString = "UPDATE ";
-            if ( !!m_orClause )
-            {
-                this->m_commandString += " OR " + *m_orClause + " ";
-            }
-            this->m_commandString += TableDefinition::GetName();
-            this->m_commandString += " SET ";
-
-            // got through row columns and values
-            PrepareVisitor visitor;
-            m_row.VisitColumns(visitor);
-
-            if(visitor.m_setExpressions.empty())
-            {
-                ThrowMsg(Exception::EmptyUpdateStatement, "No SET expressions in update statement");
-            }
-
-            this->m_commandString += visitor.m_setExpressions;
-
-            // where
-            QueryWithWhereClause<TableDefinition>::Prepare();
-
-            this->m_command = TableDefinition::AllocTableDataCommand(
-                    this->m_commandString.c_str(),
-                    Query<TableDefinition>::m_interface);
-            LogDebug("Prepared SQL command " << this->m_commandString);
-        }
-    }
-
-    void Bind()
-    {
-        BindVisitor visitor(this->m_command);
-        m_row.VisitColumns(visitor);
-
-        this->m_bindArgumentIndex = visitor.m_bindArgumentIndex;
-        QueryWithWhereClause<TableDefinition>::Bind();
-    }
-
-
-public:
-    explicit Update(IOrmInterface *interface = NULL,
-                    const boost::optional<std::string>& orClause = boost::optional<std::string>()) :
-        QueryWithWhereClause<TableDefinition>(interface),
-        m_orClause(orClause)
-    {
-    }
-
-    void Values(const Row& row)
-    {
-        if ( this->m_command )
-        {
-            if ( !row.IsSignatureMatching(m_row) )
-            {
-                ThrowMsg(Exception::SelectReuseWithDifferentQuerySignature,
-                    "Current ORM implementation doesn't allow to reuse Update instance "
-                    "with different query signature.");
-            }
-        }
-        m_row = row;
-    }
-
-    void Execute()
-    {
-        Prepare();
-        Bind();
-        this->m_command->Step();
-        this->m_command->Reset();
-    }
-};
-
-} //namespace ORM
-} //namespace DB
-} //namespace VcoreDPL
-
-#endif // DPL_ORM_H
diff --git a/vcore/src/dpl/db/include/dpl/db/orm_generator.h b/vcore/src/dpl/db/include/dpl/db/orm_generator.h
deleted file mode 100644 (file)
index dd1b0dd..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        orm_generator.h
- * @author      Bartosz Janiak (b.janiak@samsung.com)
- * @version     1.0
- * @brief       Macro definitions for generating the DPL-ORM table definitions from database definitions.
- */
-
-#ifndef ORM_GENERATOR_DATABASE_NAME
-#error You need to define database name in ORM_GENERATOR_DATABASE_NAME define before you include orm_generator.h file
-#endif
-
-#include <dpl/db/orm_interface.h>
-
-#define ORM_GENERATOR_DATABASE_NAME_LOCAL <ORM_GENERATOR_DATABASE_NAME>
-
-#ifdef DPL_ORM_GENERATOR_H
-#warning orm_generator.h is included multiply times. Make sure it has different ORM_GENERATOR_DATABASE_NAME set.
-#endif
-
-#define DPL_ORM_GENERATOR_H
-
-
-#include <boost/optional.hpp>
-#include <dpl/string.h>
-#include <dpl/type_list.h>
-#include <dpl/db/sql_connection.h>
-#include <dpl/db/orm.h>
-#include <dpl/assert.h>
-#include <string>
-
-/*
-
-This is true only when exactly one db is available.
-
-#if (defined DECLARE_COLUMN) || (defined INT) || (defined TINYINT) ||               \
-    (defined INTEGER) || (defined BIGINT) || defined(VARCHAR) || defined(TEXT) ||   \
-    (defined SQL) || (defined TABLE_CONSTRAINTS) || (defined OPTIONAL) ||           \
-    (defined DATABASE_START) || (defined DATABASE_END) || (defined CREATE_TABLE) || \
-    (defined COLUMN) || (defined COLUMN_NOT_NULL) || (defined CREATE_TABLE_END)
-
-#error  This file temporarily defines many macros with generic names. To avoid name clash please include \
-        this file as early as possible. If this is not possible please report this problem to DPL developers.
-
-#endif
-*/
-
-namespace VcoreDPL {
-namespace DB {
-namespace ORM {
-
-// Global macros
-
-#define STRINGIFY(s) _str(s)
-#define _str(s) #s
-#define DECLARE_COLUMN(FIELD, TYPE) \
-    struct FIELD { \
-        typedef TYPE ColumnType; \
-        static const char* GetTableName() { return GetName(); } \
-        static const char* GetColumnName() { return STRINGIFY(FIELD); } \
-        static void SetRowField(Row& row, const TYPE& _value) { row.Set_##FIELD(_value);} \
-    };
-
-#define INT         int
-#define TINYINT     int
-#define INTEGER     int  //TODO: should be long long?
-#define BIGINT      int  //TODO: should be long long?
-#define VARCHAR(x)  VcoreDPL::String
-#define TEXT        VcoreDPL::String
-
-#define SQL(...)
-#define TABLE_CONSTRAINTS(...)
-#define OPTIONAL(type) boost::optional< type >
-#define DATABASE_START(db_name)                                 \
-    namespace db_name                                           \
-    {                                                           \
-        class ScopedTransaction                                 \
-        {                                                       \
-            bool m_commited;                                    \
-            IOrmInterface *m_interface;                         \
-                                                                \
-        public:                                                 \
-            ScopedTransaction(IOrmInterface *interface) :       \
-                m_commited(false),                              \
-                m_interface(interface)                          \
-            {                                                   \
-                Assert(interface != NULL);                      \
-                m_interface->TransactionBegin();                \
-            }                                                   \
-                                                                \
-            ~ScopedTransaction()                                \
-            {                                                   \
-                if (!m_commited)                                \
-                    m_interface->TransactionRollback();         \
-            }                                                   \
-                                                                \
-            void Commit()                                       \
-            {                                                   \
-                m_interface->TransactionCommit();               \
-                m_commited = true;                              \
-            }                                                   \
-        };
-
-#define DATABASE_END() }
-
-// RowBase ostream operator<< declaration
-
-#define CREATE_TABLE(name) \
-    namespace name {                                                            \
-        class RowBase;                                                          \
-        inline std::ostream& operator<<(std::ostream& ostr, const RowBase& row); \
-    }
-#define COLUMN_NOT_NULL(name, type, ...)
-#define COLUMN(name, type, ...)
-#define CREATE_TABLE_END()
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-#undef DATABASE_START
-#define DATABASE_START(db_name) namespace db_name {
-
-// RowBase class
-
-#define CREATE_TABLE(name) namespace name { class RowBase {                 \
-   public: friend std::ostream& operator<<(std::ostream&, const RowBase&);
-#define COLUMN_NOT_NULL(name, type, ...)                                \
-        protected: type name; bool m_##name##_set;                          \
-        public:  void Set_##name(const type& _value) {                       \
-                     m_##name##_set = true;                                 \
-                     this->name = _value;                                     \
-        }                                                                   \
-        public:  type Get_##name() const {                                  \
-                     if ( !m_##name##_set ) {                               \
-                        ThrowMsg(Exception::RowFieldNotInitialized,         \
-                        "You tried to read a row field that hasn't been set yet."); \
-                     }                                                      \
-                     return name;                                           \
-        }
-
-#define COLUMN(name, type, ...)                                         \
-        protected: OPTIONAL(type) name; bool m_##name##_set;                \
-        public:  void Set_##name(const OPTIONAL(type)& _value) {             \
-                     m_##name##_set = true;                                 \
-                     this->name = _value;                                     \
-        }                                                                   \
-        public:  OPTIONAL(type) Get_##name() const {                        \
-                     if ( !m_##name##_set ) {                               \
-                        ThrowMsg(Exception::RowFieldNotInitialized,         \
-                        "You tried to read a row field that hasn't been set yet."); \
-                     }                                                      \
-                     return name;                                           \
-        }
-#define CREATE_TABLE_END() }; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// RowBase ostream operator<<
-
-#define CREATE_TABLE(name) std::ostream& name::operator<<(std::ostream& ostr, const RowBase& row) { using ::operator<< ; ostr << STRINGIFY(name) << " (";
-#define COLUMN_NOT_NULL(name, type, ...) ostr << " '" << row.name << "'" ;
-#define COLUMN(name, type, ...)          ostr << " '" << row.name << "'" ;
-#define CREATE_TABLE_END() ostr << " )" ; return ostr; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// RowBase2 class (== RowBase + operator==)
-
-#define CREATE_TABLE(name) namespace name { class RowBase2 : public RowBase { \
-    public: bool operator==(const RowBase2& row) const { return true
-#define COLUMN_NOT_NULL(name, type, ...) && (this->name == row.name)
-#define COLUMN(name, type, ...)          && (this->name == row.name)
-#define CREATE_TABLE_END() ; } }; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// RowBase3 class (== RowBase2 + operator<)
-
-#define CREATE_TABLE(name) namespace name { class RowBase3 : public RowBase2 { \
-    public: bool operator<(const RowBase3& row) const {
-#define COLUMN_NOT_NULL(name, type, ...) if (this->name < row.name) { return true; } if (this->name > row.name) { return false; }
-#define COLUMN(name, type, ...)          if (this->name < row.name) { return true; } if (this->name > row.name) { return false; }
-#define CREATE_TABLE_END() return false; } }; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// RowBase4 class (== RowBase3 + IsSignatureMatching )
-
-#define CREATE_TABLE(name) namespace name { class RowBase4 : public RowBase3 { \
-    public: bool IsSignatureMatching(const RowBase4& row) const { return true
-#define COLUMN_NOT_NULL(name, type, ...) && (this->m_##name##_set == row.m_##name##_set)
-#define COLUMN(name, type, ...)          && (this->m_##name##_set == row.m_##name##_set)
-#define CREATE_TABLE_END() ; } }; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// RowBase5 class (== RowBase4 + default constructor)
-
-#define CREATE_TABLE(name) namespace name { class RowBase5 : public RowBase4 { \
-    public: RowBase5() {
-#define COLUMN_NOT_NULL(name, type, ...) m_##name##_set = false;
-#define COLUMN(name, type, ...)          m_##name##_set = false;
-#define CREATE_TABLE_END() } }; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// Row class (== RowBase5 + ForEachColumn )
-
-#define CREATE_TABLE(name) namespace name { class Row : public RowBase5 { \
-    public: template<typename Visitor>                                    \
-    void VisitColumns(Visitor& visitor) const {
-#define COLUMN_NOT_NULL(name, type, ...) visitor.Visit(STRINGIFY(name), this->name, this->m_##name##_set);
-#define COLUMN(name, type, ...)          visitor.Visit(STRINGIFY(name), this->name, this->m_##name##_set);
-#define CREATE_TABLE_END() } }; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// Field structure declarations
-
-#define CREATE_TABLE(name) namespace name { \
-    static const char* GetName() { return STRINGIFY(name); }
-#define COLUMN_NOT_NULL(name, type, ...) DECLARE_COLUMN(name, type)
-#define COLUMN(name, type, ...) DECLARE_COLUMN(name, OPTIONAL(type))
-#define CREATE_TABLE_END() }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// ColumnList typedef
-
-#define CREATE_TABLE(name) namespace name { typedef VcoreDPL::TypeListDecl<
-#define COLUMN_NOT_NULL(name, type, ...) name,
-#define COLUMN(name, type, ...) name,
-#define CREATE_TABLE_END() VcoreDPL::TypeListGuard>::Type ColumnList; }
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// TableDefinition struct
-
-#define CREATE_TABLE(table_name)                                            \
-    namespace table_name {                                                  \
-        struct TableDefinition {                                            \
-            typedef table_name::ColumnList ColumnList;                      \
-            typedef table_name::Row Row;                                    \
-            static const char* GetName() { return STRINGIFY(table_name); }  \
-            static VcoreDPL::DB::SqlConnection::DataCommand *AllocTableDataCommand( \
-                const std::string &statement,                               \
-                IOrmInterface *interface)                                   \
-            {                                                               \
-                Assert(interface != NULL);                                  \
-                return interface->AllocDataCommand(statement);              \
-            }                                                               \
-            static void FreeTableDataCommand(                               \
-                VcoreDPL::DB::SqlConnection::DataCommand *command,               \
-                IOrmInterface *interface)                                   \
-            {                                                               \
-                Assert(interface != NULL);                                  \
-                interface->FreeDataCommand(command);                        \
-            }                                                               \
-            static VcoreDPL::DB::SqlConnection::RowID GetLastInsertRowID(        \
-                IOrmInterface *interface)                                   \
-            {                                                               \
-                Assert(interface != NULL);                                  \
-                return interface->GetLastInsertRowID();                     \
-            }                                                               \
-        };                                                                  \
-    }
-
-#define COLUMN_NOT_NULL(name, type, ...)
-#define COLUMN(name, type, ...)
-#define CREATE_TABLE_END()
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-// Query typedefs
-
-#define CREATE_TABLE(name) \
-    namespace name { \
-        typedef Select<TableDefinition> Select; \
-        typedef Insert<TableDefinition> Insert; \
-        typedef Delete<TableDefinition> Delete; \
-        typedef Update<TableDefinition> Update; \
-    }
-#define COLUMN_NOT_NULL(name, type, ...)
-#define COLUMN(name, type, ...)
-#define CREATE_TABLE_END()
-
-#include ORM_GENERATOR_DATABASE_NAME_LOCAL
-
-#undef CREATE_TABLE
-#undef COLUMN_NOT_NULL
-#undef COLUMN
-#undef CREATE_TABLE_END
-
-
-// Global undefs
-#undef INT
-#undef TINYINT
-#undef INTEGER
-#undef BIGINT
-#undef VARCHAR
-#undef TEXT
-
-#undef SQL
-#undef TABLE_CONSTRAINTS
-#undef OPTIONAL
-#undef DATABASE_START
-#undef DATABASE_END
-
-} //namespace ORM
-} //namespace DB
-} //namespace VcoreDPL
-
-#undef ORM_GENERATOR_DATABASE_NAME
-#undef ORM_GENERATOR_DATABASE_NAME_LOCAL
diff --git a/vcore/src/dpl/db/include/dpl/db/orm_interface.h b/vcore/src/dpl/db/include/dpl/db/orm_interface.h
deleted file mode 100644 (file)
index 025c642..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file    orm_interface.h
- * @author  Lukasz Marek (l.marek@samsung.com)
- * @version 1.0
- */
-
-#include <string>
-#include <dpl/db/sql_connection.h>
-
-#ifndef DPL_ORM_INTERFACE_H
-#define DPL_ORM_INTERFACE_H
-
-namespace VcoreDPL {
-namespace DB {
-namespace ORM {
-class IOrmInterface
-{
-  public:
-    virtual ~IOrmInterface() {}
-    virtual VcoreDPL::DB::SqlConnection::DataCommand *AllocDataCommand(
-        const std::string &statement) = 0;
-    virtual void FreeDataCommand(VcoreDPL::DB::SqlConnection::DataCommand *command)
-        = 0;
-    virtual void TransactionBegin() = 0;
-    virtual void TransactionCommit() = 0;
-    virtual void TransactionRollback() = 0;
-    virtual VcoreDPL::DB::SqlConnection::RowID GetLastInsertRowID() = 0;
-};
-}
-}
-}
-
-#endif
diff --git a/vcore/src/dpl/db/include/dpl/db/orm_macros.h b/vcore/src/dpl/db/include/dpl/db/orm_macros.h
deleted file mode 100644 (file)
index a038523..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        orm_macros.h
- * @author      Bartosz Janiak (b.janiak@samsung.com)
- * @version     1.0
- * @brief       Macro definitions for generating the SQL input file from
- * database definition.
- */
-
-//Do not include this file directly! It is used only for SQL code generation.
-
-#define CREATE_TABLE(name) CREATE TABLE name(
-#define COLUMN(name, type, ...) name type __VA_ARGS__,
-#define COLUMN_NOT_NULL(name, type, ...) name type __VA_ARGS__ not null,
-#define SQL(...) __VA_ARGS__
-#define TABLE_CONSTRAINTS(...) __VA_ARGS__,
-#define CREATE_TABLE_END() CHECK(1) );
-#define DATABASE_START(db_name)
-#define DATABASE_END()
-
diff --git a/vcore/src/dpl/db/include/dpl/db/sql_connection.h b/vcore/src/dpl/db/include/dpl/db/sql_connection.h
deleted file mode 100644 (file)
index 56714ee..0000000
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        sql_connection.h
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of SQL connection
- */
-#ifndef DPL_SQL_CONNECTION_H
-#define DPL_SQL_CONNECTION_H
-
-#include <dpl/noncopyable.h>
-#include <dpl/exception.h>
-#include <dpl/availability.h>
-#include <memory>
-#include <boost/optional.hpp>
-#include <dpl/string.h>
-#include <dpl/log/vcore_log.h>
-#include <sqlite3.h>
-#include <string>
-#include <dpl/assert.h>
-#include <memory>
-#include <stdint.h>
-
-namespace VcoreDPL {
-namespace DB {
-/**
- * SQL connection class
- */
-class SqlConnection
-{
-  public:
-    /**
-     * SQL Exception classes
-     */
-    class Exception
-    {
-      public:
-        DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-        DECLARE_EXCEPTION_TYPE(Base, SyntaxError)
-        DECLARE_EXCEPTION_TYPE(Base, ConnectionBroken)
-        DECLARE_EXCEPTION_TYPE(Base, InternalError)
-        DECLARE_EXCEPTION_TYPE(Base, InvalidColumn)
-    };
-
-    typedef int ColumnIndex;
-    typedef int ArgumentIndex;
-
-    /*
-     * SQL processed data command
-     */
-    class DataCommand :
-        private Noncopyable
-    {
-      private:
-        SqlConnection *m_masterConnection;
-        sqlite3_stmt *m_stmt;
-
-        void CheckBindResult(int result);
-        void CheckColumnIndex(SqlConnection::ColumnIndex column);
-
-        DataCommand(SqlConnection *connection, const char *buffer);
-
-        friend class SqlConnection;
-
-      public:
-        virtual ~DataCommand();
-
-        /**
-         * Bind null to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         */
-        void BindNull(ArgumentIndex position);
-
-        /**
-         * Bind int to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInteger(ArgumentIndex position, int value);
-
-        /**
-         * Bind int8_t to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt8(ArgumentIndex position, int8_t value);
-
-        /**
-         * Bind int16 to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt16(ArgumentIndex position, int16_t value);
-
-        /**
-         * Bind int32 to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt32(ArgumentIndex position, int32_t value);
-
-        /**
-         * Bind int64 to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt64(ArgumentIndex position, int64_t value);
-
-        /**
-         * Bind float to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindFloat(ArgumentIndex position, float value);
-
-        /**
-         * Bind double to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindDouble(ArgumentIndex position, double value);
-
-        /**
-         * Bind string to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindString(ArgumentIndex position, const char *value);
-
-        /**
-         * Bind string to the prepared statement argument
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindString(ArgumentIndex position, const String& value);
-
-        /**
-         * Bind optional int to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInteger(ArgumentIndex position, const boost::optional<int> &value);
-
-        /**
-         * Bind optional int8 to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt8(ArgumentIndex position, const boost::optional<int8_t> &value);
-
-        /**
-         * Bind optional int16 to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt16(ArgumentIndex position, const boost::optional<int16_t> &value);
-
-        /**
-         * Bind optional int32 to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt32(ArgumentIndex position, const boost::optional<int32_t> &value);
-
-        /**
-         * Bind optional int64 to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindInt64(ArgumentIndex position, const boost::optional<int64_t> &value);
-
-        /**
-         * Bind optional float to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindFloat(ArgumentIndex position, const boost::optional<float> &value);
-
-        /**
-         * Bind optional double to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindDouble(ArgumentIndex position, const boost::optional<double> &value);
-
-        /**
-         * Bind optional string to the prepared statement argument.
-         * If optional is not set null will be bound
-         *
-         * @param position Index of argument to bind value to
-         * @param value Value to bind
-         */
-        void BindString(ArgumentIndex position, const boost::optional<String> &value);
-
-        /**
-         * Execute the prepared statement and/or move
-         * to the next row of the result
-         *
-         * @return True when there was a row returned
-         */
-        bool Step();
-
-        /**
-         * Reset prepared statement's arguments
-         * All parameters will become null
-         */
-        void Reset();
-
-        /**
-         * Checks whether column value is null
-         *
-         * @throw Exception::InvalidColumn
-         */
-        bool IsColumnNull(ColumnIndex column);
-
-        /**
-         * Get integer value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        int GetColumnInteger(ColumnIndex column);
-
-        /**
-         * Get int8 value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        int8_t GetColumnInt8(ColumnIndex column);
-
-        /**
-         * Get int16 value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        int16_t GetColumnInt16(ColumnIndex column);
-        /**
-         * Get int32 value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        int32_t GetColumnInt32(ColumnIndex column);
-
-        /**
-         * Get int64 value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        int64_t GetColumnInt64(ColumnIndex column);
-
-        /**
-         * Get float value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        float GetColumnFloat(ColumnIndex column);
-
-        /**
-         * Get double value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        double GetColumnDouble(ColumnIndex column);
-
-        /**
-         * Get string value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        std::string GetColumnString(ColumnIndex column);
-
-        /**
-         * Get optional integer value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<int> GetColumnOptionalInteger(ColumnIndex column);
-
-        /**
-         * Get optional int8 value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<int8_t> GetColumnOptionalInt8(ColumnIndex column);
-
-        /**
-         * Get optional int16value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<int16_t> GetColumnOptionalInt16(ColumnIndex column);
-
-        /**
-         * Get optional int32 value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<int32_t> GetColumnOptionalInt32(ColumnIndex column);
-
-        /**
-         * Get optional int64 value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<int64_t> GetColumnOptionalInt64(ColumnIndex column);
-
-        /**
-         * Get optional float value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<float> GetColumnOptionalFloat(ColumnIndex column);
-
-        /**
-         * Get optional double value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<double> GetColumnOptionalDouble(ColumnIndex column);
-
-        /**
-         * Get optional string value from column in current row.
-         *
-         * @throw Exception::InvalidColumn
-         */
-        boost::optional<String> GetColumnOptionalString(ColumnIndex column);
-    };
-
-    // Move on copy semantics
-    typedef std::auto_ptr<DataCommand> DataCommandAutoPtr;
-
-    // Open flags
-    class Flag
-    {
-      public:
-        enum Type
-        {
-            None = 1 << 0,
-            UseLucene = 1 << 1
-        };
-
-        enum Option
-        {
-            RO = SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_READONLY,
-            /**
-             * *TODO: please remove CREATE option from RW flag when all places
-             *      that need that switched do CRW
-             */
-            RW = SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_READWRITE |
-                SQLITE_OPEN_CREATE,
-            CRW = RW | SQLITE_OPEN_CREATE
-        };
-    };
-
-    // RowID
-    typedef sqlite3_int64 RowID;
-
-    /**
-     * Synchronization object used to synchronize SQL connection
-     * to the same database across different threads and processes
-     */
-    class SynchronizationObject
-    {
-      public:
-        virtual ~SynchronizationObject() {}
-
-        /**
-         * Synchronizes SQL connection for multiple clients.
-         */
-        virtual void Synchronize() = 0;
-
-        /**
-         * Notify all waiting clients that the connection is no longer locked.
-         */
-        virtual void NotifyAll() = 0;
-    };
-
-  protected:
-    sqlite3 *m_connection;
-
-    // Options
-    bool m_usingLucene;
-
-    // Stored data procedures
-    int m_dataCommandsCount;
-
-    // Synchronization object
-    std::unique_ptr<SynchronizationObject> m_synchronizationObject;
-
-    virtual void Connect(const std::string &address,
-                         Flag::Type = Flag::None, Flag::Option = Flag::RO);
-    virtual void Disconnect();
-
-    void TurnOnForeignKeys();
-
-    static SynchronizationObject *AllocDefaultSynchronizationObject();
-
-  public:
-    /**
-     * Open SQL connection
-     *
-     * Synchronization is archieved by using provided asynchronization object.
-     * If synchronizationObject is set to NULL, so synchronization is performed.
-     * Ownership of the synchronization object is transfered to sql connection
-     * object.
-     *
-     * @param address Database file name
-     * @param flags Open flags
-     * @param synchronizationObject A synchronization object to use.
-     */
-    explicit SqlConnection(const std::string &address = std::string(),
-                           Flag::Type flags = Flag::None,
-                           Flag::Option options = Flag::RO,
-                           SynchronizationObject *synchronizationObject =
-                               AllocDefaultSynchronizationObject());
-
-    /**
-     * Destructor
-     */
-    virtual ~SqlConnection();
-
-    /**
-     * Execute SQL command without result
-     *
-     * @param format
-     * @param ...
-     */
-    void ExecCommand(const char *format, ...) DPL_DEPRECATED_WITH_MESSAGE(
-            "To prevent sql injection do not use this \
-             method for direct sql execution");
-
-    /**
-     * Execute BEGIN; command to start new transaction
-     *
-     */
-    void BeginTransaction();
-
-    /**
-     * Execute ROLLBACK; command to discard changes made
-     *
-     */
-    void RollbackTransaction();
-
-    /**
-     * Execute COMMIT; command to commit changes in database
-     *
-     */
-    void CommitTransaction();
-
-    /**
-     * Prepare stored procedure
-     *
-     * @param format SQL statement
-     * @return Data command representing stored procedure
-     */
-    DataCommandAutoPtr PrepareDataCommand(const char *format, ...);
-
-    /**
-     * Check whether given table exists
-     *
-     * @param tableName Name of the table to check
-     * @return True if given table name exists
-     */
-    bool CheckTableExist(const char *tableName);
-
-    /**
-     * Get last insert operation new row id
-     *
-     * @return Row ID
-     */
-    RowID GetLastInsertRowID() const;
-
-  private:
-    int  db_util_open_with_options(const char *pszFilePath, sqlite3 **ppDB,
-                                   int flags, const char *zVfs);
-    int  db_util_close(sqlite3 *pDB);
-
-};
-} // namespace DB
-} // namespace VcoreDPL
-
-#endif // DPL_SQL_CONNECTION_H
diff --git a/vcore/src/dpl/db/include/dpl/db/thread_database_support.h b/vcore/src/dpl/db/include/dpl/db/thread_database_support.h
deleted file mode 100644 (file)
index ce8a11a..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file    thread_database_support.h
- * @author  Przemyslaw Dobrowolski (p.dobrowolsk)
- * @version 1.0
- * @brief   This file contains the declaration of thread database support
- */
-
-#ifndef DPL_THREAD_DATABASE_SUPPORT_H
-#define DPL_THREAD_DATABASE_SUPPORT_H
-
-#include <string>
-#include <dpl/db/sql_connection.h>
-#include <dpl/db/orm_interface.h>
-#include <dpl/thread.h>
-#include <dpl/assert.h>
-#include <stdint.h>
-
-namespace VcoreDPL {
-namespace DB {
-/**
- * Thread database support
- *
- * Associate database connection with thread lifecycle
- *
- */
-
-class ThreadDatabaseSupport :
-    public VcoreDPL::DB::ORM::IOrmInterface
-{
-  private:
-    typedef VcoreDPL::DB::SqlConnection *SqlConnectionPtr;
-    typedef VcoreDPL::ThreadLocalVariable<SqlConnectionPtr> TLVSqlConnectionPtr;
-    typedef VcoreDPL::ThreadLocalVariable<size_t> TLVSizeT;
-    typedef VcoreDPL::ThreadLocalVariable<bool> TLVBool;
-
-    TLVSqlConnectionPtr m_connection;
-    TLVBool m_linger;
-    TLVSizeT m_refCounter;
-    TLVSizeT m_transactionDepth;
-    TLVSizeT m_attachCount;
-    TLVBool m_transactionCancel;
-    std::string m_address;
-    VcoreDPL::DB::SqlConnection::Flag::Type m_flags;
-
-    TLVSqlConnectionPtr &Connection()
-    {
-        return m_connection;
-    }
-
-    TLVBool &Linger()
-    {
-        return m_linger;
-    }
-
-    TLVSizeT &RefCounter()
-    {
-        return m_refCounter;
-    }
-
-    TLVSizeT &TransactionDepth()
-    {
-        return m_transactionDepth;
-    }
-
-    TLVSizeT &AttachCount()
-    {
-        return m_attachCount;
-    }
-
-    TLVBool &TransactionCancel()
-    {
-        return m_transactionCancel;
-    }
-
-    void CheckedConnectionDelete()
-    {
-        Assert(!Connection().IsNull());
-        Assert(*Linger() == true);
-
-        if (*RefCounter() > 0 || *AttachCount() > 0) {
-            return;
-        }
-
-        // Destroy connection
-        LogDebug("Destroying thread database connection: " << m_address);
-
-        delete *Connection();
-
-        // Blocking destroy
-        Connection().GuardValue(false);
-        Linger().GuardValue(false);
-        RefCounter().GuardValue(false);
-        TransactionCancel().GuardValue(false);
-        TransactionDepth().GuardValue(false);
-        AttachCount().GuardValue(false);
-
-        Connection().Reset();
-        Linger().Reset();
-        RefCounter().Reset();
-        TransactionCancel().Reset();
-        TransactionDepth().Reset();
-        AttachCount().Reset();
-    }
-
-    void TransactionUnref()
-    {
-        LogDebug("Unref transaction");
-
-        if (--(*TransactionDepth()) == 0) {
-            LogDebug("Transaction is finalized");
-
-            if (*TransactionCancel()) {
-                LogDebug("Transaction will be rolled back");
-                (*Connection())->RollbackTransaction();
-            } else {
-                LogDebug("Transaction will be commited");
-                (*Connection())->CommitTransaction();
-            }
-        }
-    }
-
-  public:
-    ThreadDatabaseSupport(const std::string &address,
-                          VcoreDPL::DB::SqlConnection::Flag::Type flags) :
-        m_address(address),
-        m_flags(flags)
-    {}
-
-    virtual ~ThreadDatabaseSupport()
-    {}
-
-    void AttachToThread(
-        VcoreDPL::DB::SqlConnection::Flag::Option options =
-            VcoreDPL::DB::SqlConnection::Flag::RO)
-    {
-        Linger() = false;
-
-        if (!Connection().IsNull()) {
-            // Add reference
-            ++*AttachCount();
-            return;
-        }
-
-        // Initialize SQL connection described in traits
-        LogDebug("Attaching thread database connection: " << m_address);
-
-        Connection() = new VcoreDPL::DB::SqlConnection(
-                m_address.c_str(), m_flags, options);
-
-        RefCounter() = 0;
-
-        AttachCount() = 1;
-
-        //Init Transaction related variables
-        TransactionDepth() = 0;
-        TransactionCancel() = false;
-
-        // Blocking destroy
-        Connection().GuardValue(true);
-        Linger().GuardValue(true);
-        RefCounter().GuardValue(true);
-        TransactionDepth().GuardValue(true);
-        AttachCount().GuardValue(true);
-        TransactionCancel().GuardValue(true);
-    }
-
-    void DetachFromThread()
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        // Remove reference
-        --*AttachCount();
-
-        if (*AttachCount() > 0) {
-            return;
-        }
-
-        // It must not be in linger state yet
-        Assert(*Linger() == false);
-
-        LogDebug("Detaching thread database connection: " << m_address);
-
-        // Enter linger state
-        *Linger() = true;
-
-        // Checked delete
-        CheckedConnectionDelete();
-    }
-
-    bool IsAttached()
-    {
-        return !AttachCount().IsNull() && *AttachCount() > 0;
-    }
-
-    VcoreDPL::DB::SqlConnection::DataCommand *AllocDataCommand(
-        const std::string &statement)
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        // Calling thread must not be in linger state
-        Assert(*Linger() == false);
-
-        // Add reference
-        ++*RefCounter();
-
-        // Create new unmanaged data command
-        return (*Connection())->PrepareDataCommand(statement.c_str()).release();
-    }
-
-    void FreeDataCommand(VcoreDPL::DB::SqlConnection::DataCommand *command)
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        // Delete data command
-        delete command;
-
-        // Unreference SQL connection
-        --*RefCounter();
-
-        // If it is linger state, connection may be destroyed
-        if (*Linger() == true) {
-            CheckedConnectionDelete();
-        }
-    }
-
-    void TransactionBegin()
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        LogDebug("Begin transaction");
-
-        // Addref transaction
-        if (++(*TransactionDepth()) == 1) {
-            LogDebug("Transaction is initialized");
-
-            TransactionCancel() = false;
-            (*Connection())->BeginTransaction();
-        }
-    }
-
-    void TransactionCommit()
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        LogDebug("Commit transaction");
-
-        // Unref transation
-        TransactionUnref();
-    }
-
-    void TransactionRollback()
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        // Cancel and unref transaction
-        TransactionCancel() = true;
-        TransactionUnref();
-    }
-
-    VcoreDPL::DB::SqlConnection::RowID GetLastInsertRowID()
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        return (*Connection())->GetLastInsertRowID();
-    }
-
-    bool CheckTableExist(const char *name)
-    {
-        // Calling thread must support thread database connections
-        Assert(!Connection().IsNull());
-
-        return (*Connection())->CheckTableExist(name);
-    }
-};
-}
-}
-
-#endif // DPL_THREAD_DATABASE_SUPPORT_H
diff --git a/vcore/src/dpl/db/src/orm.cpp b/vcore/src/dpl/db/src/orm.cpp
deleted file mode 100644 (file)
index 6e79d46..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        orm.cpp
- * @author      Bartosz Janiak (b.janiak@samsung.com)
- * @version     1.0
- * @brief       Static definitions and function template specialziations of
- * DPL-ORM.
- */
-#include <stddef.h>
-#include <dpl/db/orm.h>
-
-namespace VcoreDPL {
-namespace DB {
-namespace ORM {
-namespace RelationTypes {
-const char Equal[] = "=";
-const char LessThan[] = "<";
-const char And[] = "AND";
-const char Or[] = "OR";
-const char Is[] = "IS";
-const char In[] = "IN";
-}
-
-template<>
-int GetColumnFromCommand<int>(ColumnIndex columnIndex,
-                              DataCommand *command)
-{
-    return command->GetColumnInteger(columnIndex);
-}
-
-template<>
-VcoreDPL::String GetColumnFromCommand<VcoreDPL::String>(ColumnIndex columnIndex,
-                                              DataCommand *command)
-{
-    return VcoreDPL::FromUTF8String(command->GetColumnString(columnIndex));
-}
-
-template<>
-OptionalInteger GetColumnFromCommand<OptionalInteger>(ColumnIndex columnIndex,
-                                                      DataCommand *command)
-{
-    return command->GetColumnOptionalInteger(columnIndex);
-}
-
-template<>
-OptionalString GetColumnFromCommand<OptionalString>(ColumnIndex columnIndex,
-                                                    DataCommand *command)
-{
-    return command->GetColumnOptionalString(columnIndex);
-}
-
-template<>
-double GetColumnFromCommand<double>(ColumnIndex columnIndex,
-                                    DataCommand *command)
-{
-    return command->GetColumnDouble(columnIndex);
-}
-
-void DataCommandUtils::BindArgument(DataCommand *command,
-                                    ArgumentIndex index,
-                                    int argument)
-{
-    command->BindInteger(index, argument);
-}
-
-void DataCommandUtils::BindArgument(DataCommand *command,
-                                    ArgumentIndex index,
-                                    const OptionalInteger& argument)
-{
-    command->BindInteger(index, argument);
-}
-
-void DataCommandUtils::BindArgument(DataCommand *command,
-                                    ArgumentIndex index,
-                                    const VcoreDPL::String& argument)
-{
-    command->BindString(index, argument);
-}
-
-void DataCommandUtils::BindArgument(DataCommand *command,
-                                    ArgumentIndex index,
-                                    const OptionalString& argument)
-{
-    command->BindString(index, argument);
-}
-}
-}
-}
diff --git a/vcore/src/dpl/db/src/sql_connection.cpp b/vcore/src/dpl/db/src/sql_connection.cpp
deleted file mode 100644 (file)
index fa238cd..0000000
+++ /dev/null
@@ -1,896 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        sql_connection.cpp
- * @author      Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation file of SQL connection
- */
-#include <stddef.h>
-#include <dpl/db/sql_connection.h>
-#include <dpl/db/naive_synchronization_object.h>
-#include <dpl/free_deleter.h>
-#include <memory>
-#include <dpl/noncopyable.h>
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <unistd.h>
-#include <cstdio>
-#include <cstdarg>
-
-namespace VcoreDPL {
-namespace DB {
-namespace // anonymous
-{
-class ScopedNotifyAll :
-    public Noncopyable
-{
-  private:
-    SqlConnection::SynchronizationObject *m_synchronizationObject;
-
-  public:
-    explicit ScopedNotifyAll(
-        SqlConnection::SynchronizationObject *synchronizationObject) :
-        m_synchronizationObject(synchronizationObject)
-    {}
-
-    ~ScopedNotifyAll()
-    {
-        if (!m_synchronizationObject) {
-            return;
-        }
-
-        LogDebug("Notifying after successful synchronize");
-        m_synchronizationObject->NotifyAll();
-    }
-};
-} // namespace anonymous
-
-SqlConnection::DataCommand::DataCommand(SqlConnection *connection,
-                                        const char *buffer) :
-    m_masterConnection(connection),
-    m_stmt(NULL)
-{
-    Assert(connection != NULL);
-
-    // Notify all after potentially synchronized database connection access
-    ScopedNotifyAll notifyAll(connection->m_synchronizationObject.get());
-
-    for (;;) {
-        int ret = sqlite3_prepare_v2(connection->m_connection,
-                                     buffer, strlen(buffer),
-                                     &m_stmt, NULL);
-
-        if (ret == SQLITE_OK) {
-            LogDebug("Data command prepared successfuly");
-            break;
-        } else if (ret == SQLITE_BUSY) {
-            LogDebug("Collision occurred while preparing SQL command");
-
-            // Synchronize if synchronization object is available
-            if (connection->m_synchronizationObject) {
-                LogDebug("Performing synchronization");
-                connection->m_synchronizationObject->Synchronize();
-                continue;
-            }
-
-            // No synchronization object defined. Fail.
-        }
-
-        // Fatal error
-        const char *error = sqlite3_errmsg(m_masterConnection->m_connection);
-
-        LogDebug("SQL prepare data command failed");
-        LogDebug("    Statement : " << buffer);
-        LogDebug("    Error     : " << error);
-
-        ThrowMsg(Exception::SyntaxError, error);
-    }
-
-    LogDebug("Prepared data command : " << buffer);
-
-    // Increment stored data command count
-    ++m_masterConnection->m_dataCommandsCount;
-}
-
-SqlConnection::DataCommand::~DataCommand()
-{
-    LogDebug("SQL data command finalizing");
-
-    if (sqlite3_finalize(m_stmt) != SQLITE_OK) {
-        LogDebug("Failed to finalize data command");
-    }
-
-    // Decrement stored data command count
-    --m_masterConnection->m_dataCommandsCount;
-}
-
-void SqlConnection::DataCommand::CheckBindResult(int result)
-{
-    if (result != SQLITE_OK) {
-        const char *error = sqlite3_errmsg(
-                m_masterConnection->m_connection);
-
-        LogDebug("Failed to bind SQL statement parameter");
-        LogDebug("    Error : " << error);
-
-        ThrowMsg(Exception::SyntaxError, error);
-    }
-}
-
-void SqlConnection::DataCommand::BindNull(
-    SqlConnection::ArgumentIndex position)
-{
-    CheckBindResult(sqlite3_bind_null(m_stmt, position));
-    LogDebug("SQL data command bind null: [" << position << "]");
-}
-
-void SqlConnection::DataCommand::BindInteger(
-    SqlConnection::ArgumentIndex position,
-    int value)
-{
-    CheckBindResult(sqlite3_bind_int(m_stmt, position, value));
-    LogDebug("SQL data command bind integer: [" << position << "] -> " << value);
-}
-
-void SqlConnection::DataCommand::BindInt8(
-    SqlConnection::ArgumentIndex position,
-    int8_t value)
-{
-    CheckBindResult(sqlite3_bind_int(m_stmt, position,
-                                     static_cast<int>(value)));
-    LogDebug("SQL data command bind int8: [" << position << "] -> " << value);
-}
-
-void SqlConnection::DataCommand::BindInt16(
-    SqlConnection::ArgumentIndex position,
-    int16_t value)
-{
-    CheckBindResult(sqlite3_bind_int(m_stmt, position,
-                                     static_cast<int>(value)));
-    LogDebug("SQL data command bind int16: [" << position << "] -> " << value);}
-
-void SqlConnection::DataCommand::BindInt32(
-    SqlConnection::ArgumentIndex position,
-    int32_t value)
-{
-    CheckBindResult(sqlite3_bind_int(m_stmt, position,
-                                     static_cast<int>(value)));
-    LogDebug("SQL data command bind int32: [" << position << "] -> " << value);
-}
-
-void SqlConnection::DataCommand::BindInt64(
-    SqlConnection::ArgumentIndex position,
-    int64_t value)
-{
-    CheckBindResult(sqlite3_bind_int64(m_stmt, position,
-                                       static_cast<sqlite3_int64>(value)));
-    LogDebug("SQL data command bind int64: [" << position << "] -> " << value);
-}
-
-void SqlConnection::DataCommand::BindFloat(
-    SqlConnection::ArgumentIndex position,
-    float value)
-{
-    CheckBindResult(sqlite3_bind_double(m_stmt, position,
-                                        static_cast<double>(value)));
-    LogDebug("SQL data command bind float: [" << position << "] -> " << value);
-}
-
-void SqlConnection::DataCommand::BindDouble(
-    SqlConnection::ArgumentIndex position,
-    double value)
-{
-    CheckBindResult(sqlite3_bind_double(m_stmt, position, value));
-    LogDebug("SQL data command bind double: [" << position << "] -> " << value);
-}
-
-void SqlConnection::DataCommand::BindString(
-    SqlConnection::ArgumentIndex position,
-    const char *value)
-{
-    if (!value) {
-        BindNull(position);
-        return;
-    }
-
-    // Assume that text may disappear
-    CheckBindResult(sqlite3_bind_text(m_stmt, position,
-                                      value, strlen(value),
-                                      SQLITE_TRANSIENT));
-
-    LogDebug("SQL data command bind string: [" << position << "] -> " << value);
-}
-
-void SqlConnection::DataCommand::BindString(
-    SqlConnection::ArgumentIndex position,
-    const String &value)
-{
-    BindString(position, ToUTF8String(value).c_str());
-}
-
-void SqlConnection::DataCommand::BindInteger(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<int> &value)
-{
-    if (!value) {
-        BindNull(position);
-    } else {
-        BindInteger(position, *value);
-    }
-}
-
-void SqlConnection::DataCommand::BindInt8(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<int8_t> &value)
-{
-    if (!value) {
-        BindNull(position);
-    } else {
-        BindInt8(position, *value);
-    }
-}
-
-void SqlConnection::DataCommand::BindInt16(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<int16_t> &value)
-{
-    if (!value) {
-        BindNull(position);
-    } else {
-        BindInt16(position, *value);
-    }
-}
-
-void SqlConnection::DataCommand::BindInt32(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<int32_t> &value)
-{
-    if (!value) {
-        BindNull(position);
-    } else {
-        BindInt32(position, *value);
-    }
-}
-
-void SqlConnection::DataCommand::BindInt64(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<int64_t> &value)
-{
-    if (!value) {
-        BindNull(position);
-    } else {
-        BindInt64(position, *value);
-    }
-}
-
-void SqlConnection::DataCommand::BindFloat(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<float> &value)
-{
-    if (!value) {
-        BindNull(position);
-    } else {
-        BindFloat(position, *value);
-    }
-}
-
-void SqlConnection::DataCommand::BindDouble(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<double> &value)
-{
-    if (!value) {
-        BindNull(position);
-    } else {
-        BindDouble(position, *value);
-    }
-}
-
-void SqlConnection::DataCommand::BindString(
-    SqlConnection::ArgumentIndex position,
-    const boost::optional<String> &value)
-{
-    if (!!value) {
-        BindString(position, ToUTF8String(*value).c_str());
-    } else {
-        BindNull(position);
-    }
-}
-
-bool SqlConnection::DataCommand::Step()
-{
-    // Notify all after potentially synchronized database connection access
-    ScopedNotifyAll notifyAll(
-        m_masterConnection->m_synchronizationObject.get());
-
-    for (;;) {
-        int ret = sqlite3_step(m_stmt);
-
-        if (ret == SQLITE_ROW) {
-            LogDebug("SQL data command step ROW");
-            return true;
-        } else if (ret == SQLITE_DONE) {
-            LogDebug("SQL data command step DONE");
-            return false;
-        } else if (ret == SQLITE_BUSY) {
-            LogDebug("Collision occurred while executing SQL command");
-
-            // Synchronize if synchronization object is available
-            if (m_masterConnection->m_synchronizationObject) {
-                LogDebug("Performing synchronization");
-
-                m_masterConnection->
-                    m_synchronizationObject->Synchronize();
-
-                continue;
-            }
-
-            // No synchronization object defined. Fail.
-        }
-
-        // Fatal error
-        const char *error = sqlite3_errmsg(m_masterConnection->m_connection);
-
-        LogDebug("SQL step data command failed");
-        LogDebug("    Error : " << error);
-
-        ThrowMsg(Exception::InternalError, error);
-    }
-}
-
-void SqlConnection::DataCommand::Reset()
-{
-    /*
-     * According to:
-     * http://www.sqlite.org/c3ref/stmt.html
-     *
-     * if last sqlite3_step command on this stmt returned an error,
-     * then sqlite3_reset will return that error, althought it is not an error.
-     * So sqlite3_reset allways succedes.
-     */
-    sqlite3_reset(m_stmt);
-
-    LogDebug("SQL data command reset");
-}
-
-void SqlConnection::DataCommand::CheckColumnIndex(
-    SqlConnection::ColumnIndex column)
-{
-    if (column < 0 || column >= sqlite3_column_count(m_stmt)) {
-        ThrowMsg(Exception::InvalidColumn, "Column index is out of bounds");
-    }
-}
-
-bool SqlConnection::DataCommand::IsColumnNull(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column type: [" << column << "]");
-    CheckColumnIndex(column);
-    return sqlite3_column_type(m_stmt, column) == SQLITE_NULL;
-}
-
-int SqlConnection::DataCommand::GetColumnInteger(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column integer: [" << column << "]");
-    CheckColumnIndex(column);
-    int value = sqlite3_column_int(m_stmt, column);
-    LogDebug("    Value : " << value);
-    return value;
-}
-
-int8_t SqlConnection::DataCommand::GetColumnInt8(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column int8: [" << column << "]");
-    CheckColumnIndex(column);
-    int8_t value = static_cast<int8_t>(sqlite3_column_int(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return value;
-}
-
-int16_t SqlConnection::DataCommand::GetColumnInt16(
-    SqlConnection::ColumnIndex column)
-{
-    LgDebug("SQL data command get column int16: [" << column << "]");
-    CheckColumnIndex(column);
-    int16_t value = static_cast<int16_t>(sqlite3_column_int(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return value;
-}
-
-int32_t SqlConnection::DataCommand::GetColumnInt32(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column int32: [" << column << "]");
-    CheckColumnIndex(column);
-    int32_t value = static_cast<int32_t>(sqlite3_column_int(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return value;
-}
-
-int64_t SqlConnection::DataCommand::GetColumnInt64(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column int64: [" << column << "]");
-    CheckColumnIndex(column);
-    int64_t value = static_cast<int64_t>(sqlite3_column_int64(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return value;
-}
-
-float SqlConnection::DataCommand::GetColumnFloat(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column float: [" << column << "]");
-    CheckColumnIndex(column);
-    float value = static_cast<float>(sqlite3_column_double(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return value;
-}
-
-double SqlConnection::DataCommand::GetColumnDouble(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column double: [" << column << "]");
-    CheckColumnIndex(column);
-    double value = sqlite3_column_double(m_stmt, column);
-    LogDebug("    Value : " << value);
-    return value;
-}
-
-std::string SqlConnection::DataCommand::GetColumnString(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column string: [" << column << "]");
-    CheckColumnIndex(column);
-
-    const char *value = reinterpret_cast<const char *>(
-            sqlite3_column_text(m_stmt, column));
-
-    LogDebug("    Value : " << value);
-
-    if (value == NULL) {
-        return std::string();
-    }
-
-    return std::string(value);
-}
-
-boost::optional<int> SqlConnection::DataCommand::GetColumnOptionalInteger(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional integer: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<int>();
-    }
-    int value = sqlite3_column_int(m_stmt, column);
-    LogDebug("    Value : " << value);
-    return boost::optional<int>(value);
-}
-
-boost::optional<int8_t> SqlConnection::DataCommand::GetColumnOptionalInt8(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional int8: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<int8_t>();
-    }
-    int8_t value = static_cast<int8_t>(sqlite3_column_int(m_stmt, column));
-    LogDebug("    Value: " << value);
-    return boost::optional<int8_t>(value);
-}
-
-boost::optional<int16_t> SqlConnection::DataCommand::GetColumnOptionalInt16(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional int16: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<int16_t>();
-    }
-    int16_t value = static_cast<int16_t>(sqlite3_column_int(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return boost::optional<int16_t>(value);
-}
-
-boost::optional<int32_t> SqlConnection::DataCommand::GetColumnOptionalInt32(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional int32: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<int32_t>();
-    }
-    int32_t value = static_cast<int32_t>(sqlite3_column_int(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return boost::optional<int32_t>(value);
-}
-
-boost::optional<int64_t> SqlConnection::DataCommand::GetColumnOptionalInt64(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional int64: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<int64_t>();
-    }
-    int64_t value = static_cast<int64_t>(sqlite3_column_int64(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return boost::optional<int64_t>(value);
-}
-
-boost::optional<float> SqlConnection::DataCommand::GetColumnOptionalFloat(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional float: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<float>();
-    }
-    float value = static_cast<float>(sqlite3_column_double(m_stmt, column));
-    LogDebug("    Value : " << value);
-    return boost::optional<float>(value);
-}
-
-boost::optional<double> SqlConnection::DataCommand::GetColumnOptionalDouble(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional double: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<double>();
-    }
-    double value = sqlite3_column_double(m_stmt, column);
-    LogDebug("    Value : " << value);
-    return boost::optional<double>(value);
-}
-
-boost::optional<String> SqlConnection::DataCommand::GetColumnOptionalString(
-    SqlConnection::ColumnIndex column)
-{
-    LogDebug("SQL data command get column optional string: [" << column << "]");
-    CheckColumnIndex(column);
-    if (sqlite3_column_type(m_stmt, column) == SQLITE_NULL) {
-        return boost::optional<String>();
-    }
-    const char *value = reinterpret_cast<const char *>(
-            sqlite3_column_text(m_stmt, column));
-    LogDebug("    Value : " << value);
-    String s = FromUTF8String(value);
-    return boost::optional<String>(s);
-}
-
-void SqlConnection::Connect(const std::string &address,
-                            Flag::Type type,
-                            Flag::Option flag)
-{
-    if (m_connection != NULL) {
-        LogDebug("Already connected.");
-        return;
-    }
-    LogDebug("Connecting to DB: " << address << "...");
-
-    // Connect to database
-    int result;
-    if (type & Flag::UseLucene) {
-        result = db_util_open_with_options(
-                address.c_str(),
-                &m_connection,
-                flag,
-                NULL);
-
-        m_usingLucene = true;
-        LogDebug("Lucene index enabled");
-    } else {
-        result = sqlite3_open_v2(
-                address.c_str(),
-                &m_connection,
-                flag,
-                NULL);
-
-        m_usingLucene = false;
-        LogDebug("Lucene index disabled");
-    }
-
-    if (result == SQLITE_OK) {
-        LogDebug("Connected to DB");
-    } else {
-        LogDebug("Failed to connect to DB!");
-        ThrowMsg(Exception::ConnectionBroken, address);
-    }
-
-    // Enable foreign keys
-    TurnOnForeignKeys();
-}
-
-void SqlConnection::Disconnect()
-{
-    if (m_connection == NULL) {
-        LogDebug("Already disconnected.");
-        return;
-    }
-
-    LogDebug("Disconnecting from DB...");
-
-    // All stored data commands must be deleted before disconnect
-    AssertMsg(m_dataCommandsCount == 0,
-           "All stored procedures must be deleted"
-           " before disconnecting SqlConnection");
-
-    int result;
-
-    if (m_usingLucene) {
-        result = db_util_close(m_connection);
-    } else {
-        result = sqlite3_close(m_connection);
-    }
-
-    if (result != SQLITE_OK) {
-        const char *error = sqlite3_errmsg(m_connection);
-        LogDebug("SQL close failed");
-        LogDebug("    Error : " << error);
-        Throw(Exception::InternalError);
-    }
-
-    m_connection = NULL;
-
-    LogDebug("Disconnected from DB");
-}
-
-bool SqlConnection::CheckTableExist(const char *tableName)
-{
-    if (m_connection == NULL) {
-        LogDebug("Cannot execute command. Not connected to DB!");
-        return false;
-    }
-
-    DataCommandAutoPtr command =
-        PrepareDataCommand("select tbl_name from sqlite_master where name=?;");
-
-    command->BindString(1, tableName);
-
-    if (!command->Step()) {
-        LogDebug("No matching records in table");
-        return false;
-    }
-
-    return command->GetColumnString(0) == tableName;
-}
-
-SqlConnection::SqlConnection(const std::string &address,
-                             Flag::Type flag,
-                             Flag::Option option,
-                             SynchronizationObject *synchronizationObject) :
-    m_connection(NULL),
-    m_usingLucene(false),
-    m_dataCommandsCount(0),
-    m_synchronizationObject(synchronizationObject)
-{
-    LogDebug("Opening database connection to : " << address);
-
-    // Connect to DB
-    SqlConnection::Connect(address, flag, option);
-
-    if (!m_synchronizationObject) {
-        LogDebug("No synchronization object defined");
-    }
-}
-
-SqlConnection::~SqlConnection()
-{
-    LogDebug("Closing database connection");
-
-    // Disconnect from DB
-    Try
-    {
-        SqlConnection::Disconnect();
-    }
-    Catch(Exception::Base)
-    {
-        LogDebug("Failed to disconnect from database");
-    }
-}
-
-void SqlConnection::ExecCommand(const char *format, ...)
-{
-    if (m_connection == NULL) {
-        LogDebug("Cannot execute command. Not connected to DB!");
-        return;
-    }
-
-    if (format == NULL) {
-        LogDebug("Null query!");
-        ThrowMsg(Exception::SyntaxError, "Null statement");
-    }
-
-    char *rawBuffer;
-
-    va_list args;
-    va_start(args, format);
-
-    if (vasprintf(&rawBuffer, format, args) == -1) {
-        rawBuffer = NULL;
-    }
-
-    va_end(args);
-
-    std::unique_ptr<char[],free_deleter> buffer(rawBuffer);
-
-    if (!buffer) {
-        LogDebug("Failed to allocate statement string");
-        return;
-    }
-
-    LogDebug("Executing SQL command : " << buffer.get());
-
-    // Notify all after potentially synchronized database connection access
-    ScopedNotifyAll notifyAll(m_synchronizationObject.get());
-
-    for (;;) {
-        char *errorBuffer;
-
-        int ret = sqlite3_exec(m_connection,
-                               buffer.get(),
-                               NULL,
-                               NULL,
-                               &errorBuffer);
-
-        std::string errorMsg;
-
-        // Take allocated error buffer
-        if (errorBuffer != NULL) {
-            errorMsg = errorBuffer;
-            sqlite3_free(errorBuffer);
-        }
-
-        if (ret == SQLITE_OK) {
-            return;
-        }
-
-        if (ret == SQLITE_BUSY) {
-            LogDebug("Collision occurred while executing SQL command");
-
-            // Synchronize if synchronization object is available
-            if (m_synchronizationObject) {
-                LogDebug("Performing synchronization");
-                m_synchronizationObject->Synchronize();
-                continue;
-            }
-
-            // No synchronization object defined. Fail.
-        }
-
-        // Fatal error
-        LogDebug("Failed to execute SQL command. Error : " << errorMsg);
-        ThrowMsg(Exception::SyntaxError, errorMsg);
-    }
-}
-
-SqlConnection::DataCommandAutoPtr SqlConnection::PrepareDataCommand(
-    const char *format,
-    ...)
-{
-    if (m_connection == NULL) {
-        LogDebug("Cannot execute data command. Not connected to DB!");
-        return DataCommandAutoPtr();
-    }
-
-    char *rawBuffer;
-
-    va_list args;
-    va_start(args, format);
-
-    if (vasprintf(&rawBuffer, format, args) == -1) {
-        rawBuffer = NULL;
-    }
-
-    va_end(args);
-
-    std::unique_ptr<char[],free_deleter> buffer(rawBuffer);
-
-    if (!buffer) {
-        LogDebug("Failed to allocate statement string");
-        return DataCommandAutoPtr();
-    }
-
-    LogDebug("Executing SQL data command : " << buffer.get());
-
-    return DataCommandAutoPtr(new DataCommand(this, buffer.get()));
-}
-
-SqlConnection::RowID SqlConnection::GetLastInsertRowID() const
-{
-    return static_cast<RowID>(sqlite3_last_insert_rowid(m_connection));
-}
-
-void SqlConnection::TurnOnForeignKeys()
-{
-    ExecCommand("PRAGMA foreign_keys = ON;");
-}
-
-void SqlConnection::BeginTransaction()
-{
-    ExecCommand("BEGIN;");
-}
-
-void SqlConnection::RollbackTransaction()
-{
-    ExecCommand("ROLLBACK;");
-}
-
-void SqlConnection::CommitTransaction()
-{
-    ExecCommand("COMMIT;");
-}
-
-SqlConnection::SynchronizationObject *
-SqlConnection::AllocDefaultSynchronizationObject()
-{
-    return new NaiveSynchronizationObject();
-}
-
-int SqlConnection::db_util_open_with_options(const char *pszFilePath, sqlite3 **ppDB,
-                                int flags, const char *zVfs)
-{
-    int mode;
-
-    if((pszFilePath == NULL) || (ppDB == NULL)) {
-            LogWarning("sqlite3 handle null error");
-            return SQLITE_ERROR;
-    }
-
-    mode = R_OK;
-
-    if((geteuid() != 0) && (access(pszFilePath, mode))) {
-            if(errno == EACCES) {
-                    LogDebug("file access permission error");
-                    return SQLITE_PERM;
-            }
-    }
-
-    /* Open DB */
-    int rc = sqlite3_open_v2(pszFilePath, ppDB, flags, zVfs);
-    if (SQLITE_OK != rc) {
-            LogError("sqlite3_open_v2 error(" << rc << ")");
-            return rc;
-    }
-
-    //rc = __db_util_open(*ppDB);
-
-    return rc;
-}
-
-
-int SqlConnection::db_util_close(sqlite3 *pDB)
-{
-    char *pszErrorMsg = NULL;
-
-    /* Close DB */
-    int rc = sqlite3_close(pDB);
-    if (SQLITE_OK != rc) {
-            LogWarning("Fail to change journal mode : " << pszErrorMsg);
-            sqlite3_free(pszErrorMsg);
-            return rc;
-    }
-
-    return SQLITE_OK;
-}
-
-} // namespace DB
-} // namespace VcoreDPL
diff --git a/vcore/src/dpl/db/src/thread_database_support.cpp b/vcore/src/dpl/db/src/thread_database_support.cpp
deleted file mode 100644 (file)
index 101640f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file    thread_database_support.cpp
- * @author  Przemyslaw Dobrowolski (p.dobrowolsk)
- * @version 1.0
- * @brief   This file contains the definition of thread database support
- */
-#include <stddef.h>
-#include <dpl/db/thread_database_support.h>
\ No newline at end of file
diff --git a/vcore/src/dpl/test/include/dpl/test/process_pipe.h b/vcore/src/dpl/test/include/dpl/test/process_pipe.h
deleted file mode 100644 (file)
index bfc124b..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        process_pipe.h
- * @author      Tomasz Iwanek (t.iwanek@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation pipe from process
- */
-#ifndef PROCESS_PIPE_H
-#define PROCESS_PIPE_H
-
-#include <dpl/file_input.h>
-#include <dpl/exception.h>
-
-#include <cstdio>
-
-namespace VcoreDPL {
-
-class ProcessPipe : public FileInput
-{
-public:
-    class Exception
-    {
-    public:
-        DECLARE_EXCEPTION_TYPE(VcoreDPL::Exception, Base)
-        DECLARE_EXCEPTION_TYPE(Base, DoubleOpen)
-    };
-
-    enum class PipeErrorPolicy
-    {
-        NONE,
-        OFF,
-        PIPE
-    };
-
-    explicit ProcessPipe(PipeErrorPolicy err = PipeErrorPolicy::NONE);
-    virtual ~ProcessPipe();
-
-    void Open(const std::string &command);
-    void Close();
-
-private:
-    FILE * m_file;
-    PipeErrorPolicy m_errPolicy;
-};
-
-}
-
-#endif // PROCESS_PIPE_H
diff --git a/vcore/src/dpl/test/src/process_pipe.cpp b/vcore/src/dpl/test/src/process_pipe.cpp
deleted file mode 100644 (file)
index 6e4fb74..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file        process_pipe.cpp
- * @author      Tomasz Iwanek (t.iwanek@samsung.com)
- * @version     1.0
- * @brief       This file is the implementation pipe from process
- */
-
-#include <dpl/test/process_pipe.h>
-
-namespace VcoreDPL {
-
-ProcessPipe::ProcessPipe(PipeErrorPolicy err) : m_file(NULL), m_errPolicy(err)
-{
-}
-
-ProcessPipe::~ProcessPipe()
-{
-}
-
-void ProcessPipe::Open(const std::string & command)
-{
-    if(m_file != NULL)
-    {
-        ThrowMsg(Exception::DoubleOpen, "Trying to open pipe second time. Close it first");
-    }
-
-    std::string stdErrRedirection;
-    switch(m_errPolicy)
-    {
-        case PipeErrorPolicy::NONE:                                      break;
-        case PipeErrorPolicy::OFF:   stdErrRedirection = " 2>/dev/null"; break;
-        case PipeErrorPolicy::PIPE:  stdErrRedirection = " 2>&1";        break;
-        default:                                                         break;
-    }
-
-    std::string fcommand = command + stdErrRedirection;
-    FILE * file = popen(fcommand.c_str(), "r");
-
-    // Throw an exception if an error occurred
-    if (file == NULL) {
-        ThrowMsg(FileInput::Exception::OpenFailed, fcommand);
-    }
-
-    // Save new descriptor
-    m_file = file;
-    m_fd = fileno(m_file);
-}
-
-void ProcessPipe::Close()
-{
-    if (m_fd == -1) {
-        return;
-    }
-
-    if (pclose(m_file) == -1) {
-        Throw(FileInput::Exception::CloseFailed);
-    }
-
-    m_fd = -1;
-    m_file = NULL;
-}
-
-}
diff --git a/vcore/src/vcore/CRLCacheInterface.h b/vcore/src/vcore/CRLCacheInterface.h
deleted file mode 100644 (file)
index 1d17078..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*!
- * @author      Bartlomiej Grzelewski(b.grzelewski@samsung.com)
- * @version     0.1
- * @file        CRLCacheInterface.h
- * @brief       CRLCacheInterface definition.
- */
-#ifndef _CRLCACHEINTERFACE_H_
-#define _CRLCACHEINTERFACE_H_
-
-#include <string>
-
-namespace ValidationCore {
-
-struct CRLCachedData
-{
-    std::string distribution_point;
-    std::string crl_body;
-    time_t next_update_time;
-};
-
-class CRLCacheInterface {
-public:
-    virtual bool getCRLResponse(CRLCachedData *ptr) = 0;
-    virtual void setCRLResponse(CRLCachedData *ptr) = 0;
-};
-
-} // namespace ValidationCore
-
-#endif
diff --git a/vcore/src/vcore/CertificateStorage.h b/vcore/src/vcore/CertificateStorage.h
deleted file mode 100644 (file)
index 7fbcb6b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-#ifndef VCORE_SRC_VCORE_CERTIFICATESTORAGE_H
-#define VCORE_SRC_VCORE_CERTIFICATESTORAGE_H
-
-#include <list>
-#include <openssl/x509.h>
-
-namespace ValidationCore {
-typedef std::list < X509* > X509CertificatesList;
-}
-
-#endif // VCORE_SRC_VCORE_CERTIFICATESTORAGE_H
diff --git a/vcore/src/vcore/IAbstractResponseCache.h b/vcore/src/vcore/IAbstractResponseCache.h
deleted file mode 100644 (file)
index 2495d27..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/**
- *
- *
- * @file       AbstractResponseCache.h
- * @author     Tomasz Swierczek (t.swierczek@samsung.com)
- * @version    0.1
- * @brief      Common interface for OCSP/CRL caches
- */
-
-#ifndef _VALIDATION_CORE_IABSTRACT_RESPONSE_CACHE_H_
-#define _VALIDATION_CORE_IABSTRACT_RESPONSE_CACHE_H_
-
-#include <vcore/VerificationStatus.h>
-
-namespace ValidationCore {
-
-class CertificateCollection;
-
-class IAbstractResponseCache {
-  public:
-    virtual VerificationStatus check(const CertificateCollection &certs) = 0;
-    virtual VerificationStatus checkEndEntity(CertificateCollection &certs) = 0;
-    virtual void updateCache() = 0;
-
-    virtual ~IAbstractResponseCache()
-    {
-    }
-};
-
-} // namespace ValidationCore
-
-#endif /* _VALIDATION_CORE_IABSTRACT_RESPONSE_CACHE_H_ */
diff --git a/vcore/src/vcore/RevocationCheckerBase.cpp b/vcore/src/vcore/RevocationCheckerBase.cpp
deleted file mode 100644 (file)
index 777da78..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*!
- * @author      Piotr Marcinkiewicz(p.marcinkiew@samsung.com)
- * @version     0.4
- * @file        CommonCertValidator.cpp
- * @brief       Common routines for certificate validation over OCSP and CRL
- */
-
-#include "RevocationCheckerBase.h"
-
-#include <cstdlib>
-
-#include <openssl/pem.h>
-
-#include <dpl/scoped_fclose.h>
-
-#include "Certificate.h"
-#include "CertificateCollection.h"
-
-namespace {
-const char DefaultBundlePatch[] = "/opt/etc/ssl/certs/ca-certificates.crt";
-} //Anonymous name space
-
-namespace ValidationCore {
-CertificatePtr RevocationCheckerBase::loadPEMFile(const char* fileName)
-{
-    VcoreDPL::ScopedFClose fd(fopen(fileName, "rb"));
-
-    // no such file, return NULL
-    if (!fd.Get()) {
-        return CertificatePtr();
-    }
-
-    // create a new X509 certificate basing on file
-    CertificatePtr cert(new Certificate(PEM_read_X509(fd.Get(),
-                                                      NULL,
-                                                      NULL,
-                                                      NULL)));
-    return cert;
-}
-
-bool RevocationCheckerBase::sortCertList(CertificateList &lCertificates)
-{
-    CertificateCollection collection;
-    collection.load(lCertificates);
-
-    if (collection.sort()) {
-        lCertificates = collection.getChain();
-        return true;
-    }
-    return false;
-}
-
-} // ValidationCore
diff --git a/vcore/src/vcore/RevocationCheckerBase.h b/vcore/src/vcore/RevocationCheckerBase.h
deleted file mode 100644 (file)
index 3ce934d..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*!
- * @author      Piotr Marcinkiewicz(p.marcinkiew@samsung.com)
- * @version     0.4
- * @file        CommonCertValidator.h
- * @brief       Common routines for certificate validation over OCSP and CRL
- */
-
-#ifndef WRT_ENGINE_SRC_VALIDATION_CORE_REVOCATIONCHECKERBASE_H_
-#define WRT_ENGINE_SRC_VALIDATION_CORE_REVOCATIONCHECKERBASE_H_
-
-#include <string>
-
-#include "Certificate.h"
-
-namespace ValidationCore {
-class RevocationCheckerBase
-{
-  public:
-    //! Loads a PEM file and returns X509 certificate object.
-    static CertificatePtr loadPEMFile(const char* path);
-
-    //! Sorts a list of certficates and verifies them if they form
-    //! a valid chain
-    static bool sortCertList(CertificateList &cert) __attribute__((deprecated));
-};
-} // ValidationCore
-
-#endif //ifndef WRT_ENGINE_SRC_VALIDATION_CORE_REVOCATIONCHECKERBASE_H_
-
diff --git a/vcore/src/vcore/SSLContainers.h b/vcore/src/vcore/SSLContainers.h
deleted file mode 100644 (file)
index e18cb00..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-#ifndef _SSLCONTAINERS_H
-#define _SSLCONTAINERS_H
-
-#include <openssl/x509v3.h>
-#include <openssl/ocsp.h>
-
-/*
- * default deleter functor with no overloaded operator()
- */
-template <typename T>
-struct MySSLFree {};
-
-/*
- * macro for defining custom deleters for openssl structs
- * usage DECLARE_DELETER(OpenSSLType)
- */
-#define DECLARE_DELETER(Type) template<> \
-    struct MySSLFree <Type>                  \
-    {                                        \
-        void operator() (Type* p)            \
-        {                                    \
-            Type ## _free(p);                  \
-        }                                    \
-                                         \
-    };
-
-/*
- * declare custom deleter for X509 structs
- */
-DECLARE_DELETER(X509)
-/*
- * declare custom deleter for OCSP_REQUEST structs
- */
-DECLARE_DELETER(OCSP_REQUEST)
-/*
- * declare custom deleter for OCSP_RESPONSE structs
- */
-DECLARE_DELETER(OCSP_RESPONSE)
-/*
- * declare custom deleter for OCSP_CERTID structs
- */
-DECLARE_DELETER(OCSP_CERTID)
-/*
- * declare custom deleter for OCSP_BASICRESP structs
- */
-DECLARE_DELETER(OCSP_BASICRESP)
-/*
- * declare custom deleter for X509_STORE structs
- */
-DECLARE_DELETER(X509_STORE)
-
-/*
- * undef it, so anyone could use that macro name
- */
-#undef DECLARE_DELETER
-
-/*
- * OpenSSL smart container
- * usage SSLSmartContainer <OpenSSLType> smartptr = ptrToOpenSSLType
- * remember to add OpenSSLType to macro list few lines above
- */
-template <typename T, typename deleter = MySSLFree<T> >
-class SSLSmartContainer
-{
-  public:
-    SSLSmartContainer() : m_pData(NULL)
-    {
-    }
-
-    /*
-     * explicit constructor, we don't want any auto casting
-     */
-    explicit SSLSmartContainer(T* pData)
-    {
-        m_pData = pData;
-    }
-
-    /*
-     * overloaded assignment operator
-     */
-    SSLSmartContainer & operator=(SSLSmartContainer& pContainer)
-    {
-        /*
-         * check if no assignment was done before
-         */
-        if (this != &pContainer) {
-            // if so, free internal data
-            deleter ssl_free;
-            ssl_free(m_pData);
-
-            // and assign new
-            m_pData = pContainer.m_pData;
-
-            pContainer.m_pData = NULL;
-        }
-
-        return *this;
-    }
-
-    SSLSmartContainer & operator=(T* pData)
-    {
-        /*
-         * check if no assignment was done before
-         */
-        if (m_pData != pData) {
-            // if so, free internal data
-            deleter ssl_free;
-            ssl_free(m_pData);
-
-            // and assign new
-            m_pData = pData;
-        }
-
-        return *this;
-    }
-
-    ~SSLSmartContainer()
-    {
-        deleter ssl_free;
-        ssl_free(m_pData);
-    }
-
-    /*
-     * overloaded operators for standardptr - like usage
-     */
-    SSLSmartContainer & operator*()
-    {
-        return *m_pData;
-    }
-    SSLSmartContainer* operator->()
-    {
-        return m_pData;
-    }
-
-    /*
-     * auto cast to T operator
-     */
-    operator T *() const { return m_pData;
-    }
-
-    /*
-     * detachs internal pointer from smart pointer
-     */
-    T* DetachPtr()
-    {
-        T* pData = m_pData;
-        m_pData = NULL;
-        return pData;
-    }
-
-  private:
-    /*
-     * blocked assignment from another types operator
-     */
-    template <typename S>
-    T & operator = (S& pContainer)
-    {
-        return *this;
-    }
-
-    /*
-     * internal data
-     */
-    T* m_pData;
-};
-
-#endif /* _SSLCONTAINERS_H */
-
diff --git a/vcore/src/vcore/VerificationStatus.cpp b/vcore/src/vcore/VerificationStatus.cpp
deleted file mode 100644 (file)
index 8007c0c..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*!
- * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
- * @version     0.2
- * @file        VerficationStatus.cpp
- * @brief       OCSP/CRL status.
- */
-#include <vcore/VerificationStatus.h>
-
-namespace ValidationCore {
-
-VerificationStatusSet::VerificationStatusSet()
-    : m_verdictMap(0)
-{}
-
-void VerificationStatusSet::add(VerificationStatus status) {
-    m_verdictMap |= status;
-}
-
-bool VerificationStatusSet::contains(VerificationStatus status) const {
-    return m_verdictMap & status;
-}
-
-bool VerificationStatusSet::isEmpty() const {
-    return 0 == m_verdictMap;
-}
-
-void VerificationStatusSet::operator+=(const VerificationStatusSet &second) {
-    m_verdictMap |= second.m_verdictMap;
-}
-
-void VerificationStatusSet::reset() {
-    m_verdictMap = 0;
-}
-
-VerificationStatus VerificationStatusSet::convertToStatus() const
-{
-    if (m_verdictMap & VERIFICATION_STATUS_REVOKED) {
-        return VERIFICATION_STATUS_REVOKED;
-    }
-
-    if (m_verdictMap & VERIFICATION_STATUS_VERIFICATION_ERROR) {
-        return VERIFICATION_STATUS_VERIFICATION_ERROR;
-    }
-
-    if (m_verdictMap & VERIFICATION_STATUS_ERROR) {
-        return VERIFICATION_STATUS_ERROR;
-    }
-
-    if (m_verdictMap & VERIFICATION_STATUS_UNKNOWN) {
-        return VERIFICATION_STATUS_UNKNOWN;
-    }
-
-    if (m_verdictMap & VERIFICATION_STATUS_CONNECTION_FAILED) {
-        return VERIFICATION_STATUS_CONNECTION_FAILED;
-    }
-
-    if (m_verdictMap & VERIFICATION_STATUS_NOT_SUPPORT) {
-        return VERIFICATION_STATUS_NOT_SUPPORT;
-    }
-
-    if (m_verdictMap & VERIFICATION_STATUS_GOOD) {
-        return VERIFICATION_STATUS_GOOD;
-    }
-
-    return VERIFICATION_STATUS_ERROR;
-}
-} // namespace ValidationCore
diff --git a/vcore/src/vcore/VerificationStatus.h b/vcore/src/vcore/VerificationStatus.h
deleted file mode 100644 (file)
index c43981c..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*!
- * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
- * @version     0.2
- * @file        VerificationStatus.h
- * @brief       OCSP/CRL status.
- */
-#ifndef _VALIDATION_CORE_VERIFICATION_STATUS_H_
-#define _VALIDATION_CORE_VERIFICATION_STATUS_H_
-
-namespace ValidationCore {
-enum VerificationStatus
-{
-    //! The certificate has not been revoked.
-    /*! Connection to OCSP responder was successful and the certificate
-     *  has not been revoked.
-     */
-    VERIFICATION_STATUS_GOOD = 1,
-
-    //! The certificate has been revoked.
-    /*! Connection to OCSP responder was successful and the certificate
-     *  has been revoked.
-     *  RFC2560: "The "revoked" state indicates that the certificate has
-     *  been revoked (either permanantly or temporarily
-     *  (on hold))."
-     */
-    VERIFICATION_STATUS_REVOKED = 1 << 1,
-
-    //! The certificate status is unknown.
-    /*! Connection to OCSP responder was successful and the certificate
-     *  has unknown status.
-     *
-     *  RFC2560: "The "unknown" state indicates that the responder
-     *  doesn't know about the certificate being requested."
-     */
-    VERIFICATION_STATUS_UNKNOWN = 1 << 2,
-
-    //! The certificate status was not figure out.
-    /*! The response from ocsp/crl server contains broken signature. */
-    VERIFICATION_STATUS_VERIFICATION_ERROR = 1 << 3,
-
-    //! The certificate status was not figure out.
-    /*! The certificate does not contain ocsp/crl extension. */
-    VERIFICATION_STATUS_NOT_SUPPORT = 1 << 4,
-
-    //! The certificate status was not figure out.
-    /*! The CertMgr could not connect to OCSP responder. */
-    VERIFICATION_STATUS_CONNECTION_FAILED = 1 << 5,
-
-    //! The certificate status is unknown due to internal error inside OCSP
-    VERIFICATION_STATUS_ERROR = 1 << 6
-};
-
-class VerificationStatusSet
-{
-  public:
-    VerificationStatusSet();
-
-    void add(VerificationStatus status);
-
-    bool contains(VerificationStatus status) const;
-
-    bool isEmpty() const;
-
-    void operator+=(const VerificationStatusSet &second);
-
-    void reset();
-
-    VerificationStatus convertToStatus() const;
-
-  private:
-    unsigned int m_verdictMap;
-};
-
-/* TODO this status should be defined in wrt-engine sources */
-enum WidgetVerificationStatus
-{
-    // All certificate has been veficated and all certificates are good.
-    // Widget is able to be installed.
-    WIDGET_VERIFICATION_STATUS_GOOD,
-    // Some certificate has been revoked. Widget is not able to be installed.
-    WIDGET_VERIFICATION_STATUS_REVOKED,
-};
-
-} // namespace ValidationCore
-
-#endif // _VALIDATION_CORE_VERIFICATION_STATUS_H_
diff --git a/vcore/src/vcore/WacOrigin.cpp b/vcore/src/vcore/WacOrigin.cpp
deleted file mode 100644 (file)
index 74ccd7c..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file
- * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
- * @version     1.0
- * @brief
- */
-#include "WacOrigin.h"
-
-#include <algorithm>
-#include <ctype.h>
-#include <idna.h>
-
-#include <dpl/log/log.h>
-
-#include <iri.h>
-#include "ValidatorCommon.h"
-
-namespace {
-const std::string SCHEME_HTTP = "http";
-const std::string SCHEME_HTTPS = "https";
-const int PORT_HTTP = 80;
-const int PORT_HTTPS = 443;
-}
-
-namespace ValidationCore {
-VC_DECLARE_DELETER(iri_struct, iri_destroy)
-
-WacOrigin::WacOrigin(const std::string &url) :
-    m_port(0),
-    m_parseFailed(false)
-{
-    parse(url.c_str());
-}
-
-WacOrigin::WacOrigin(const char *url) :
-    m_port(0),
-    m_parseFailed(false)
-{
-    parse(url);
-}
-
-bool WacOrigin::operator==(const WacOrigin &second) const
-{
-    if (m_parseFailed || second.m_parseFailed) {
-        return false;
-    }
-
-    return (m_scheme == second.m_scheme) &&
-           (m_host == second.m_host) &&
-           (m_port == second.m_port);
-}
-
-void WacOrigin::parse(const char *url)
-{
-    // Step are taken from algorihtm:
-    // http://www.w3.org/TR/html5/origin-0.html#origin-0
-
-    // Step 1
-    // Step 2
-    AutoPtr<iri_struct> iri(iri_parse(url));
-    if (!iri.get()) {
-        m_parseFailed = true;
-        return;
-    }
-
-    if (iri->scheme) {
-        m_scheme = iri->scheme;
-    } else {
-        m_parseFailed = true;
-        return;
-    }
-
-    // Step 3 - Skip this point.
-    // WAC 2.0 PRV - we are suport only "http" and "https" schemas.
-
-    // Step 4 - Todo
-
-    // Step 5
-    std::transform(m_scheme.begin(), m_scheme.end(), m_scheme.begin(), tolower);
-
-    // Step 6 - we only support "http" and "https" schemas
-    if ((m_scheme != SCHEME_HTTP) && (m_scheme != SCHEME_HTTPS)) {
-        m_parseFailed = true;
-        return;
-    }
-
-    // Step 7 - Skip. We do not support "file" schema.
-
-    // Step 8
-    if (iri->host) {
-        m_host = iri->host;
-    } else {
-        m_parseFailed = true;
-        return;
-    }
-
-    // Step 9
-    char *output = NULL;
-    if (IDNA_SUCCESS !=
-        idna_to_ascii_lz(m_host.c_str(), &output, IDNA_USE_STD3_ASCII_RULES)) {
-        LogError("libidn error");
-        m_parseFailed = true;
-        free(output);
-        return;
-    }
-    m_host = output;
-    free(output);
-
-    // Step 10
-    std::transform(m_host.begin(), m_host.end(), m_host.begin(), ::tolower);
-
-    // Step 11
-    if (iri->port) {
-        m_port = iri->port;
-    } else {
-        setPort();
-    }
-
-    // Step 12 - Skip it. We do not return anything.
-    // User should create geters if he need access to schema/host/port.
-}
-
-void WacOrigin::setPort()
-{
-    if (SCHEME_HTTP == m_scheme) {
-        m_port = PORT_HTTP;
-        return;
-    } else if (SCHEME_HTTPS == m_scheme) {
-        m_port = PORT_HTTPS;
-        return;
-    } else {
-        LogDebug("Scheme %s is not support by WAC2.0 " << m_scheme);
-        m_parseFailed = true;
-    }
-}
-} // namespace ValidationCore
diff --git a/vcore/src/vcore/WacOrigin.h b/vcore/src/vcore/WacOrigin.h
deleted file mode 100644 (file)
index d706fe3..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/*
- * @file
- * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
- * @version     1.0
- * @brief       This is stub for HTML5Origin implementation.
- *              This implementation is compatible with WAC 2.0 PRV requirements
- *              and is _not_ full compatible with ORIGIN algorithm requirements
- *              defined in http://www.w3.org/TR/html5/origin-0.html#origin-0
- */
-#ifndef _WRT_ENGINE_SRC_INSTALLER_CORE_VALIDATION_CORE_HTML5ORIGIN_H_
-#define _WRT_ENGINE_SRC_INSTALLER_CORE_VALIDATION_CORE_HTML5ORIGIN_H_
-
-#include <string>
-
-namespace ValidationCore {
-class WacOrigin
-{
-  public:
-
-    WacOrigin(const std::string &url);
-    WacOrigin(const char *url);
-
-    bool operator!=(const WacOrigin &second) const
-    {
-        return !(operator==(second));
-    }
-
-    bool operator==(const WacOrigin &second) const;
-
-  private:
-    void parse(const char *url);
-    void setPort();
-
-    std::string m_scheme;
-    std::string m_host;
-    int m_port;
-    bool m_parseFailed; // if parsing failed we should return unique identifier
-};
-} //namespace ValidationCore
-
-#endif // _WRT_ENGINE_SRC_INSTALLER_CORE_VALIDATION_CORE_HTML5ORIGIN_H_
similarity index 87%
rename from vcore/src/vcore/Base64.cpp
rename to vcore/vcore/Base64.cpp
index 85edcae..3b844b5 100644 (file)
@@ -15,6 +15,7 @@
  */
 #include <algorithm>
 #include <string>
+#include <memory>
 #include <string.h>
 #include <openssl/bio.h>
 #include <openssl/evp.h>
@@ -22,8 +23,6 @@
 
 #include <dpl/log/log.h>
 
-#include <dpl/scoped_free.h>
-
 #include <vcore/Base64.h>
 
 namespace ValidationCore {
@@ -114,7 +113,9 @@ void Base64Decoder::append(const std::string &data)
 
 static bool whiteCharacter(char a)
 {
-    if (a == '\n') { return true; }
+    if (a == '\n')
+        return true;
+
     return false;
 }
 
@@ -137,34 +138,36 @@ bool Base64Decoder::finalize()
             || m_input[i] == '+'
             || m_input[i] == '/'
             || m_input[i] == '=')
-        {
             continue;
-        }
         LogError("Base64 input contains illegal chars: " << m_input[i]);
         return false;
     }
 
     BIO *b64, *bmem;
     size_t len = m_input.size();
-
-    VcoreDPL::ScopedFree<char> buffer(static_cast<char*>(malloc(len)));
-
-    if (!buffer) {
-        LogError("Error in malloc.");
-        VcoreThrowMsg(Exception::InternalError, "Error in malloc.");
+    std::shared_ptr<char> buffer(new char[len], [](char *p){delete []p;});
+    if (!buffer.get()) {
+        LogError("Error in new");
+        VcoreThrowMsg(Exception::InternalError, "Error in new");
     }
 
-    memset(buffer.Get(), 0, len);
+    memset(buffer.get(), 0, len);
     b64 = BIO_new(BIO_f_base64());
     if (!b64) {
         LogError("Couldn't create BIO object.");
         VcoreThrowMsg(Exception::InternalError, "Couldn't create BIO object.");
     }
     BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
-    VcoreDPL::ScopedFree<char> tmp(strdup(m_input.c_str()));
+
+    std::shared_ptr<char> tmp(strdup(m_input.c_str()), [](char *p){free(p);});
+    if (!tmp.get()) {
+        LogError("Error in strdup");
+        VcoreThrowMsg(Exception::InternalError, "Error in strdup");
+    }
+
     m_input.clear();
 
-    bmem = BIO_new_mem_buf(tmp.Get(), len);
+    bmem = BIO_new_mem_buf(tmp.get(), len);
 
     if (!bmem) {
         BIO_free(b64);
@@ -180,18 +183,18 @@ bool Base64Decoder::finalize()
         VcoreThrowMsg(Exception::InternalError, "Internal error in BIO");
     }
 
-    int readlen = BIO_read(bmem, buffer.Get(), len);
+    int readlen = BIO_read(bmem, buffer.get(), len);
     m_output.clear();
 
     bool status = true;
 
-    if (readlen > 0) {
-        m_output.append(buffer.Get(), readlen);
-    } else {
+    if (readlen > 0)
+        m_output.append(buffer.get(), readlen);
+    else
         status = false;
-    }
 
     BIO_free_all(bmem);
+
     return status;
 }
 
similarity index 85%
rename from vcore/src/vcore/CertificateCollection.cpp
rename to vcore/vcore/CertificateCollection.cpp
index 80df380..5f27f8a 100644 (file)
@@ -29,8 +29,6 @@
 #include <cert-svc/ccert.h>
 #include <cert-svc/cprimitives.h>
 
-#include <dpl/binary_queue.h>
-#include <dpl/foreach.h>
 #include <dpl/log/log.h>
 #include <vcore/Base64.h>
 
@@ -126,53 +124,13 @@ void CertificateCollection::load(const CertificateList &certList)
               std::back_inserter(m_certList));
 }
 
-bool CertificateCollection::load(const std::string &buffer)
-{
-    Base64Decoder base64;
-    base64.reset();
-    base64.append(buffer);
-    if (!base64.finalize()) {
-        LogWarning("Error during chain decoding");
-        return false;
-    }
-    std::string binaryData = base64.get();
-
-    VcoreDPL::BinaryQueue queue;
-    queue.AppendCopy(binaryData.c_str(), binaryData.size());
-
-    int certNum;
-    queue.FlattenConsume(&certNum, sizeof(int));
-
-    CertificateList list;
-    CertificatePtr certPtr;
-
-    for (int i = 0; i < certNum; ++i) {
-        int certSize;
-        queue.FlattenConsume(&certSize, sizeof(int));
-        std::vector<char> rawDERCert;
-        rawDERCert.resize(certSize);
-        queue.FlattenConsume(&rawDERCert[0], certSize);
-        VcoreTry {
-            list.push_back(CertificatePtr(new Certificate(std::string(
-                rawDERCert.begin(),
-                rawDERCert.end()))));
-        } VcoreCatch (Certificate::Exception::Base) {
-            LogWarning("Error during certificate creation.");
-            return false;
-        }
-
-        LogDebug("Loading certificate. Certificate common name: " << list.back()->getCommonName());
-    }
-    load(list);
-    return true;
-}
-
 std::string CertificateCollection::toBase64String() const
 {
     std::ostringstream output;
     int certNum = m_certList.size();
     output << toBinaryString(certNum);
-    FOREACH(i, m_certList){
+
+    for (auto i = m_certList.begin(); i != m_certList.end(); ++i) {
         std::string derCert = (*i)->getDER();
         output << toBinaryString(derCert.size());
         output << derCert;
similarity index 93%
rename from vcore/src/vcore/CertificateCollection.h
rename to vcore/vcore/CertificateCollection.h
index e47e3f6..a923b4d 100644 (file)
@@ -64,16 +64,6 @@ public:
     void load(const CertificateList &certList);
 
     /*
-     * This function will return false if base64 string is broken
-     * (is not encoded in base64 format) or one from certificate
-     * is broken (is not encoded in der format).
-     *
-     * This function will add new certificate to collection.
-     * This function DOES NOT clean collection.
-     */
-    bool load(const std::string &base64);
-
-    /*
      * This function will return all certificates from
      * collection encoded in base64 format.
      */
similarity index 94%
rename from vcore/src/vcore/ReferenceValidator.cpp
rename to vcore/vcore/ReferenceValidator.cpp
index d8b839e..8fd1a30 100644 (file)
@@ -28,7 +28,6 @@
 
 #include <pcrecpp.h>
 
-#include <dpl/errno_string.h>
 #include <dpl/log/log.h>
 
 namespace {
@@ -89,7 +88,6 @@ class ReferenceValidator::Impl
     }
 
     std::string m_dirpath;
-    std::string m_errorDescription;
     pcrecpp::RE m_signatureRegexp;
 };
 
@@ -146,7 +144,6 @@ ReferenceValidator::Result ReferenceValidator::Impl::dfsCheckDirectories(
 
     if ((dp = opendir(currentDir.c_str())) == NULL) {
         LogError("Error opening directory : " << currentDir);
-        m_errorDescription = currentDir;
         return ERROR_OPENING_DIR;
     }
 
@@ -188,20 +185,16 @@ ReferenceValidator::Result ReferenceValidator::Impl::dfsCheckDirectories(
                 LogDebug("Found file : " << (directory + dirp->d_name));
                 LogError("Unknown ERROR_REFERENCE_NOT_FOUND.");
                 closedir(dp);
-                m_errorDescription = directory + dirp->d_name;
                 return ERROR_REFERENCE_NOT_FOUND;
             }
         } else {
             LogError("Unknown file type.");
             closedir(dp);
-            m_errorDescription = directory + dirp->d_name;
             return ERROR_UNSUPPORTED_FILE_TYPE;
         }
     }
 
     if (errno != 0) {
-        m_errorDescription = VcoreDPL::GetErrnoString();
-        LogError("readdir failed. Errno code : " << errno << ", Description : " << m_errorDescription);
         closedir(dp);
         return ERROR_READING_DIR;
     }
similarity index 97%
rename from vcore/src/vcore/TimeConversion.h
rename to vcore/vcore/TimeConversion.h
index 6b50503..c3df017 100644 (file)
@@ -23,8 +23,7 @@
 #define _VALIDATION_CORE_TIMECONVERSION_H_
 
 #include <ctime>
-
-#include <openssl/x509.h>
+#include <openssl/asn1.h>
 
 namespace ValidationCore {
 // from OpenSSL asn1/a_utctm.c code
similarity index 97%
rename from vcore/src/vcore/ValidatorFactories.h
rename to vcore/vcore/ValidatorFactories.h
index 075eef1..6b75fe5 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef _WRT_ENGINE_SRC_INSTALLER_CORE_VALIDATION_CORE_VALIDATORFACTORY_H_
 #define _WRT_ENGINE_SRC_INSTALLER_CORE_VALIDATION_CORE_VALIDATORFACTORY_H_
 
-#include <CertificateIdentifier.h>
+#include <vcore/CertificateIdentifier.h>
 
 namespace ValidationCore {
 // First use of CertificateIdentificator should initialized it.
similarity index 99%
rename from vcore/src/vcore/api.cpp
rename to vcore/vcore/api.cpp
index 6918dfc..5f05667 100644 (file)
@@ -43,7 +43,6 @@
 #include <openssl/evp.h>
 #include <openssl/bio.h>
 
-#include <dpl/foreach.h>
 #include <dpl/log/log.h>
 
 #include <cert-svc/cinstance.h>
@@ -79,9 +78,9 @@ public:
     {}
 
     ~CertSvcInstanceImpl(){
-        FOREACH(it, m_allocatedStringSet) {
+        auto it = m_allocatedStringSet.begin();
+        for (; it != m_allocatedStringSet.end(); ++it)
             delete[] *it;
-        }
     }
 
     inline void reset(){
@@ -92,9 +91,9 @@ public:
         m_stringListCounter = 0;
         m_stringListMap.clear();
 
-        FOREACH(it, m_allocatedStringSet) {
+        auto it = m_allocatedStringSet.begin();
+        for (; it != m_allocatedStringSet.end(); ++it)
             delete[] *it;
-        }
 
         m_allocatedStringSet.clear();
     }
similarity index 99%
rename from vcore/src/vcore/cert-svc-client.c
rename to vcore/vcore/cert-svc-client.c
index 4dc5214..1da8b0d 100644 (file)
@@ -32,7 +32,7 @@
 
 #include <cert-service-debug.h>
 
-#include <cert-svc-client.h>
+#include <vcore/cert-svc-client.h>
 
 void initialize_res_data(VcoreResponseData *pData)
 {
similarity index 99%
rename from vcore/src/vcore/pkcs12.cpp
rename to vcore/vcore/pkcs12.cpp
index 9ee5483..448208c 100644 (file)
 #include <cert-service.h>
 #include <cert-service-debug.h>
 #include <cert-svc/cerror.h>
-#include <cert-svc-client.h>
 
+#include <vcore/cert-svc-client.h>
 #include <vcore/utils.h>
-#include <pkcs12.h>
+
+#include <vcore/pkcs12.h>
 
 #define SYSCALL(call) while(((call) == -1) && (errno == EINTR))
 
similarity index 100%
rename from vcore/src/vcore/utils.c
rename to vcore/vcore/utils.c
similarity index 100%
rename from vcore/src/vcore/utils.h
rename to vcore/vcore/utils.h