diff --git a/.gitignore b/.gitignore
index 8730854e9..d4e39e14e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -47,7 +47,7 @@ tests/linphonetester_*
tests/tests.output
WORK
.d
-google-services.json
+app/google-services.json
.*clang*
**/*.iml
src/linphone-wrapper
diff --git a/.gitmodules b/.gitmodules
index 379a64301..020d102dd 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,122 +1,3 @@
-[submodule "submodules/linphone"]
- path = submodules/linphone
- url = https://gitlab.linphone.org/BC/public/linphone.git
-[submodule "submodules/externals/gsm"]
- path = submodules/externals/gsm
- url = https://gitlab.linphone.org/BC/public/external/gsm.git
-[submodule "submodules/externals/speex"]
- path = submodules/externals/speex
- url = https://gitlab.linphone.org/BC/public/external/speex.git
-[submodule "submodules/externals/ffmpeg"]
- path = submodules/externals/ffmpeg
- url = https://gitlab.linphone.org/BC/public/external/ffmpeg.git
- ignore = dirty
-[submodule "submodules/externals/x264"]
- path = submodules/externals/x264
- url = https://gitlab.linphone.org/BC/public/external/x264.git
- ignore = dirty
-[submodule "submodules/msx264"]
- path = submodules/msx264
- url = https://gitlab.linphone.org/BC/public/msx264.git
-[submodule "submodules/externals/opencore-amr"]
- path = submodules/externals/opencore-amr
- url = https://gitlab.linphone.org/BC/public/external/opencore-amr.git
- ignore = dirty
-[submodule "submodules/msamr"]
- path = submodules/msamr
- url = https://gitlab.linphone.org/BC/public/msamr.git
-[submodule "submodules/externals/libvpx"]
- path = submodules/externals/libvpx
- url = https://gitlab.linphone.org/BC/public/external/libvpx.git
- ignore = dirty
-[submodule "submodules/bzrtp"]
- path = submodules/bzrtp
- url = https://gitlab.linphone.org/BC/public/bzrtp.git
-[submodule "submodules/externals/srtp"]
- path = submodules/externals/srtp
- url = https://gitlab.linphone.org/BC/public/external/srtp.git
-[submodule "submodules/mssilk"]
- path = submodules/mssilk
- url = https://gitlab.linphone.org/BC/public/mssilk.git
-[submodule "submodules/bcg729"]
- path = submodules/bcg729
- url = https://gitlab.linphone.org/BC/public/bcg729.git
-[submodule "submodules/belle-sip"]
- path = submodules/belle-sip
- url = https://gitlab.linphone.org/BC/public/belle-sip.git
-[submodule "submodules/externals/libxml2"]
- path = submodules/externals/libxml2
- url = https://gitlab.linphone.org/BC/public/external/libxml2.git
- ignore = dirty
-[submodule "submodules/externals/libupnp"]
- path = submodules/externals/libupnp
- url = https://gitlab.linphone.org/BC/public/external/libupnp.git
-[submodule "submodules/externals/opus"]
- path = submodules/externals/opus
- url = https://gitlab.linphone.org/BC/public/external/opus.git
- ignore = dirty
-[submodule "submodules/mswebrtc"]
- path = submodules/mswebrtc
- url = https://gitlab.linphone.org/BC/public/mswebrtc.git
-[submodule "submodules/msopenh264"]
- path = submodules/msopenh264
- url = https://gitlab.linphone.org/BC/public/msopenh264.git
-[submodule "submodules/externals/openh264"]
- path = submodules/externals/openh264
- url = https://gitlab.linphone.org/BC/public/external/openh264.git
- ignore = dirty
-[submodule "submodules/mscodec2"]
- path = submodules/mscodec2
- url = https://gitlab.linphone.org/BC/public/mscodec2.git
-[submodule "submodules/bctoolbox"]
- path = submodules/bctoolbox
- url = https://gitlab.linphone.org/BC/public/bctoolbox.git
-[submodule "submodules/externals/mbedtls"]
- path = submodules/externals/mbedtls
- url = https://gitlab.linphone.org/BC/public/external/mbedtls.git
- ignore = dirty
-[submodule "submodules/cmake-builder"]
- path = submodules/cmake-builder
- url = https://gitlab.linphone.org/BC/public/linphone-cmake-builder.git
-[submodule "submodules/externals/bv16-floatingpoint"]
- path = submodules/externals/bv16-floatingpoint
- url = https://gitlab.linphone.org/BC/public/external/bv16-floatingpoint.git
-[submodule "submodules/belr"]
- path = submodules/belr
- url = https://gitlab.linphone.org/BC/public/belr.git
-[submodule "submodules/belcard"]
- path = submodules/belcard
- url = https://gitlab.linphone.org/BC/public/belcard.git
-[submodule "submodules/bcunit"]
- path = submodules/bcunit
- url = https://gitlab.linphone.org/BC/public/bcunit.git
-[submodule "submodules/externals/vo-amrwbenc"]
- path = submodules/externals/vo-amrwbenc
- url = https://gitlab.linphone.org/BC/public/external/vo-amrwbenc.git
-[submodule "submodules/externals/codec2"]
- path = submodules/externals/codec2
- url = https://gitlab.linphone.org/BC/public/external/codec2.git
-[submodule "submodules/externals/libjpeg-turbo"]
- path = submodules/externals/libjpeg-turbo
- url = https://gitlab.linphone.org/BC/public/external/libjpeg-turbo.git
-[submodule "submodules/mediastreamer2"]
- path = submodules/mediastreamer2
- url = https://gitlab.linphone.org/BC/public/mediastreamer2.git
-[submodule "submodules/oRTP"]
- path = submodules/oRTP
- url = https://gitlab.linphone.org/BC/public/ortp.git
-[submodule "submodules/bcmatroska2"]
- path = submodules/bcmatroska2
- url = https://gitlab.linphone.org/BC/public/bcmatroska2.git
-[submodule "submodules/externals/xerces-c"]
- path = submodules/externals/xerces-c
- url = https://gitlab.linphone.org/BC/public/external/xerces-c.git
-[submodule "submodules/externals/libxsd"]
- path = submodules/externals/libxsd
- url = https://gitlab.linphone.org/BC/public/external/libxsd.git
-[submodule "submodules/externals/soci"]
- path = submodules/externals/soci
- url = https://gitlab.linphone.org/BC/public/external/soci.git
-[submodule "submodules/externals/zxing-cpp"]
- path = submodules/externals/zxing-cpp
- url = https://gitlab.linphone.org/BC/public/external/zxing-cpp.git
+[submodule "linphone-sdk"]
+ path = linphone-sdk
+ url = git@gitlab.linphone.org:BC/public/linphone-sdk.git
diff --git a/AndroidManifestSdk.xml b/AndroidManifestSdk.xml
deleted file mode 100755
index 17de7b7ee..000000000
--- a/AndroidManifestSdk.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 000000000..796b96d1c
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 000000000..c5aa56c12
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,120 @@
+apply plugin: 'com.android.application'
+
+def getPackageName() {
+ return "org.linphone"
+}
+
+def firebaseEnabled() {
+ File googleFile = new File('google-services.json')
+ return googleFile.exists()
+}
+
+def isLocalAarAvailable() {
+ File debugAar = new File('linphone-sdk/build/linphone-sdk/bin/outputs/aar/linphone-sdk-android-debug.aar')
+ File releaseAar = new File('linphone-sdk/build/linphone-sdk/bin/outputs/aar/linphone-sdk-android-release.aar')
+ return debugAar.exists() || releaseAar.exists()
+}
+
+if (firebaseEnabled()) {
+ apply plugin: 'com.google.gms.google-services'
+}
+
+///// Exclude Files /////
+
+def excludeFiles = []
+// Exclude firebase file if not enable
+if (!firebaseEnabled()) {
+ excludeFiles.add('**/Firebase*')
+ println '[Push Notification] Firebase disabled'
+}
+
+def excludePackage = []
+
+excludePackage.add('**/gdb.*')
+excludePackage.add('**/libopenh264**')
+excludePackage.add('**/**tester**')
+excludePackage.add('**/LICENSE.txt')
+
+/////////////////////////
+
+repositories {
+ if (isLocalAarAvailable()) {
+ flatDir {
+ dirs './linphone-sdk/build/linphone-sdk/bin/outputs/aar/'
+ }
+ } else {
+ maven {
+ url "https://gitlab.linphone.org/BC/public/maven_repository/raw/master"
+ }
+ }
+}
+
+dependencies {
+ androidTestImplementation('com.android.support.test.espresso:espresso-core:+') {
+ exclude module: 'support-annotations'
+ }
+ androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.6.3'
+ androidTestImplementation 'junit:junit:4.12'
+
+ if (firebaseEnabled()) {
+ classpath 'com.google.gms:google-services:3.1.0'
+ implementation 'com.google.firebase:firebase-messaging:15.0.2'
+ }
+ implementation 'org.apache.commons:commons-compress:1.16.1'
+ implementation 'com.android.support:support-v4:27.1.1'
+ implementation 'com.android.support:recyclerview-v7:27.1.1'
+ implementation 'com.android.support:appcompat-v7:27.1.1'
+ implementation 'com.android.support:design:27.1.1'
+
+ if (isLocalAarAvailable()) {
+ implementation project(":linphone-sdk-android")
+ } else {
+ releaseImplementation 'org.linphone:liblinphone-sdk:${defaultConfig.versionName}'
+ debugImplementation 'org.linphone:liblinphone-sdk:${defaultConfig.versionName}-DEBUG'
+ }
+}
+
+android {
+ compileSdkVersion 28
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 28
+ versionCode 4100
+ versionName "4.1"
+ applicationId getPackageName()
+ multiDexEnabled true
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ signingConfigs {
+ release {
+ storeFile file(RELEASE_STORE_FILE)
+ storePassword RELEASE_STORE_PASSWORD
+ keyAlias RELEASE_KEY_ALIAS
+ keyPassword RELEASE_KEY_PASSWORD
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled true
+ signingConfig signingConfigs.release
+ }
+ debug {
+ applicationIdSuffix ".debug"
+ debuggable true
+ jniDebuggable true
+ }
+ }
+
+ sourceSets {
+ main {
+ packagingOptions {
+ excludes = excludePackage
+ }
+ }
+ }
+ packagingOptions {
+ pickFirst 'META-INF/NOTICE'
+ pickFirst 'META-INF/LICENSE'
+ exclude 'META-INF/MANIFEST.MF'
+ }
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 000000000..f1b424510
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
similarity index 97%
rename from AndroidManifest.xml
rename to app/src/main/AndroidManifest.xml
index 9d09d8e8a..032c044ee 100755
--- a/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,13 +1,7 @@
-
-
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:installLocation="auto">
diff --git a/src/android/com/android/vending/billing/IInAppBillingService.aidl b/app/src/main/java/com/android/vending/billing/IInAppBillingService.aidl
similarity index 100%
rename from src/android/com/android/vending/billing/IInAppBillingService.aidl
rename to app/src/main/java/com/android/vending/billing/IInAppBillingService.aidl
diff --git a/src/android/org/linphone/BandwidthManager.java b/app/src/main/java/org/linphone/BandwidthManager.java
similarity index 100%
rename from src/android/org/linphone/BandwidthManager.java
rename to app/src/main/java/org/linphone/BandwidthManager.java
diff --git a/src/android/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java
similarity index 100%
rename from src/android/org/linphone/LinphoneManager.java
rename to app/src/main/java/org/linphone/LinphoneManager.java
diff --git a/src/android/org/linphone/LinphonePreferences.java b/app/src/main/java/org/linphone/LinphonePreferences.java
similarity index 100%
rename from src/android/org/linphone/LinphonePreferences.java
rename to app/src/main/java/org/linphone/LinphonePreferences.java
diff --git a/src/android/org/linphone/LinphoneService.java b/app/src/main/java/org/linphone/LinphoneService.java
similarity index 100%
rename from src/android/org/linphone/LinphoneService.java
rename to app/src/main/java/org/linphone/LinphoneService.java
diff --git a/src/android/org/linphone/LinphoneUtils.java b/app/src/main/java/org/linphone/LinphoneUtils.java
similarity index 100%
rename from src/android/org/linphone/LinphoneUtils.java
rename to app/src/main/java/org/linphone/LinphoneUtils.java
diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/app/src/main/java/org/linphone/activities/LinphoneActivity.java
similarity index 100%
rename from src/android/org/linphone/activities/LinphoneActivity.java
rename to app/src/main/java/org/linphone/activities/LinphoneActivity.java
diff --git a/src/android/org/linphone/activities/LinphoneGenericActivity.java b/app/src/main/java/org/linphone/activities/LinphoneGenericActivity.java
similarity index 100%
rename from src/android/org/linphone/activities/LinphoneGenericActivity.java
rename to app/src/main/java/org/linphone/activities/LinphoneGenericActivity.java
diff --git a/src/android/org/linphone/activities/LinphoneLauncherActivity.java b/app/src/main/java/org/linphone/activities/LinphoneLauncherActivity.java
similarity index 100%
rename from src/android/org/linphone/activities/LinphoneLauncherActivity.java
rename to app/src/main/java/org/linphone/activities/LinphoneLauncherActivity.java
diff --git a/src/android/org/linphone/assistant/AssistantActivity.java b/app/src/main/java/org/linphone/assistant/AssistantActivity.java
similarity index 100%
rename from src/android/org/linphone/assistant/AssistantActivity.java
rename to app/src/main/java/org/linphone/assistant/AssistantActivity.java
diff --git a/src/android/org/linphone/assistant/AssistantFragmentsEnum.java b/app/src/main/java/org/linphone/assistant/AssistantFragmentsEnum.java
similarity index 100%
rename from src/android/org/linphone/assistant/AssistantFragmentsEnum.java
rename to app/src/main/java/org/linphone/assistant/AssistantFragmentsEnum.java
diff --git a/src/android/org/linphone/assistant/CodecDownloaderFragment.java b/app/src/main/java/org/linphone/assistant/CodecDownloaderFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/CodecDownloaderFragment.java
rename to app/src/main/java/org/linphone/assistant/CodecDownloaderFragment.java
diff --git a/src/android/org/linphone/assistant/CountryListFragment.java b/app/src/main/java/org/linphone/assistant/CountryListFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/CountryListFragment.java
rename to app/src/main/java/org/linphone/assistant/CountryListFragment.java
diff --git a/src/android/org/linphone/assistant/CreateAccountActivationFragment.java b/app/src/main/java/org/linphone/assistant/CreateAccountActivationFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/CreateAccountActivationFragment.java
rename to app/src/main/java/org/linphone/assistant/CreateAccountActivationFragment.java
diff --git a/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java b/app/src/main/java/org/linphone/assistant/CreateAccountCodeActivationFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java
rename to app/src/main/java/org/linphone/assistant/CreateAccountCodeActivationFragment.java
diff --git a/src/android/org/linphone/assistant/CreateAccountFragment.java b/app/src/main/java/org/linphone/assistant/CreateAccountFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/CreateAccountFragment.java
rename to app/src/main/java/org/linphone/assistant/CreateAccountFragment.java
diff --git a/src/android/org/linphone/assistant/EchoCancellerCalibrationFragment.java b/app/src/main/java/org/linphone/assistant/EchoCancellerCalibrationFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/EchoCancellerCalibrationFragment.java
rename to app/src/main/java/org/linphone/assistant/EchoCancellerCalibrationFragment.java
diff --git a/src/android/org/linphone/assistant/LinphoneLoginFragment.java b/app/src/main/java/org/linphone/assistant/LinphoneLoginFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/LinphoneLoginFragment.java
rename to app/src/main/java/org/linphone/assistant/LinphoneLoginFragment.java
diff --git a/src/android/org/linphone/assistant/LoginFragment.java b/app/src/main/java/org/linphone/assistant/LoginFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/LoginFragment.java
rename to app/src/main/java/org/linphone/assistant/LoginFragment.java
diff --git a/src/android/org/linphone/assistant/RemoteProvisioningActivity.java b/app/src/main/java/org/linphone/assistant/RemoteProvisioningActivity.java
similarity index 100%
rename from src/android/org/linphone/assistant/RemoteProvisioningActivity.java
rename to app/src/main/java/org/linphone/assistant/RemoteProvisioningActivity.java
diff --git a/src/android/org/linphone/assistant/RemoteProvisioningFragment.java b/app/src/main/java/org/linphone/assistant/RemoteProvisioningFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/RemoteProvisioningFragment.java
rename to app/src/main/java/org/linphone/assistant/RemoteProvisioningFragment.java
diff --git a/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java b/app/src/main/java/org/linphone/assistant/RemoteProvisioningLoginActivity.java
similarity index 100%
rename from src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java
rename to app/src/main/java/org/linphone/assistant/RemoteProvisioningLoginActivity.java
diff --git a/src/android/org/linphone/assistant/WelcomeFragment.java b/app/src/main/java/org/linphone/assistant/WelcomeFragment.java
similarity index 100%
rename from src/android/org/linphone/assistant/WelcomeFragment.java
rename to app/src/main/java/org/linphone/assistant/WelcomeFragment.java
diff --git a/src/android/org/linphone/call/CallActivity.java b/app/src/main/java/org/linphone/call/CallActivity.java
similarity index 100%
rename from src/android/org/linphone/call/CallActivity.java
rename to app/src/main/java/org/linphone/call/CallActivity.java
diff --git a/src/android/org/linphone/call/CallAudioFragment.java b/app/src/main/java/org/linphone/call/CallAudioFragment.java
similarity index 100%
rename from src/android/org/linphone/call/CallAudioFragment.java
rename to app/src/main/java/org/linphone/call/CallAudioFragment.java
diff --git a/src/android/org/linphone/call/CallHistoryAdapter.java b/app/src/main/java/org/linphone/call/CallHistoryAdapter.java
similarity index 100%
rename from src/android/org/linphone/call/CallHistoryAdapter.java
rename to app/src/main/java/org/linphone/call/CallHistoryAdapter.java
diff --git a/src/android/org/linphone/call/CallIncomingActivity.java b/app/src/main/java/org/linphone/call/CallIncomingActivity.java
similarity index 100%
rename from src/android/org/linphone/call/CallIncomingActivity.java
rename to app/src/main/java/org/linphone/call/CallIncomingActivity.java
diff --git a/src/android/org/linphone/call/CallManager.java b/app/src/main/java/org/linphone/call/CallManager.java
similarity index 100%
rename from src/android/org/linphone/call/CallManager.java
rename to app/src/main/java/org/linphone/call/CallManager.java
diff --git a/src/android/org/linphone/call/CallOutgoingActivity.java b/app/src/main/java/org/linphone/call/CallOutgoingActivity.java
similarity index 100%
rename from src/android/org/linphone/call/CallOutgoingActivity.java
rename to app/src/main/java/org/linphone/call/CallOutgoingActivity.java
diff --git a/src/android/org/linphone/call/CallVideoFragment.java b/app/src/main/java/org/linphone/call/CallVideoFragment.java
similarity index 100%
rename from src/android/org/linphone/call/CallVideoFragment.java
rename to app/src/main/java/org/linphone/call/CallVideoFragment.java
diff --git a/src/android/org/linphone/chat/ChatBubbleViewHolder.java b/app/src/main/java/org/linphone/chat/ChatBubbleViewHolder.java
similarity index 100%
rename from src/android/org/linphone/chat/ChatBubbleViewHolder.java
rename to app/src/main/java/org/linphone/chat/ChatBubbleViewHolder.java
diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/app/src/main/java/org/linphone/chat/ChatCreationFragment.java
similarity index 100%
rename from src/android/org/linphone/chat/ChatCreationFragment.java
rename to app/src/main/java/org/linphone/chat/ChatCreationFragment.java
diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/app/src/main/java/org/linphone/chat/ChatEventsAdapter.java
similarity index 100%
rename from src/android/org/linphone/chat/ChatEventsAdapter.java
rename to app/src/main/java/org/linphone/chat/ChatEventsAdapter.java
diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/app/src/main/java/org/linphone/chat/ChatListFragment.java
similarity index 100%
rename from src/android/org/linphone/chat/ChatListFragment.java
rename to app/src/main/java/org/linphone/chat/ChatListFragment.java
diff --git a/src/android/org/linphone/chat/ChatRoomViewHolder.java b/app/src/main/java/org/linphone/chat/ChatRoomViewHolder.java
similarity index 100%
rename from src/android/org/linphone/chat/ChatRoomViewHolder.java
rename to app/src/main/java/org/linphone/chat/ChatRoomViewHolder.java
diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/app/src/main/java/org/linphone/chat/ChatRoomsAdapter.java
similarity index 100%
rename from src/android/org/linphone/chat/ChatRoomsAdapter.java
rename to app/src/main/java/org/linphone/chat/ChatRoomsAdapter.java
diff --git a/src/android/org/linphone/chat/ChatScrollListener.java b/app/src/main/java/org/linphone/chat/ChatScrollListener.java
similarity index 100%
rename from src/android/org/linphone/chat/ChatScrollListener.java
rename to app/src/main/java/org/linphone/chat/ChatScrollListener.java
diff --git a/src/android/org/linphone/chat/DeviceAdapter.java b/app/src/main/java/org/linphone/chat/DeviceAdapter.java
similarity index 100%
rename from src/android/org/linphone/chat/DeviceAdapter.java
rename to app/src/main/java/org/linphone/chat/DeviceAdapter.java
diff --git a/src/android/org/linphone/chat/DeviceChildViewHolder.java b/app/src/main/java/org/linphone/chat/DeviceChildViewHolder.java
similarity index 100%
rename from src/android/org/linphone/chat/DeviceChildViewHolder.java
rename to app/src/main/java/org/linphone/chat/DeviceChildViewHolder.java
diff --git a/src/android/org/linphone/chat/DeviceGroupViewHolder.java b/app/src/main/java/org/linphone/chat/DeviceGroupViewHolder.java
similarity index 100%
rename from src/android/org/linphone/chat/DeviceGroupViewHolder.java
rename to app/src/main/java/org/linphone/chat/DeviceGroupViewHolder.java
diff --git a/src/android/org/linphone/chat/DevicesFragment.java b/app/src/main/java/org/linphone/chat/DevicesFragment.java
similarity index 100%
rename from src/android/org/linphone/chat/DevicesFragment.java
rename to app/src/main/java/org/linphone/chat/DevicesFragment.java
diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/app/src/main/java/org/linphone/chat/GroupChatFragment.java
similarity index 100%
rename from src/android/org/linphone/chat/GroupChatFragment.java
rename to app/src/main/java/org/linphone/chat/GroupChatFragment.java
diff --git a/src/android/org/linphone/chat/GroupInfoAdapter.java b/app/src/main/java/org/linphone/chat/GroupInfoAdapter.java
similarity index 100%
rename from src/android/org/linphone/chat/GroupInfoAdapter.java
rename to app/src/main/java/org/linphone/chat/GroupInfoAdapter.java
diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/app/src/main/java/org/linphone/chat/GroupInfoFragment.java
similarity index 100%
rename from src/android/org/linphone/chat/GroupInfoFragment.java
rename to app/src/main/java/org/linphone/chat/GroupInfoFragment.java
diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/app/src/main/java/org/linphone/chat/ImdnFragment.java
similarity index 100%
rename from src/android/org/linphone/chat/ImdnFragment.java
rename to app/src/main/java/org/linphone/chat/ImdnFragment.java
diff --git a/src/android/org/linphone/compatibility/ApiElevenPlus.java b/app/src/main/java/org/linphone/compatibility/ApiElevenPlus.java
similarity index 100%
rename from src/android/org/linphone/compatibility/ApiElevenPlus.java
rename to app/src/main/java/org/linphone/compatibility/ApiElevenPlus.java
diff --git a/src/android/org/linphone/compatibility/ApiNineteenPlus.java b/app/src/main/java/org/linphone/compatibility/ApiNineteenPlus.java
similarity index 100%
rename from src/android/org/linphone/compatibility/ApiNineteenPlus.java
rename to app/src/main/java/org/linphone/compatibility/ApiNineteenPlus.java
diff --git a/src/android/org/linphone/compatibility/ApiSixteenPlus.java b/app/src/main/java/org/linphone/compatibility/ApiSixteenPlus.java
similarity index 100%
rename from src/android/org/linphone/compatibility/ApiSixteenPlus.java
rename to app/src/main/java/org/linphone/compatibility/ApiSixteenPlus.java
diff --git a/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java
similarity index 100%
rename from src/android/org/linphone/compatibility/ApiTwentyOnePlus.java
rename to app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java
diff --git a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java
similarity index 100%
rename from src/android/org/linphone/compatibility/ApiTwentySixPlus.java
rename to app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java
diff --git a/src/android/org/linphone/compatibility/ApiTwentyThreePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java
similarity index 100%
rename from src/android/org/linphone/compatibility/ApiTwentyThreePlus.java
rename to app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java
diff --git a/src/android/org/linphone/compatibility/Compatibility.java b/app/src/main/java/org/linphone/compatibility/Compatibility.java
similarity index 100%
rename from src/android/org/linphone/compatibility/Compatibility.java
rename to app/src/main/java/org/linphone/compatibility/Compatibility.java
diff --git a/src/android/org/linphone/compatibility/CompatibilityScaleGestureDetector.java b/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureDetector.java
similarity index 100%
rename from src/android/org/linphone/compatibility/CompatibilityScaleGestureDetector.java
rename to app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureDetector.java
diff --git a/src/android/org/linphone/compatibility/CompatibilityScaleGestureListener.java b/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureListener.java
similarity index 100%
rename from src/android/org/linphone/compatibility/CompatibilityScaleGestureListener.java
rename to app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureListener.java
diff --git a/src/android/org/linphone/contacts/ContactAddress.java b/app/src/main/java/org/linphone/contacts/ContactAddress.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactAddress.java
rename to app/src/main/java/org/linphone/contacts/ContactAddress.java
diff --git a/src/android/org/linphone/contacts/ContactDetailsFragment.java b/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactDetailsFragment.java
rename to app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java
diff --git a/src/android/org/linphone/contacts/ContactEditorFragment.java b/app/src/main/java/org/linphone/contacts/ContactEditorFragment.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactEditorFragment.java
rename to app/src/main/java/org/linphone/contacts/ContactEditorFragment.java
diff --git a/src/android/org/linphone/contacts/ContactPicked.java b/app/src/main/java/org/linphone/contacts/ContactPicked.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactPicked.java
rename to app/src/main/java/org/linphone/contacts/ContactPicked.java
diff --git a/src/android/org/linphone/contacts/ContactsListAdapter.java b/app/src/main/java/org/linphone/contacts/ContactsListAdapter.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactsListAdapter.java
rename to app/src/main/java/org/linphone/contacts/ContactsListAdapter.java
diff --git a/src/android/org/linphone/contacts/ContactsListFragment.java b/app/src/main/java/org/linphone/contacts/ContactsListFragment.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactsListFragment.java
rename to app/src/main/java/org/linphone/contacts/ContactsListFragment.java
diff --git a/src/android/org/linphone/contacts/ContactsManager.java b/app/src/main/java/org/linphone/contacts/ContactsManager.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactsManager.java
rename to app/src/main/java/org/linphone/contacts/ContactsManager.java
diff --git a/src/android/org/linphone/contacts/ContactsUpdatedListener.java b/app/src/main/java/org/linphone/contacts/ContactsUpdatedListener.java
similarity index 100%
rename from src/android/org/linphone/contacts/ContactsUpdatedListener.java
rename to app/src/main/java/org/linphone/contacts/ContactsUpdatedListener.java
diff --git a/src/android/org/linphone/contacts/LinphoneContact.java b/app/src/main/java/org/linphone/contacts/LinphoneContact.java
similarity index 100%
rename from src/android/org/linphone/contacts/LinphoneContact.java
rename to app/src/main/java/org/linphone/contacts/LinphoneContact.java
diff --git a/src/android/org/linphone/contacts/LinphoneNumberOrAddress.java b/app/src/main/java/org/linphone/contacts/LinphoneNumberOrAddress.java
similarity index 100%
rename from src/android/org/linphone/contacts/LinphoneNumberOrAddress.java
rename to app/src/main/java/org/linphone/contacts/LinphoneNumberOrAddress.java
diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/app/src/main/java/org/linphone/contacts/SearchContactsListAdapter.java
similarity index 100%
rename from src/android/org/linphone/contacts/SearchContactsListAdapter.java
rename to app/src/main/java/org/linphone/contacts/SearchContactsListAdapter.java
diff --git a/src/android/org/linphone/firebase/FirebaseIdService.java b/app/src/main/java/org/linphone/firebase/FirebaseIdService.java
similarity index 100%
rename from src/android/org/linphone/firebase/FirebaseIdService.java
rename to app/src/main/java/org/linphone/firebase/FirebaseIdService.java
diff --git a/src/android/org/linphone/firebase/FirebaseMessaging.java b/app/src/main/java/org/linphone/firebase/FirebaseMessaging.java
similarity index 100%
rename from src/android/org/linphone/firebase/FirebaseMessaging.java
rename to app/src/main/java/org/linphone/firebase/FirebaseMessaging.java
diff --git a/src/android/org/linphone/fragments/AboutFragment.java b/app/src/main/java/org/linphone/fragments/AboutFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/AboutFragment.java
rename to app/src/main/java/org/linphone/fragments/AboutFragment.java
diff --git a/src/android/org/linphone/fragments/AccountPreferencesFragment.java b/app/src/main/java/org/linphone/fragments/AccountPreferencesFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/AccountPreferencesFragment.java
rename to app/src/main/java/org/linphone/fragments/AccountPreferencesFragment.java
diff --git a/src/android/org/linphone/fragments/DialerFragment.java b/app/src/main/java/org/linphone/fragments/DialerFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/DialerFragment.java
rename to app/src/main/java/org/linphone/fragments/DialerFragment.java
diff --git a/src/android/org/linphone/fragments/EmptyFragment.java b/app/src/main/java/org/linphone/fragments/EmptyFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/EmptyFragment.java
rename to app/src/main/java/org/linphone/fragments/EmptyFragment.java
diff --git a/src/android/org/linphone/fragments/FragmentsAvailable.java b/app/src/main/java/org/linphone/fragments/FragmentsAvailable.java
similarity index 100%
rename from src/android/org/linphone/fragments/FragmentsAvailable.java
rename to app/src/main/java/org/linphone/fragments/FragmentsAvailable.java
diff --git a/src/android/org/linphone/fragments/HistoryDetailFragment.java b/app/src/main/java/org/linphone/fragments/HistoryDetailFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/HistoryDetailFragment.java
rename to app/src/main/java/org/linphone/fragments/HistoryDetailFragment.java
diff --git a/src/android/org/linphone/fragments/HistoryListFragment.java b/app/src/main/java/org/linphone/fragments/HistoryListFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/HistoryListFragment.java
rename to app/src/main/java/org/linphone/fragments/HistoryListFragment.java
diff --git a/src/android/org/linphone/fragments/SettingsFragment.java b/app/src/main/java/org/linphone/fragments/SettingsFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/SettingsFragment.java
rename to app/src/main/java/org/linphone/fragments/SettingsFragment.java
diff --git a/src/android/org/linphone/fragments/StatusFragment.java b/app/src/main/java/org/linphone/fragments/StatusFragment.java
similarity index 100%
rename from src/android/org/linphone/fragments/StatusFragment.java
rename to app/src/main/java/org/linphone/fragments/StatusFragment.java
diff --git a/src/android/org/linphone/purchase/InAppPurchaseActivity.java b/app/src/main/java/org/linphone/purchase/InAppPurchaseActivity.java
similarity index 100%
rename from src/android/org/linphone/purchase/InAppPurchaseActivity.java
rename to app/src/main/java/org/linphone/purchase/InAppPurchaseActivity.java
diff --git a/src/android/org/linphone/purchase/InAppPurchaseFragment.java b/app/src/main/java/org/linphone/purchase/InAppPurchaseFragment.java
similarity index 100%
rename from src/android/org/linphone/purchase/InAppPurchaseFragment.java
rename to app/src/main/java/org/linphone/purchase/InAppPurchaseFragment.java
diff --git a/src/android/org/linphone/purchase/InAppPurchaseHelper.java b/app/src/main/java/org/linphone/purchase/InAppPurchaseHelper.java
similarity index 100%
rename from src/android/org/linphone/purchase/InAppPurchaseHelper.java
rename to app/src/main/java/org/linphone/purchase/InAppPurchaseHelper.java
diff --git a/src/android/org/linphone/purchase/InAppPurchaseListFragment.java b/app/src/main/java/org/linphone/purchase/InAppPurchaseListFragment.java
similarity index 100%
rename from src/android/org/linphone/purchase/InAppPurchaseListFragment.java
rename to app/src/main/java/org/linphone/purchase/InAppPurchaseListFragment.java
diff --git a/src/android/org/linphone/purchase/InAppPurchaseListener.java b/app/src/main/java/org/linphone/purchase/InAppPurchaseListener.java
similarity index 100%
rename from src/android/org/linphone/purchase/InAppPurchaseListener.java
rename to app/src/main/java/org/linphone/purchase/InAppPurchaseListener.java
diff --git a/src/android/org/linphone/purchase/InAppPurchaseListenerBase.java b/app/src/main/java/org/linphone/purchase/InAppPurchaseListenerBase.java
similarity index 100%
rename from src/android/org/linphone/purchase/InAppPurchaseListenerBase.java
rename to app/src/main/java/org/linphone/purchase/InAppPurchaseListenerBase.java
diff --git a/src/android/org/linphone/purchase/Purchasable.java b/app/src/main/java/org/linphone/purchase/Purchasable.java
similarity index 100%
rename from src/android/org/linphone/purchase/Purchasable.java
rename to app/src/main/java/org/linphone/purchase/Purchasable.java
diff --git a/src/android/org/linphone/receivers/AccountEnableReceiver.java b/app/src/main/java/org/linphone/receivers/AccountEnableReceiver.java
similarity index 100%
rename from src/android/org/linphone/receivers/AccountEnableReceiver.java
rename to app/src/main/java/org/linphone/receivers/AccountEnableReceiver.java
diff --git a/src/android/org/linphone/receivers/BluetoothManager.java b/app/src/main/java/org/linphone/receivers/BluetoothManager.java
similarity index 100%
rename from src/android/org/linphone/receivers/BluetoothManager.java
rename to app/src/main/java/org/linphone/receivers/BluetoothManager.java
diff --git a/src/android/org/linphone/receivers/BootReceiver.java b/app/src/main/java/org/linphone/receivers/BootReceiver.java
similarity index 100%
rename from src/android/org/linphone/receivers/BootReceiver.java
rename to app/src/main/java/org/linphone/receivers/BootReceiver.java
diff --git a/src/android/org/linphone/receivers/DozeReceiver.java b/app/src/main/java/org/linphone/receivers/DozeReceiver.java
similarity index 100%
rename from src/android/org/linphone/receivers/DozeReceiver.java
rename to app/src/main/java/org/linphone/receivers/DozeReceiver.java
diff --git a/src/android/org/linphone/receivers/HookReceiver.java b/app/src/main/java/org/linphone/receivers/HookReceiver.java
similarity index 100%
rename from src/android/org/linphone/receivers/HookReceiver.java
rename to app/src/main/java/org/linphone/receivers/HookReceiver.java
diff --git a/src/android/org/linphone/receivers/KeepAliveReceiver.java b/app/src/main/java/org/linphone/receivers/KeepAliveReceiver.java
similarity index 100%
rename from src/android/org/linphone/receivers/KeepAliveReceiver.java
rename to app/src/main/java/org/linphone/receivers/KeepAliveReceiver.java
diff --git a/src/android/org/linphone/receivers/NetworkManager.java b/app/src/main/java/org/linphone/receivers/NetworkManager.java
similarity index 100%
rename from src/android/org/linphone/receivers/NetworkManager.java
rename to app/src/main/java/org/linphone/receivers/NetworkManager.java
diff --git a/src/android/org/linphone/receivers/OutgoingCallReceiver.java b/app/src/main/java/org/linphone/receivers/OutgoingCallReceiver.java
similarity index 100%
rename from src/android/org/linphone/receivers/OutgoingCallReceiver.java
rename to app/src/main/java/org/linphone/receivers/OutgoingCallReceiver.java
diff --git a/src/android/org/linphone/receivers/PhoneStateChangedReceiver.java b/app/src/main/java/org/linphone/receivers/PhoneStateChangedReceiver.java
similarity index 100%
rename from src/android/org/linphone/receivers/PhoneStateChangedReceiver.java
rename to app/src/main/java/org/linphone/receivers/PhoneStateChangedReceiver.java
diff --git a/src/android/org/linphone/sync/AuthenticationService.java b/app/src/main/java/org/linphone/sync/AuthenticationService.java
similarity index 100%
rename from src/android/org/linphone/sync/AuthenticationService.java
rename to app/src/main/java/org/linphone/sync/AuthenticationService.java
diff --git a/src/android/org/linphone/sync/Authenticator.java b/app/src/main/java/org/linphone/sync/Authenticator.java
similarity index 100%
rename from src/android/org/linphone/sync/Authenticator.java
rename to app/src/main/java/org/linphone/sync/Authenticator.java
diff --git a/src/android/org/linphone/sync/SyncAdapter.java b/app/src/main/java/org/linphone/sync/SyncAdapter.java
similarity index 100%
rename from src/android/org/linphone/sync/SyncAdapter.java
rename to app/src/main/java/org/linphone/sync/SyncAdapter.java
diff --git a/src/android/org/linphone/sync/SyncService.java b/app/src/main/java/org/linphone/sync/SyncService.java
similarity index 100%
rename from src/android/org/linphone/sync/SyncService.java
rename to app/src/main/java/org/linphone/sync/SyncService.java
diff --git a/src/android/org/linphone/ui/AddressAware.java b/app/src/main/java/org/linphone/ui/AddressAware.java
similarity index 100%
rename from src/android/org/linphone/ui/AddressAware.java
rename to app/src/main/java/org/linphone/ui/AddressAware.java
diff --git a/src/android/org/linphone/ui/AddressText.java b/app/src/main/java/org/linphone/ui/AddressText.java
similarity index 100%
rename from src/android/org/linphone/ui/AddressText.java
rename to app/src/main/java/org/linphone/ui/AddressText.java
diff --git a/src/android/org/linphone/ui/CallButton.java b/app/src/main/java/org/linphone/ui/CallButton.java
similarity index 100%
rename from src/android/org/linphone/ui/CallButton.java
rename to app/src/main/java/org/linphone/ui/CallButton.java
diff --git a/src/android/org/linphone/ui/ContactAvatar.java b/app/src/main/java/org/linphone/ui/ContactAvatar.java
similarity index 100%
rename from src/android/org/linphone/ui/ContactAvatar.java
rename to app/src/main/java/org/linphone/ui/ContactAvatar.java
diff --git a/src/android/org/linphone/ui/ContactSelectView.java b/app/src/main/java/org/linphone/ui/ContactSelectView.java
similarity index 100%
rename from src/android/org/linphone/ui/ContactSelectView.java
rename to app/src/main/java/org/linphone/ui/ContactSelectView.java
diff --git a/src/android/org/linphone/ui/Digit.java b/app/src/main/java/org/linphone/ui/Digit.java
similarity index 100%
rename from src/android/org/linphone/ui/Digit.java
rename to app/src/main/java/org/linphone/ui/Digit.java
diff --git a/src/android/org/linphone/ui/EraseButton.java b/app/src/main/java/org/linphone/ui/EraseButton.java
similarity index 100%
rename from src/android/org/linphone/ui/EraseButton.java
rename to app/src/main/java/org/linphone/ui/EraseButton.java
diff --git a/src/android/org/linphone/ui/LedPreference.java b/app/src/main/java/org/linphone/ui/LedPreference.java
similarity index 100%
rename from src/android/org/linphone/ui/LedPreference.java
rename to app/src/main/java/org/linphone/ui/LedPreference.java
diff --git a/src/android/org/linphone/ui/LinphoneMediaScanner.java b/app/src/main/java/org/linphone/ui/LinphoneMediaScanner.java
similarity index 100%
rename from src/android/org/linphone/ui/LinphoneMediaScanner.java
rename to app/src/main/java/org/linphone/ui/LinphoneMediaScanner.java
diff --git a/src/android/org/linphone/ui/LinphoneOverlay.java b/app/src/main/java/org/linphone/ui/LinphoneOverlay.java
similarity index 100%
rename from src/android/org/linphone/ui/LinphoneOverlay.java
rename to app/src/main/java/org/linphone/ui/LinphoneOverlay.java
diff --git a/src/android/org/linphone/ui/ListSelectionAdapter.java b/app/src/main/java/org/linphone/ui/ListSelectionAdapter.java
similarity index 100%
rename from src/android/org/linphone/ui/ListSelectionAdapter.java
rename to app/src/main/java/org/linphone/ui/ListSelectionAdapter.java
diff --git a/src/android/org/linphone/ui/ListSelectionHelper.java b/app/src/main/java/org/linphone/ui/ListSelectionHelper.java
similarity index 100%
rename from src/android/org/linphone/ui/ListSelectionHelper.java
rename to app/src/main/java/org/linphone/ui/ListSelectionHelper.java
diff --git a/src/android/org/linphone/ui/Numpad.java b/app/src/main/java/org/linphone/ui/Numpad.java
similarity index 100%
rename from src/android/org/linphone/ui/Numpad.java
rename to app/src/main/java/org/linphone/ui/Numpad.java
diff --git a/src/android/org/linphone/ui/PreferencesListFragment.java b/app/src/main/java/org/linphone/ui/PreferencesListFragment.java
similarity index 100%
rename from src/android/org/linphone/ui/PreferencesListFragment.java
rename to app/src/main/java/org/linphone/ui/PreferencesListFragment.java
diff --git a/src/android/org/linphone/ui/SelectableAdapter.java b/app/src/main/java/org/linphone/ui/SelectableAdapter.java
similarity index 100%
rename from src/android/org/linphone/ui/SelectableAdapter.java
rename to app/src/main/java/org/linphone/ui/SelectableAdapter.java
diff --git a/src/android/org/linphone/ui/SelectableHelper.java b/app/src/main/java/org/linphone/ui/SelectableHelper.java
similarity index 100%
rename from src/android/org/linphone/ui/SelectableHelper.java
rename to app/src/main/java/org/linphone/ui/SelectableHelper.java
diff --git a/src/android/org/linphone/ui/SlidingDrawer.java b/app/src/main/java/org/linphone/ui/SlidingDrawer.java
similarity index 100%
rename from src/android/org/linphone/ui/SlidingDrawer.java
rename to app/src/main/java/org/linphone/ui/SlidingDrawer.java
diff --git a/src/android/org/linphone/xmlrpc/XmlRpcHelper.java b/app/src/main/java/org/linphone/xmlrpc/XmlRpcHelper.java
similarity index 100%
rename from src/android/org/linphone/xmlrpc/XmlRpcHelper.java
rename to app/src/main/java/org/linphone/xmlrpc/XmlRpcHelper.java
diff --git a/src/android/org/linphone/xmlrpc/XmlRpcListener.java b/app/src/main/java/org/linphone/xmlrpc/XmlRpcListener.java
similarity index 100%
rename from src/android/org/linphone/xmlrpc/XmlRpcListener.java
rename to app/src/main/java/org/linphone/xmlrpc/XmlRpcListener.java
diff --git a/src/android/org/linphone/xmlrpc/XmlRpcListenerBase.java b/app/src/main/java/org/linphone/xmlrpc/XmlRpcListenerBase.java
similarity index 100%
rename from src/android/org/linphone/xmlrpc/XmlRpcListenerBase.java
rename to app/src/main/java/org/linphone/xmlrpc/XmlRpcListenerBase.java
diff --git a/res/anim/slide_in_bottom_to_top.xml b/app/src/main/res/anim/slide_in_bottom_to_top.xml
similarity index 100%
rename from res/anim/slide_in_bottom_to_top.xml
rename to app/src/main/res/anim/slide_in_bottom_to_top.xml
diff --git a/res/anim/slide_in_left_to_right.xml b/app/src/main/res/anim/slide_in_left_to_right.xml
similarity index 100%
rename from res/anim/slide_in_left_to_right.xml
rename to app/src/main/res/anim/slide_in_left_to_right.xml
diff --git a/res/anim/slide_in_right_to_left.xml b/app/src/main/res/anim/slide_in_right_to_left.xml
similarity index 100%
rename from res/anim/slide_in_right_to_left.xml
rename to app/src/main/res/anim/slide_in_right_to_left.xml
diff --git a/res/anim/slide_in_top_to_bottom.xml b/app/src/main/res/anim/slide_in_top_to_bottom.xml
similarity index 100%
rename from res/anim/slide_in_top_to_bottom.xml
rename to app/src/main/res/anim/slide_in_top_to_bottom.xml
diff --git a/res/anim/slide_out_bottom_to_top.xml b/app/src/main/res/anim/slide_out_bottom_to_top.xml
similarity index 100%
rename from res/anim/slide_out_bottom_to_top.xml
rename to app/src/main/res/anim/slide_out_bottom_to_top.xml
diff --git a/res/anim/slide_out_left_to_right.xml b/app/src/main/res/anim/slide_out_left_to_right.xml
similarity index 100%
rename from res/anim/slide_out_left_to_right.xml
rename to app/src/main/res/anim/slide_out_left_to_right.xml
diff --git a/res/anim/slide_out_right_to_left.xml b/app/src/main/res/anim/slide_out_right_to_left.xml
similarity index 100%
rename from res/anim/slide_out_right_to_left.xml
rename to app/src/main/res/anim/slide_out_right_to_left.xml
diff --git a/res/anim/slide_out_top_to_bottom.xml b/app/src/main/res/anim/slide_out_top_to_bottom.xml
similarity index 100%
rename from res/anim/slide_out_top_to_bottom.xml
rename to app/src/main/res/anim/slide_out_top_to_bottom.xml
diff --git a/res/color/security_switch_track_color.xml b/app/src/main/res/color/security_switch_track_color.xml
similarity index 100%
rename from res/color/security_switch_track_color.xml
rename to app/src/main/res/color/security_switch_track_color.xml
diff --git a/res/drawable-xhdpi/add_field_default.png b/app/src/main/res/drawable-xhdpi/add_field_default.png
similarity index 100%
rename from res/drawable-xhdpi/add_field_default.png
rename to app/src/main/res/drawable-xhdpi/add_field_default.png
diff --git a/res/drawable-xhdpi/arrow_accept.png b/app/src/main/res/drawable-xhdpi/arrow_accept.png
similarity index 100%
rename from res/drawable-xhdpi/arrow_accept.png
rename to app/src/main/res/drawable-xhdpi/arrow_accept.png
diff --git a/res/drawable-xhdpi/arrow_hangup.png b/app/src/main/res/drawable-xhdpi/arrow_hangup.png
similarity index 100%
rename from res/drawable-xhdpi/arrow_hangup.png
rename to app/src/main/res/drawable-xhdpi/arrow_hangup.png
diff --git a/res/drawable-xhdpi/avatar.png b/app/src/main/res/drawable-xhdpi/avatar.png
similarity index 100%
rename from res/drawable-xhdpi/avatar.png
rename to app/src/main/res/drawable-xhdpi/avatar.png
diff --git a/res/drawable-xhdpi/avatar_chat_mask.png b/app/src/main/res/drawable-xhdpi/avatar_chat_mask.png
similarity index 100%
rename from res/drawable-xhdpi/avatar_chat_mask.png
rename to app/src/main/res/drawable-xhdpi/avatar_chat_mask.png
diff --git a/res/drawable-xhdpi/avatar_chat_mask_outgoing.png b/app/src/main/res/drawable-xhdpi/avatar_chat_mask_outgoing.png
similarity index 100%
rename from res/drawable-xhdpi/avatar_chat_mask_outgoing.png
rename to app/src/main/res/drawable-xhdpi/avatar_chat_mask_outgoing.png
diff --git a/res/drawable-xhdpi/avatar_mask.png b/app/src/main/res/drawable-xhdpi/avatar_mask.png
similarity index 100%
rename from res/drawable-xhdpi/avatar_mask.png
rename to app/src/main/res/drawable-xhdpi/avatar_mask.png
diff --git a/res/drawable-xhdpi/avatar_mask_border.png b/app/src/main/res/drawable-xhdpi/avatar_mask_border.png
similarity index 100%
rename from res/drawable-xhdpi/avatar_mask_border.png
rename to app/src/main/res/drawable-xhdpi/avatar_mask_border.png
diff --git a/res/drawable-xhdpi/back.png b/app/src/main/res/drawable-xhdpi/back.png
similarity index 100%
rename from res/drawable-xhdpi/back.png
rename to app/src/main/res/drawable-xhdpi/back.png
diff --git a/res/drawable-xhdpi/backspace_default.png b/app/src/main/res/drawable-xhdpi/backspace_default.png
similarity index 100%
rename from res/drawable-xhdpi/backspace_default.png
rename to app/src/main/res/drawable-xhdpi/backspace_default.png
diff --git a/res/drawable-xhdpi/backspace_disabled.png b/app/src/main/res/drawable-xhdpi/backspace_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/backspace_disabled.png
rename to app/src/main/res/drawable-xhdpi/backspace_disabled.png
diff --git a/res/drawable-xhdpi/backspace_over.png b/app/src/main/res/drawable-xhdpi/backspace_over.png
similarity index 100%
rename from res/drawable-xhdpi/backspace_over.png
rename to app/src/main/res/drawable-xhdpi/backspace_over.png
diff --git a/res/drawable-xhdpi/call_add.png b/app/src/main/res/drawable-xhdpi/call_add.png
similarity index 100%
rename from res/drawable-xhdpi/call_add.png
rename to app/src/main/res/drawable-xhdpi/call_add.png
diff --git a/res/drawable-xhdpi/call_alt_start.png b/app/src/main/res/drawable-xhdpi/call_alt_start.png
similarity index 100%
rename from res/drawable-xhdpi/call_alt_start.png
rename to app/src/main/res/drawable-xhdpi/call_alt_start.png
diff --git a/res/drawable-xhdpi/call_audio_start.png b/app/src/main/res/drawable-xhdpi/call_audio_start.png
similarity index 100%
rename from res/drawable-xhdpi/call_audio_start.png
rename to app/src/main/res/drawable-xhdpi/call_audio_start.png
diff --git a/res/drawable-xhdpi/call_back.png b/app/src/main/res/drawable-xhdpi/call_back.png
similarity index 100%
rename from res/drawable-xhdpi/call_back.png
rename to app/src/main/res/drawable-xhdpi/call_back.png
diff --git a/res/drawable-xhdpi/call_hangup.png b/app/src/main/res/drawable-xhdpi/call_hangup.png
similarity index 100%
rename from res/drawable-xhdpi/call_hangup.png
rename to app/src/main/res/drawable-xhdpi/call_hangup.png
diff --git a/res/drawable-xhdpi/call_incoming.png b/app/src/main/res/drawable-xhdpi/call_incoming.png
similarity index 100%
rename from res/drawable-xhdpi/call_incoming.png
rename to app/src/main/res/drawable-xhdpi/call_incoming.png
diff --git a/res/drawable-xhdpi/call_missed.png b/app/src/main/res/drawable-xhdpi/call_missed.png
similarity index 100%
rename from res/drawable-xhdpi/call_missed.png
rename to app/src/main/res/drawable-xhdpi/call_missed.png
diff --git a/res/drawable-xhdpi/call_outgoing.png b/app/src/main/res/drawable-xhdpi/call_outgoing.png
similarity index 100%
rename from res/drawable-xhdpi/call_outgoing.png
rename to app/src/main/res/drawable-xhdpi/call_outgoing.png
diff --git a/res/drawable-xhdpi/call_quality_indicator_0.png b/app/src/main/res/drawable-xhdpi/call_quality_indicator_0.png
similarity index 100%
rename from res/drawable-xhdpi/call_quality_indicator_0.png
rename to app/src/main/res/drawable-xhdpi/call_quality_indicator_0.png
diff --git a/res/drawable-xhdpi/call_quality_indicator_1.png b/app/src/main/res/drawable-xhdpi/call_quality_indicator_1.png
similarity index 100%
rename from res/drawable-xhdpi/call_quality_indicator_1.png
rename to app/src/main/res/drawable-xhdpi/call_quality_indicator_1.png
diff --git a/res/drawable-xhdpi/call_quality_indicator_2.png b/app/src/main/res/drawable-xhdpi/call_quality_indicator_2.png
similarity index 100%
rename from res/drawable-xhdpi/call_quality_indicator_2.png
rename to app/src/main/res/drawable-xhdpi/call_quality_indicator_2.png
diff --git a/res/drawable-xhdpi/call_quality_indicator_3.png b/app/src/main/res/drawable-xhdpi/call_quality_indicator_3.png
similarity index 100%
rename from res/drawable-xhdpi/call_quality_indicator_3.png
rename to app/src/main/res/drawable-xhdpi/call_quality_indicator_3.png
diff --git a/res/drawable-xhdpi/call_quality_indicator_4.png b/app/src/main/res/drawable-xhdpi/call_quality_indicator_4.png
similarity index 100%
rename from res/drawable-xhdpi/call_quality_indicator_4.png
rename to app/src/main/res/drawable-xhdpi/call_quality_indicator_4.png
diff --git a/res/drawable-xhdpi/call_start_default.png b/app/src/main/res/drawable-xhdpi/call_start_default.png
similarity index 100%
rename from res/drawable-xhdpi/call_start_default.png
rename to app/src/main/res/drawable-xhdpi/call_start_default.png
diff --git a/res/drawable-xhdpi/call_status_incoming.png b/app/src/main/res/drawable-xhdpi/call_status_incoming.png
similarity index 100%
rename from res/drawable-xhdpi/call_status_incoming.png
rename to app/src/main/res/drawable-xhdpi/call_status_incoming.png
diff --git a/res/drawable-xhdpi/call_status_missed.png b/app/src/main/res/drawable-xhdpi/call_status_missed.png
similarity index 100%
rename from res/drawable-xhdpi/call_status_missed.png
rename to app/src/main/res/drawable-xhdpi/call_status_missed.png
diff --git a/res/drawable-xhdpi/call_status_outgoing.png b/app/src/main/res/drawable-xhdpi/call_status_outgoing.png
similarity index 100%
rename from res/drawable-xhdpi/call_status_outgoing.png
rename to app/src/main/res/drawable-xhdpi/call_status_outgoing.png
diff --git a/res/drawable-xhdpi/call_transfer.png b/app/src/main/res/drawable-xhdpi/call_transfer.png
similarity index 100%
rename from res/drawable-xhdpi/call_transfer.png
rename to app/src/main/res/drawable-xhdpi/call_transfer.png
diff --git a/res/drawable-xhdpi/call_video_start.png b/app/src/main/res/drawable-xhdpi/call_video_start.png
similarity index 100%
rename from res/drawable-xhdpi/call_video_start.png
rename to app/src/main/res/drawable-xhdpi/call_video_start.png
diff --git a/res/drawable-xhdpi/camera_default.png b/app/src/main/res/drawable-xhdpi/camera_default.png
similarity index 100%
rename from res/drawable-xhdpi/camera_default.png
rename to app/src/main/res/drawable-xhdpi/camera_default.png
diff --git a/res/drawable-xhdpi/camera_disabled.png b/app/src/main/res/drawable-xhdpi/camera_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/camera_disabled.png
rename to app/src/main/res/drawable-xhdpi/camera_disabled.png
diff --git a/res/drawable-xhdpi/camera_selected.png b/app/src/main/res/drawable-xhdpi/camera_selected.png
similarity index 100%
rename from res/drawable-xhdpi/camera_selected.png
rename to app/src/main/res/drawable-xhdpi/camera_selected.png
diff --git a/res/drawable-xhdpi/camera_switch_default.png b/app/src/main/res/drawable-xhdpi/camera_switch_default.png
similarity index 100%
rename from res/drawable-xhdpi/camera_switch_default.png
rename to app/src/main/res/drawable-xhdpi/camera_switch_default.png
diff --git a/res/drawable-xhdpi/camera_switch_over.png b/app/src/main/res/drawable-xhdpi/camera_switch_over.png
similarity index 100%
rename from res/drawable-xhdpi/camera_switch_over.png
rename to app/src/main/res/drawable-xhdpi/camera_switch_over.png
diff --git a/res/drawable-xhdpi/cancel_edit.png b/app/src/main/res/drawable-xhdpi/cancel_edit.png
similarity index 100%
rename from res/drawable-xhdpi/cancel_edit.png
rename to app/src/main/res/drawable-xhdpi/cancel_edit.png
diff --git a/res/drawable-xhdpi/chat_add.png b/app/src/main/res/drawable-xhdpi/chat_add.png
similarity index 100%
rename from res/drawable-xhdpi/chat_add.png
rename to app/src/main/res/drawable-xhdpi/chat_add.png
diff --git a/res/drawable-xhdpi/chat_file_default.png b/app/src/main/res/drawable-xhdpi/chat_file_default.png
similarity index 100%
rename from res/drawable-xhdpi/chat_file_default.png
rename to app/src/main/res/drawable-xhdpi/chat_file_default.png
diff --git a/res/drawable-xhdpi/chat_file_over.png b/app/src/main/res/drawable-xhdpi/chat_file_over.png
similarity index 100%
rename from res/drawable-xhdpi/chat_file_over.png
rename to app/src/main/res/drawable-xhdpi/chat_file_over.png
diff --git a/res/drawable-xhdpi/chat_group_add.png b/app/src/main/res/drawable-xhdpi/chat_group_add.png
similarity index 100%
rename from res/drawable-xhdpi/chat_group_add.png
rename to app/src/main/res/drawable-xhdpi/chat_group_add.png
diff --git a/res/drawable-xhdpi/chat_group_avatar.png b/app/src/main/res/drawable-xhdpi/chat_group_avatar.png
similarity index 100%
rename from res/drawable-xhdpi/chat_group_avatar.png
rename to app/src/main/res/drawable-xhdpi/chat_group_avatar.png
diff --git a/res/drawable-xhdpi/chat_group_delete.png b/app/src/main/res/drawable-xhdpi/chat_group_delete.png
similarity index 100%
rename from res/drawable-xhdpi/chat_group_delete.png
rename to app/src/main/res/drawable-xhdpi/chat_group_delete.png
diff --git a/res/drawable-xhdpi/chat_group_informations_default.png b/app/src/main/res/drawable-xhdpi/chat_group_informations_default.png
similarity index 100%
rename from res/drawable-xhdpi/chat_group_informations_default.png
rename to app/src/main/res/drawable-xhdpi/chat_group_informations_default.png
diff --git a/res/drawable-xhdpi/chat_group_informations_disabled.png b/app/src/main/res/drawable-xhdpi/chat_group_informations_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/chat_group_informations_disabled.png
rename to app/src/main/res/drawable-xhdpi/chat_group_informations_disabled.png
diff --git a/res/drawable-xhdpi/chat_group_new.png b/app/src/main/res/drawable-xhdpi/chat_group_new.png
similarity index 100%
rename from res/drawable-xhdpi/chat_group_new.png
rename to app/src/main/res/drawable-xhdpi/chat_group_new.png
diff --git a/res/drawable-xhdpi/chat_new.png b/app/src/main/res/drawable-xhdpi/chat_new.png
similarity index 100%
rename from res/drawable-xhdpi/chat_new.png
rename to app/src/main/res/drawable-xhdpi/chat_new.png
diff --git a/res/drawable-xhdpi/chat_send_default.png b/app/src/main/res/drawable-xhdpi/chat_send_default.png
similarity index 100%
rename from res/drawable-xhdpi/chat_send_default.png
rename to app/src/main/res/drawable-xhdpi/chat_send_default.png
diff --git a/res/drawable-xhdpi/chat_send_over.png b/app/src/main/res/drawable-xhdpi/chat_send_over.png
similarity index 100%
rename from res/drawable-xhdpi/chat_send_over.png
rename to app/src/main/res/drawable-xhdpi/chat_send_over.png
diff --git a/res/drawable-xhdpi/chat_start_default.png b/app/src/main/res/drawable-xhdpi/chat_start_default.png
similarity index 100%
rename from res/drawable-xhdpi/chat_start_default.png
rename to app/src/main/res/drawable-xhdpi/chat_start_default.png
diff --git a/res/drawable-xhdpi/chat_unsecure.png b/app/src/main/res/drawable-xhdpi/chat_unsecure.png
similarity index 100%
rename from res/drawable-xhdpi/chat_unsecure.png
rename to app/src/main/res/drawable-xhdpi/chat_unsecure.png
diff --git a/res/drawable-xhdpi/check_selected.png b/app/src/main/res/drawable-xhdpi/check_selected.png
similarity index 100%
rename from res/drawable-xhdpi/check_selected.png
rename to app/src/main/res/drawable-xhdpi/check_selected.png
diff --git a/res/drawable-xhdpi/check_unselected.png b/app/src/main/res/drawable-xhdpi/check_unselected.png
similarity index 100%
rename from res/drawable-xhdpi/check_unselected.png
rename to app/src/main/res/drawable-xhdpi/check_unselected.png
diff --git a/res/drawable-xhdpi/checkbox_checked.png b/app/src/main/res/drawable-xhdpi/checkbox_checked.png
similarity index 100%
rename from res/drawable-xhdpi/checkbox_checked.png
rename to app/src/main/res/drawable-xhdpi/checkbox_checked.png
diff --git a/res/drawable-xhdpi/checkbox_unchecked.png b/app/src/main/res/drawable-xhdpi/checkbox_unchecked.png
similarity index 100%
rename from res/drawable-xhdpi/checkbox_unchecked.png
rename to app/src/main/res/drawable-xhdpi/checkbox_unchecked.png
diff --git a/res/drawable-xhdpi/chevron_list_close.png b/app/src/main/res/drawable-xhdpi/chevron_list_close.png
similarity index 100%
rename from res/drawable-xhdpi/chevron_list_close.png
rename to app/src/main/res/drawable-xhdpi/chevron_list_close.png
diff --git a/res/drawable-xhdpi/chevron_list_open.png b/app/src/main/res/drawable-xhdpi/chevron_list_open.png
similarity index 100%
rename from res/drawable-xhdpi/chevron_list_open.png
rename to app/src/main/res/drawable-xhdpi/chevron_list_open.png
diff --git a/res/drawable-xhdpi/clean_field_default.png b/app/src/main/res/drawable-xhdpi/clean_field_default.png
similarity index 100%
rename from res/drawable-xhdpi/clean_field_default.png
rename to app/src/main/res/drawable-xhdpi/clean_field_default.png
diff --git a/res/drawable-xhdpi/clean_field_over.png b/app/src/main/res/drawable-xhdpi/clean_field_over.png
similarity index 100%
rename from res/drawable-xhdpi/clean_field_over.png
rename to app/src/main/res/drawable-xhdpi/clean_field_over.png
diff --git a/res/drawable-xhdpi/conference_exit_default.png b/app/src/main/res/drawable-xhdpi/conference_exit_default.png
similarity index 100%
rename from res/drawable-xhdpi/conference_exit_default.png
rename to app/src/main/res/drawable-xhdpi/conference_exit_default.png
diff --git a/res/drawable-xhdpi/conference_start.png b/app/src/main/res/drawable-xhdpi/conference_start.png
similarity index 100%
rename from res/drawable-xhdpi/conference_start.png
rename to app/src/main/res/drawable-xhdpi/conference_start.png
diff --git a/res/drawable-xhdpi/contact.png b/app/src/main/res/drawable-xhdpi/contact.png
similarity index 100%
rename from res/drawable-xhdpi/contact.png
rename to app/src/main/res/drawable-xhdpi/contact.png
diff --git a/res/drawable-xhdpi/contact_add_default.png b/app/src/main/res/drawable-xhdpi/contact_add_default.png
similarity index 100%
rename from res/drawable-xhdpi/contact_add_default.png
rename to app/src/main/res/drawable-xhdpi/contact_add_default.png
diff --git a/res/drawable-xhdpi/contact_add_disabled.png b/app/src/main/res/drawable-xhdpi/contact_add_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/contact_add_disabled.png
rename to app/src/main/res/drawable-xhdpi/contact_add_disabled.png
diff --git a/res/drawable-xhdpi/contacts_all_default.png b/app/src/main/res/drawable-xhdpi/contacts_all_default.png
similarity index 100%
rename from res/drawable-xhdpi/contacts_all_default.png
rename to app/src/main/res/drawable-xhdpi/contacts_all_default.png
diff --git a/res/drawable-xhdpi/contacts_all_selected.png b/app/src/main/res/drawable-xhdpi/contacts_all_selected.png
similarity index 100%
rename from res/drawable-xhdpi/contacts_all_selected.png
rename to app/src/main/res/drawable-xhdpi/contacts_all_selected.png
diff --git a/res/drawable-xhdpi/contacts_sip_default.png b/app/src/main/res/drawable-xhdpi/contacts_sip_default.png
similarity index 100%
rename from res/drawable-xhdpi/contacts_sip_default.png
rename to app/src/main/res/drawable-xhdpi/contacts_sip_default.png
diff --git a/res/drawable-xhdpi/contacts_sip_selected.png b/app/src/main/res/drawable-xhdpi/contacts_sip_selected.png
similarity index 100%
rename from res/drawable-xhdpi/contacts_sip_selected.png
rename to app/src/main/res/drawable-xhdpi/contacts_sip_selected.png
diff --git a/res/drawable-xhdpi/delete_default.png b/app/src/main/res/drawable-xhdpi/delete_default.png
similarity index 100%
rename from res/drawable-xhdpi/delete_default.png
rename to app/src/main/res/drawable-xhdpi/delete_default.png
diff --git a/res/drawable-xhdpi/delete_disabled.png b/app/src/main/res/drawable-xhdpi/delete_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/delete_disabled.png
rename to app/src/main/res/drawable-xhdpi/delete_disabled.png
diff --git a/res/drawable-xhdpi/delete_field_default.png b/app/src/main/res/drawable-xhdpi/delete_field_default.png
similarity index 100%
rename from res/drawable-xhdpi/delete_field_default.png
rename to app/src/main/res/drawable-xhdpi/delete_field_default.png
diff --git a/res/drawable-xhdpi/delete_field_over.png b/app/src/main/res/drawable-xhdpi/delete_field_over.png
similarity index 100%
rename from res/drawable-xhdpi/delete_field_over.png
rename to app/src/main/res/drawable-xhdpi/delete_field_over.png
diff --git a/res/drawable-xhdpi/deselect_all.png b/app/src/main/res/drawable-xhdpi/deselect_all.png
similarity index 100%
rename from res/drawable-xhdpi/deselect_all.png
rename to app/src/main/res/drawable-xhdpi/deselect_all.png
diff --git a/res/drawable-xhdpi/dialer_alt_back.png b/app/src/main/res/drawable-xhdpi/dialer_alt_back.png
similarity index 100%
rename from res/drawable-xhdpi/dialer_alt_back.png
rename to app/src/main/res/drawable-xhdpi/dialer_alt_back.png
diff --git a/res/drawable-xhdpi/dialer_back.png b/app/src/main/res/drawable-xhdpi/dialer_back.png
similarity index 100%
rename from res/drawable-xhdpi/dialer_back.png
rename to app/src/main/res/drawable-xhdpi/dialer_back.png
diff --git a/res/drawable-xhdpi/dialer_background.png b/app/src/main/res/drawable-xhdpi/dialer_background.png
similarity index 100%
rename from res/drawable-xhdpi/dialer_background.png
rename to app/src/main/res/drawable-xhdpi/dialer_background.png
diff --git a/res/drawable-xhdpi/edit.png b/app/src/main/res/drawable-xhdpi/edit.png
similarity index 100%
rename from res/drawable-xhdpi/edit.png
rename to app/src/main/res/drawable-xhdpi/edit.png
diff --git a/res/drawable-xhdpi/edit_list_default.png b/app/src/main/res/drawable-xhdpi/edit_list_default.png
similarity index 100%
rename from res/drawable-xhdpi/edit_list_default.png
rename to app/src/main/res/drawable-xhdpi/edit_list_default.png
diff --git a/res/drawable-xhdpi/edit_list_disabled.png b/app/src/main/res/drawable-xhdpi/edit_list_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/edit_list_disabled.png
rename to app/src/main/res/drawable-xhdpi/edit_list_disabled.png
diff --git a/res/drawable-xhdpi/event_gray.png b/app/src/main/res/drawable-xhdpi/event_gray.png
similarity index 100%
rename from res/drawable-xhdpi/event_gray.png
rename to app/src/main/res/drawable-xhdpi/event_gray.png
diff --git a/res/drawable-xhdpi/footer_chat.png b/app/src/main/res/drawable-xhdpi/footer_chat.png
similarity index 100%
rename from res/drawable-xhdpi/footer_chat.png
rename to app/src/main/res/drawable-xhdpi/footer_chat.png
diff --git a/res/drawable-xhdpi/footer_contacts.png b/app/src/main/res/drawable-xhdpi/footer_contacts.png
similarity index 100%
rename from res/drawable-xhdpi/footer_contacts.png
rename to app/src/main/res/drawable-xhdpi/footer_contacts.png
diff --git a/res/drawable-xhdpi/footer_dialer.png b/app/src/main/res/drawable-xhdpi/footer_dialer.png
similarity index 100%
rename from res/drawable-xhdpi/footer_dialer.png
rename to app/src/main/res/drawable-xhdpi/footer_dialer.png
diff --git a/res/drawable-xhdpi/footer_history.png b/app/src/main/res/drawable-xhdpi/footer_history.png
similarity index 100%
rename from res/drawable-xhdpi/footer_history.png
rename to app/src/main/res/drawable-xhdpi/footer_history.png
diff --git a/res/drawable-xhdpi/history_all_default.png b/app/src/main/res/drawable-xhdpi/history_all_default.png
similarity index 100%
rename from res/drawable-xhdpi/history_all_default.png
rename to app/src/main/res/drawable-xhdpi/history_all_default.png
diff --git a/res/drawable-xhdpi/history_all_selected.png b/app/src/main/res/drawable-xhdpi/history_all_selected.png
similarity index 100%
rename from res/drawable-xhdpi/history_all_selected.png
rename to app/src/main/res/drawable-xhdpi/history_all_selected.png
diff --git a/res/drawable-xhdpi/history_missed_default.png b/app/src/main/res/drawable-xhdpi/history_missed_default.png
similarity index 100%
rename from res/drawable-xhdpi/history_missed_default.png
rename to app/src/main/res/drawable-xhdpi/history_missed_default.png
diff --git a/res/drawable-xhdpi/history_missed_selected.png b/app/src/main/res/drawable-xhdpi/history_missed_selected.png
similarity index 100%
rename from res/drawable-xhdpi/history_missed_selected.png
rename to app/src/main/res/drawable-xhdpi/history_missed_selected.png
diff --git a/res/drawable-xhdpi/imdn_error.png b/app/src/main/res/drawable-xhdpi/imdn_error.png
similarity index 100%
rename from res/drawable-xhdpi/imdn_error.png
rename to app/src/main/res/drawable-xhdpi/imdn_error.png
diff --git a/res/drawable-xhdpi/imdn_read.png b/app/src/main/res/drawable-xhdpi/imdn_read.png
similarity index 100%
rename from res/drawable-xhdpi/imdn_read.png
rename to app/src/main/res/drawable-xhdpi/imdn_read.png
diff --git a/res/drawable-xhdpi/imdn_received.png b/app/src/main/res/drawable-xhdpi/imdn_received.png
similarity index 100%
rename from res/drawable-xhdpi/imdn_received.png
rename to app/src/main/res/drawable-xhdpi/imdn_received.png
diff --git a/res/drawable-xhdpi/info.png b/app/src/main/res/drawable-xhdpi/info.png
similarity index 100%
rename from res/drawable-xhdpi/info.png
rename to app/src/main/res/drawable-xhdpi/info.png
diff --git a/res/drawable-xhdpi/led_connected.png b/app/src/main/res/drawable-xhdpi/led_connected.png
similarity index 100%
rename from res/drawable-xhdpi/led_connected.png
rename to app/src/main/res/drawable-xhdpi/led_connected.png
diff --git a/res/drawable-xhdpi/led_disconnected.png b/app/src/main/res/drawable-xhdpi/led_disconnected.png
similarity index 100%
rename from res/drawable-xhdpi/led_disconnected.png
rename to app/src/main/res/drawable-xhdpi/led_disconnected.png
diff --git a/res/drawable-xhdpi/led_error.png b/app/src/main/res/drawable-xhdpi/led_error.png
similarity index 100%
rename from res/drawable-xhdpi/led_error.png
rename to app/src/main/res/drawable-xhdpi/led_error.png
diff --git a/res/drawable-xhdpi/led_inprogress.png b/app/src/main/res/drawable-xhdpi/led_inprogress.png
similarity index 100%
rename from res/drawable-xhdpi/led_inprogress.png
rename to app/src/main/res/drawable-xhdpi/led_inprogress.png
diff --git a/res/drawable-xhdpi/linphone_logo.png b/app/src/main/res/drawable-xhdpi/linphone_logo.png
similarity index 100%
rename from res/drawable-xhdpi/linphone_logo.png
rename to app/src/main/res/drawable-xhdpi/linphone_logo.png
diff --git a/res/drawable-xhdpi/linphone_logo_orange.png b/app/src/main/res/drawable-xhdpi/linphone_logo_orange.png
similarity index 100%
rename from res/drawable-xhdpi/linphone_logo_orange.png
rename to app/src/main/res/drawable-xhdpi/linphone_logo_orange.png
diff --git a/res/drawable-xhdpi/linphone_notification_icon.png b/app/src/main/res/drawable-xhdpi/linphone_notification_icon.png
similarity index 100%
rename from res/drawable-xhdpi/linphone_notification_icon.png
rename to app/src/main/res/drawable-xhdpi/linphone_notification_icon.png
diff --git a/res/drawable-xhdpi/linphone_user.png b/app/src/main/res/drawable-xhdpi/linphone_user.png
similarity index 100%
rename from res/drawable-xhdpi/linphone_user.png
rename to app/src/main/res/drawable-xhdpi/linphone_user.png
diff --git a/res/drawable-xhdpi/list_details_default.png b/app/src/main/res/drawable-xhdpi/list_details_default.png
similarity index 100%
rename from res/drawable-xhdpi/list_details_default.png
rename to app/src/main/res/drawable-xhdpi/list_details_default.png
diff --git a/res/drawable-xhdpi/list_details_over.png b/app/src/main/res/drawable-xhdpi/list_details_over.png
similarity index 100%
rename from res/drawable-xhdpi/list_details_over.png
rename to app/src/main/res/drawable-xhdpi/list_details_over.png
diff --git a/res/drawable-xhdpi/menu_about.png b/app/src/main/res/drawable-xhdpi/menu_about.png
similarity index 100%
rename from res/drawable-xhdpi/menu_about.png
rename to app/src/main/res/drawable-xhdpi/menu_about.png
diff --git a/res/drawable-xhdpi/menu_assistant.png b/app/src/main/res/drawable-xhdpi/menu_assistant.png
similarity index 100%
rename from res/drawable-xhdpi/menu_assistant.png
rename to app/src/main/res/drawable-xhdpi/menu_assistant.png
diff --git a/res/drawable-xhdpi/menu_default.png b/app/src/main/res/drawable-xhdpi/menu_default.png
similarity index 100%
rename from res/drawable-xhdpi/menu_default.png
rename to app/src/main/res/drawable-xhdpi/menu_default.png
diff --git a/res/drawable-xhdpi/menu_disabled.png b/app/src/main/res/drawable-xhdpi/menu_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/menu_disabled.png
rename to app/src/main/res/drawable-xhdpi/menu_disabled.png
diff --git a/res/drawable-xhdpi/menu_options.png b/app/src/main/res/drawable-xhdpi/menu_options.png
similarity index 100%
rename from res/drawable-xhdpi/menu_options.png
rename to app/src/main/res/drawable-xhdpi/menu_options.png
diff --git a/res/drawable-xhdpi/message_delivered.png b/app/src/main/res/drawable-xhdpi/message_delivered.png
similarity index 100%
rename from res/drawable-xhdpi/message_delivered.png
rename to app/src/main/res/drawable-xhdpi/message_delivered.png
diff --git a/res/drawable-xhdpi/message_read.png b/app/src/main/res/drawable-xhdpi/message_read.png
similarity index 100%
rename from res/drawable-xhdpi/message_read.png
rename to app/src/main/res/drawable-xhdpi/message_read.png
diff --git a/res/drawable-xhdpi/message_undelivered.png b/app/src/main/res/drawable-xhdpi/message_undelivered.png
similarity index 100%
rename from res/drawable-xhdpi/message_undelivered.png
rename to app/src/main/res/drawable-xhdpi/message_undelivered.png
diff --git a/res/drawable-xhdpi/micro_default.png b/app/src/main/res/drawable-xhdpi/micro_default.png
similarity index 100%
rename from res/drawable-xhdpi/micro_default.png
rename to app/src/main/res/drawable-xhdpi/micro_default.png
diff --git a/res/drawable-xhdpi/micro_selected.png b/app/src/main/res/drawable-xhdpi/micro_selected.png
similarity index 100%
rename from res/drawable-xhdpi/micro_selected.png
rename to app/src/main/res/drawable-xhdpi/micro_selected.png
diff --git a/res/drawable-xhdpi/next.png b/app/src/main/res/drawable-xhdpi/next.png
similarity index 100%
rename from res/drawable-xhdpi/next.png
rename to app/src/main/res/drawable-xhdpi/next.png
diff --git a/res/drawable-xhdpi/next_disabled.png b/app/src/main/res/drawable-xhdpi/next_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/next_disabled.png
rename to app/src/main/res/drawable-xhdpi/next_disabled.png
diff --git a/res/drawable-xhdpi/numpad_0.png b/app/src/main/res/drawable-xhdpi/numpad_0.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_0.png
rename to app/src/main/res/drawable-xhdpi/numpad_0.png
diff --git a/res/drawable-xhdpi/numpad_0_over.png b/app/src/main/res/drawable-xhdpi/numpad_0_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_0_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_0_over.png
diff --git a/res/drawable-xhdpi/numpad_1.png b/app/src/main/res/drawable-xhdpi/numpad_1.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_1.png
rename to app/src/main/res/drawable-xhdpi/numpad_1.png
diff --git a/res/drawable-xhdpi/numpad_1_over.png b/app/src/main/res/drawable-xhdpi/numpad_1_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_1_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_1_over.png
diff --git a/res/drawable-xhdpi/numpad_2.png b/app/src/main/res/drawable-xhdpi/numpad_2.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_2.png
rename to app/src/main/res/drawable-xhdpi/numpad_2.png
diff --git a/res/drawable-xhdpi/numpad_2_over.png b/app/src/main/res/drawable-xhdpi/numpad_2_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_2_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_2_over.png
diff --git a/res/drawable-xhdpi/numpad_3.png b/app/src/main/res/drawable-xhdpi/numpad_3.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_3.png
rename to app/src/main/res/drawable-xhdpi/numpad_3.png
diff --git a/res/drawable-xhdpi/numpad_3_over.png b/app/src/main/res/drawable-xhdpi/numpad_3_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_3_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_3_over.png
diff --git a/res/drawable-xhdpi/numpad_4.png b/app/src/main/res/drawable-xhdpi/numpad_4.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_4.png
rename to app/src/main/res/drawable-xhdpi/numpad_4.png
diff --git a/res/drawable-xhdpi/numpad_4_over.png b/app/src/main/res/drawable-xhdpi/numpad_4_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_4_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_4_over.png
diff --git a/res/drawable-xhdpi/numpad_5.png b/app/src/main/res/drawable-xhdpi/numpad_5.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_5.png
rename to app/src/main/res/drawable-xhdpi/numpad_5.png
diff --git a/res/drawable-xhdpi/numpad_5_over.png b/app/src/main/res/drawable-xhdpi/numpad_5_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_5_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_5_over.png
diff --git a/res/drawable-xhdpi/numpad_6.png b/app/src/main/res/drawable-xhdpi/numpad_6.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_6.png
rename to app/src/main/res/drawable-xhdpi/numpad_6.png
diff --git a/res/drawable-xhdpi/numpad_6_over.png b/app/src/main/res/drawable-xhdpi/numpad_6_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_6_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_6_over.png
diff --git a/res/drawable-xhdpi/numpad_7.png b/app/src/main/res/drawable-xhdpi/numpad_7.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_7.png
rename to app/src/main/res/drawable-xhdpi/numpad_7.png
diff --git a/res/drawable-xhdpi/numpad_7_over.png b/app/src/main/res/drawable-xhdpi/numpad_7_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_7_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_7_over.png
diff --git a/res/drawable-xhdpi/numpad_8.png b/app/src/main/res/drawable-xhdpi/numpad_8.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_8.png
rename to app/src/main/res/drawable-xhdpi/numpad_8.png
diff --git a/res/drawable-xhdpi/numpad_8_over.png b/app/src/main/res/drawable-xhdpi/numpad_8_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_8_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_8_over.png
diff --git a/res/drawable-xhdpi/numpad_9.png b/app/src/main/res/drawable-xhdpi/numpad_9.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_9.png
rename to app/src/main/res/drawable-xhdpi/numpad_9.png
diff --git a/res/drawable-xhdpi/numpad_9_over.png b/app/src/main/res/drawable-xhdpi/numpad_9_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_9_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_9_over.png
diff --git a/res/drawable-xhdpi/numpad_hash.png b/app/src/main/res/drawable-xhdpi/numpad_hash.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_hash.png
rename to app/src/main/res/drawable-xhdpi/numpad_hash.png
diff --git a/res/drawable-xhdpi/numpad_hash_over.png b/app/src/main/res/drawable-xhdpi/numpad_hash_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_hash_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_hash_over.png
diff --git a/res/drawable-xhdpi/numpad_star.png b/app/src/main/res/drawable-xhdpi/numpad_star.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_star.png
rename to app/src/main/res/drawable-xhdpi/numpad_star.png
diff --git a/res/drawable-xhdpi/numpad_star_over.png b/app/src/main/res/drawable-xhdpi/numpad_star_over.png
similarity index 100%
rename from res/drawable-xhdpi/numpad_star_over.png
rename to app/src/main/res/drawable-xhdpi/numpad_star_over.png
diff --git a/res/drawable-xhdpi/options_add_call_default.png b/app/src/main/res/drawable-xhdpi/options_add_call_default.png
similarity index 100%
rename from res/drawable-xhdpi/options_add_call_default.png
rename to app/src/main/res/drawable-xhdpi/options_add_call_default.png
diff --git a/res/drawable-xhdpi/options_add_call_disabled.png b/app/src/main/res/drawable-xhdpi/options_add_call_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/options_add_call_disabled.png
rename to app/src/main/res/drawable-xhdpi/options_add_call_disabled.png
diff --git a/res/drawable-xhdpi/options_default.png b/app/src/main/res/drawable-xhdpi/options_default.png
similarity index 100%
rename from res/drawable-xhdpi/options_default.png
rename to app/src/main/res/drawable-xhdpi/options_default.png
diff --git a/res/drawable-xhdpi/options_selected.png b/app/src/main/res/drawable-xhdpi/options_selected.png
similarity index 100%
rename from res/drawable-xhdpi/options_selected.png
rename to app/src/main/res/drawable-xhdpi/options_selected.png
diff --git a/res/drawable-xhdpi/options_start_conference_default.png b/app/src/main/res/drawable-xhdpi/options_start_conference_default.png
similarity index 100%
rename from res/drawable-xhdpi/options_start_conference_default.png
rename to app/src/main/res/drawable-xhdpi/options_start_conference_default.png
diff --git a/res/drawable-xhdpi/options_start_conference_disabled.png b/app/src/main/res/drawable-xhdpi/options_start_conference_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/options_start_conference_disabled.png
rename to app/src/main/res/drawable-xhdpi/options_start_conference_disabled.png
diff --git a/res/drawable-xhdpi/options_transfer_call_default.png b/app/src/main/res/drawable-xhdpi/options_transfer_call_default.png
similarity index 100%
rename from res/drawable-xhdpi/options_transfer_call_default.png
rename to app/src/main/res/drawable-xhdpi/options_transfer_call_default.png
diff --git a/res/drawable-xhdpi/options_transfer_call_disabled.png b/app/src/main/res/drawable-xhdpi/options_transfer_call_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/options_transfer_call_disabled.png
rename to app/src/main/res/drawable-xhdpi/options_transfer_call_disabled.png
diff --git a/res/drawable-xhdpi/pause_default.png b/app/src/main/res/drawable-xhdpi/pause_default.png
similarity index 100%
rename from res/drawable-xhdpi/pause_default.png
rename to app/src/main/res/drawable-xhdpi/pause_default.png
diff --git a/res/drawable-xhdpi/pause_disabled.png b/app/src/main/res/drawable-xhdpi/pause_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/pause_disabled.png
rename to app/src/main/res/drawable-xhdpi/pause_disabled.png
diff --git a/res/drawable-xhdpi/pause_over_selected.png b/app/src/main/res/drawable-xhdpi/pause_over_selected.png
similarity index 100%
rename from res/drawable-xhdpi/pause_over_selected.png
rename to app/src/main/res/drawable-xhdpi/pause_over_selected.png
diff --git a/res/drawable-xhdpi/quit_default.png b/app/src/main/res/drawable-xhdpi/quit_default.png
similarity index 100%
rename from res/drawable-xhdpi/quit_default.png
rename to app/src/main/res/drawable-xhdpi/quit_default.png
diff --git a/res/drawable-xhdpi/quit_over.png b/app/src/main/res/drawable-xhdpi/quit_over.png
similarity index 100%
rename from res/drawable-xhdpi/quit_over.png
rename to app/src/main/res/drawable-xhdpi/quit_over.png
diff --git a/res/drawable-xhdpi/resizable_assistant_button_default.9.png b/app/src/main/res/drawable-xhdpi/resizable_assistant_button_default.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_assistant_button_default.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_assistant_button_default.9.png
diff --git a/res/drawable-xhdpi/resizable_assistant_button_disabled.9.png b/app/src/main/res/drawable-xhdpi/resizable_assistant_button_disabled.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_assistant_button_disabled.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_assistant_button_disabled.9.png
diff --git a/res/drawable-xhdpi/resizable_assistant_button_over.9.png b/app/src/main/res/drawable-xhdpi/resizable_assistant_button_over.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_assistant_button_over.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_assistant_button_over.9.png
diff --git a/res/drawable-xhdpi/resizable_chat_bubble_incoming.9.png b/app/src/main/res/drawable-xhdpi/resizable_chat_bubble_incoming.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_chat_bubble_incoming.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_chat_bubble_incoming.9.png
diff --git a/res/drawable-xhdpi/resizable_chat_bubble_outgoing.9.png b/app/src/main/res/drawable-xhdpi/resizable_chat_bubble_outgoing.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_chat_bubble_outgoing.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_chat_bubble_outgoing.9.png
diff --git a/res/drawable-xhdpi/resizable_confirm_delete_button.9.png b/app/src/main/res/drawable-xhdpi/resizable_confirm_delete_button.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_confirm_delete_button.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_confirm_delete_button.9.png
diff --git a/res/drawable-xhdpi/resizable_textfield.9.png b/app/src/main/res/drawable-xhdpi/resizable_textfield.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_textfield.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_textfield.9.png
diff --git a/res/drawable-xhdpi/resizable_textfield_error.9.png b/app/src/main/res/drawable-xhdpi/resizable_textfield_error.9.png
similarity index 100%
rename from res/drawable-xhdpi/resizable_textfield_error.9.png
rename to app/src/main/res/drawable-xhdpi/resizable_textfield_error.9.png
diff --git a/res/drawable-xhdpi/route_bluetooth_default.png b/app/src/main/res/drawable-xhdpi/route_bluetooth_default.png
similarity index 100%
rename from res/drawable-xhdpi/route_bluetooth_default.png
rename to app/src/main/res/drawable-xhdpi/route_bluetooth_default.png
diff --git a/res/drawable-xhdpi/route_bluetooth_selected.png b/app/src/main/res/drawable-xhdpi/route_bluetooth_selected.png
similarity index 100%
rename from res/drawable-xhdpi/route_bluetooth_selected.png
rename to app/src/main/res/drawable-xhdpi/route_bluetooth_selected.png
diff --git a/res/drawable-xhdpi/route_earpiece_default.png b/app/src/main/res/drawable-xhdpi/route_earpiece_default.png
similarity index 100%
rename from res/drawable-xhdpi/route_earpiece_default.png
rename to app/src/main/res/drawable-xhdpi/route_earpiece_default.png
diff --git a/res/drawable-xhdpi/route_earpiece_selected.png b/app/src/main/res/drawable-xhdpi/route_earpiece_selected.png
similarity index 100%
rename from res/drawable-xhdpi/route_earpiece_selected.png
rename to app/src/main/res/drawable-xhdpi/route_earpiece_selected.png
diff --git a/res/drawable-xhdpi/route_speaker_default.png b/app/src/main/res/drawable-xhdpi/route_speaker_default.png
similarity index 100%
rename from res/drawable-xhdpi/route_speaker_default.png
rename to app/src/main/res/drawable-xhdpi/route_speaker_default.png
diff --git a/res/drawable-xhdpi/route_speaker_selected.png b/app/src/main/res/drawable-xhdpi/route_speaker_selected.png
similarity index 100%
rename from res/drawable-xhdpi/route_speaker_selected.png
rename to app/src/main/res/drawable-xhdpi/route_speaker_selected.png
diff --git a/res/drawable-xhdpi/routes_default.png b/app/src/main/res/drawable-xhdpi/routes_default.png
similarity index 100%
rename from res/drawable-xhdpi/routes_default.png
rename to app/src/main/res/drawable-xhdpi/routes_default.png
diff --git a/res/drawable-xhdpi/security_1_indicator.png b/app/src/main/res/drawable-xhdpi/security_1_indicator.png
similarity index 100%
rename from res/drawable-xhdpi/security_1_indicator.png
rename to app/src/main/res/drawable-xhdpi/security_1_indicator.png
diff --git a/res/drawable-xhdpi/security_2_indicator.png b/app/src/main/res/drawable-xhdpi/security_2_indicator.png
similarity index 100%
rename from res/drawable-xhdpi/security_2_indicator.png
rename to app/src/main/res/drawable-xhdpi/security_2_indicator.png
diff --git a/res/drawable-xhdpi/security_alert_indicator.png b/app/src/main/res/drawable-xhdpi/security_alert_indicator.png
similarity index 100%
rename from res/drawable-xhdpi/security_alert_indicator.png
rename to app/src/main/res/drawable-xhdpi/security_alert_indicator.png
diff --git a/res/drawable-xhdpi/security_ko.png b/app/src/main/res/drawable-xhdpi/security_ko.png
similarity index 100%
rename from res/drawable-xhdpi/security_ko.png
rename to app/src/main/res/drawable-xhdpi/security_ko.png
diff --git a/res/drawable-xhdpi/security_ok.png b/app/src/main/res/drawable-xhdpi/security_ok.png
similarity index 100%
rename from res/drawable-xhdpi/security_ok.png
rename to app/src/main/res/drawable-xhdpi/security_ok.png
diff --git a/res/drawable-xhdpi/security_pending.png b/app/src/main/res/drawable-xhdpi/security_pending.png
similarity index 100%
rename from res/drawable-xhdpi/security_pending.png
rename to app/src/main/res/drawable-xhdpi/security_pending.png
diff --git a/res/drawable-xhdpi/security_toogle_icon_green.png b/app/src/main/res/drawable-xhdpi/security_toogle_icon_green.png
similarity index 100%
rename from res/drawable-xhdpi/security_toogle_icon_green.png
rename to app/src/main/res/drawable-xhdpi/security_toogle_icon_green.png
diff --git a/res/drawable-xhdpi/security_toogle_icon_grey.png b/app/src/main/res/drawable-xhdpi/security_toogle_icon_grey.png
similarity index 100%
rename from res/drawable-xhdpi/security_toogle_icon_grey.png
rename to app/src/main/res/drawable-xhdpi/security_toogle_icon_grey.png
diff --git a/res/drawable-xhdpi/select_all.png b/app/src/main/res/drawable-xhdpi/select_all.png
similarity index 100%
rename from res/drawable-xhdpi/select_all.png
rename to app/src/main/res/drawable-xhdpi/select_all.png
diff --git a/res/drawable-xhdpi/speaker_default.png b/app/src/main/res/drawable-xhdpi/speaker_default.png
similarity index 100%
rename from res/drawable-xhdpi/speaker_default.png
rename to app/src/main/res/drawable-xhdpi/speaker_default.png
diff --git a/res/drawable-xhdpi/speaker_selected.png b/app/src/main/res/drawable-xhdpi/speaker_selected.png
similarity index 100%
rename from res/drawable-xhdpi/speaker_selected.png
rename to app/src/main/res/drawable-xhdpi/speaker_selected.png
diff --git a/res/drawable-xhdpi/splashscreen.png b/app/src/main/res/drawable-xhdpi/splashscreen.png
similarity index 100%
rename from res/drawable-xhdpi/splashscreen.png
rename to app/src/main/res/drawable-xhdpi/splashscreen.png
diff --git a/res/drawable-xhdpi/topbar_avatar.png b/app/src/main/res/drawable-xhdpi/topbar_avatar.png
similarity index 100%
rename from res/drawable-xhdpi/topbar_avatar.png
rename to app/src/main/res/drawable-xhdpi/topbar_avatar.png
diff --git a/res/drawable-xhdpi/topbar_call_notification.png b/app/src/main/res/drawable-xhdpi/topbar_call_notification.png
similarity index 100%
rename from res/drawable-xhdpi/topbar_call_notification.png
rename to app/src/main/res/drawable-xhdpi/topbar_call_notification.png
diff --git a/res/drawable-xhdpi/topbar_chat_notification.png b/app/src/main/res/drawable-xhdpi/topbar_chat_notification.png
similarity index 100%
rename from res/drawable-xhdpi/topbar_chat_notification.png
rename to app/src/main/res/drawable-xhdpi/topbar_chat_notification.png
diff --git a/res/drawable-xhdpi/topbar_videocall_notification.png b/app/src/main/res/drawable-xhdpi/topbar_videocall_notification.png
similarity index 100%
rename from res/drawable-xhdpi/topbar_videocall_notification.png
rename to app/src/main/res/drawable-xhdpi/topbar_videocall_notification.png
diff --git a/res/drawable-xhdpi/valid_default.png b/app/src/main/res/drawable-xhdpi/valid_default.png
similarity index 100%
rename from res/drawable-xhdpi/valid_default.png
rename to app/src/main/res/drawable-xhdpi/valid_default.png
diff --git a/res/drawable-xhdpi/valid_disabled.png b/app/src/main/res/drawable-xhdpi/valid_disabled.png
similarity index 100%
rename from res/drawable-xhdpi/valid_disabled.png
rename to app/src/main/res/drawable-xhdpi/valid_disabled.png
diff --git a/res/drawable-xhdpi/voicemail.png b/app/src/main/res/drawable-xhdpi/voicemail.png
similarity index 100%
rename from res/drawable-xhdpi/voicemail.png
rename to app/src/main/res/drawable-xhdpi/voicemail.png
diff --git a/res/drawable-xhdpi/waiting_time.png b/app/src/main/res/drawable-xhdpi/waiting_time.png
similarity index 100%
rename from res/drawable-xhdpi/waiting_time.png
rename to app/src/main/res/drawable-xhdpi/waiting_time.png
diff --git a/res/drawable/assistant_button.xml b/app/src/main/res/drawable/assistant_button.xml
similarity index 100%
rename from res/drawable/assistant_button.xml
rename to app/src/main/res/drawable/assistant_button.xml
diff --git a/res/drawable/assistant_button_text_color.xml b/app/src/main/res/drawable/assistant_button_text_color.xml
similarity index 100%
rename from res/drawable/assistant_button_text_color.xml
rename to app/src/main/res/drawable/assistant_button_text_color.xml
diff --git a/res/drawable/backspace.xml b/app/src/main/res/drawable/backspace.xml
similarity index 100%
rename from res/drawable/backspace.xml
rename to app/src/main/res/drawable/backspace.xml
diff --git a/res/drawable/button_background.xml b/app/src/main/res/drawable/button_background.xml
similarity index 100%
rename from res/drawable/button_background.xml
rename to app/src/main/res/drawable/button_background.xml
diff --git a/res/drawable/call.xml b/app/src/main/res/drawable/call.xml
similarity index 100%
rename from res/drawable/call.xml
rename to app/src/main/res/drawable/call.xml
diff --git a/res/drawable/camera.xml b/app/src/main/res/drawable/camera.xml
similarity index 100%
rename from res/drawable/camera.xml
rename to app/src/main/res/drawable/camera.xml
diff --git a/res/drawable/chat.xml b/app/src/main/res/drawable/chat.xml
similarity index 100%
rename from res/drawable/chat.xml
rename to app/src/main/res/drawable/chat.xml
diff --git a/res/drawable/chat_file.xml b/app/src/main/res/drawable/chat_file.xml
similarity index 100%
rename from res/drawable/chat_file.xml
rename to app/src/main/res/drawable/chat_file.xml
diff --git a/res/drawable/chat_group_informations.xml b/app/src/main/res/drawable/chat_group_informations.xml
similarity index 100%
rename from res/drawable/chat_group_informations.xml
rename to app/src/main/res/drawable/chat_group_informations.xml
diff --git a/res/drawable/chat_room_creation_confirm.xml b/app/src/main/res/drawable/chat_room_creation_confirm.xml
similarity index 100%
rename from res/drawable/chat_room_creation_confirm.xml
rename to app/src/main/res/drawable/chat_room_creation_confirm.xml
diff --git a/res/drawable/chat_room_creation_next.xml b/app/src/main/res/drawable/chat_room_creation_next.xml
similarity index 100%
rename from res/drawable/chat_room_creation_next.xml
rename to app/src/main/res/drawable/chat_room_creation_next.xml
diff --git a/res/drawable/chat_room_group_infos.xml b/app/src/main/res/drawable/chat_room_group_infos.xml
similarity index 100%
rename from res/drawable/chat_room_group_infos.xml
rename to app/src/main/res/drawable/chat_room_group_infos.xml
diff --git a/res/drawable/chat_send_message.xml b/app/src/main/res/drawable/chat_send_message.xml
similarity index 100%
rename from res/drawable/chat_send_message.xml
rename to app/src/main/res/drawable/chat_send_message.xml
diff --git a/res/drawable/checkbox.xml b/app/src/main/res/drawable/checkbox.xml
similarity index 100%
rename from res/drawable/checkbox.xml
rename to app/src/main/res/drawable/checkbox.xml
diff --git a/res/drawable/clean_field.xml b/app/src/main/res/drawable/clean_field.xml
similarity index 100%
rename from res/drawable/clean_field.xml
rename to app/src/main/res/drawable/clean_field.xml
diff --git a/res/drawable/contact_add.xml b/app/src/main/res/drawable/contact_add.xml
similarity index 100%
rename from res/drawable/contact_add.xml
rename to app/src/main/res/drawable/contact_add.xml
diff --git a/res/drawable/contacts_all.xml b/app/src/main/res/drawable/contacts_all.xml
similarity index 100%
rename from res/drawable/contacts_all.xml
rename to app/src/main/res/drawable/contacts_all.xml
diff --git a/res/drawable/contacts_sip.xml b/app/src/main/res/drawable/contacts_sip.xml
similarity index 100%
rename from res/drawable/contacts_sip.xml
rename to app/src/main/res/drawable/contacts_sip.xml
diff --git a/res/drawable/delete.xml b/app/src/main/res/drawable/delete.xml
similarity index 100%
rename from res/drawable/delete.xml
rename to app/src/main/res/drawable/delete.xml
diff --git a/res/drawable/delete_field.xml b/app/src/main/res/drawable/delete_field.xml
similarity index 100%
rename from res/drawable/delete_field.xml
rename to app/src/main/res/drawable/delete_field.xml
diff --git a/res/drawable/dialer.xml b/app/src/main/res/drawable/dialer.xml
similarity index 100%
rename from res/drawable/dialer.xml
rename to app/src/main/res/drawable/dialer.xml
diff --git a/res/drawable/divider.xml b/app/src/main/res/drawable/divider.xml
similarity index 100%
rename from res/drawable/divider.xml
rename to app/src/main/res/drawable/divider.xml
diff --git a/res/drawable/edit_list.xml b/app/src/main/res/drawable/edit_list.xml
similarity index 100%
rename from res/drawable/edit_list.xml
rename to app/src/main/res/drawable/edit_list.xml
diff --git a/res/drawable/footer_button.xml b/app/src/main/res/drawable/footer_button.xml
similarity index 100%
rename from res/drawable/footer_button.xml
rename to app/src/main/res/drawable/footer_button.xml
diff --git a/res/drawable/generated_avatar_bg.xml b/app/src/main/res/drawable/generated_avatar_bg.xml
similarity index 100%
rename from res/drawable/generated_avatar_bg.xml
rename to app/src/main/res/drawable/generated_avatar_bg.xml
diff --git a/res/drawable/hangup.xml b/app/src/main/res/drawable/hangup.xml
similarity index 100%
rename from res/drawable/hangup.xml
rename to app/src/main/res/drawable/hangup.xml
diff --git a/res/drawable/history_all.xml b/app/src/main/res/drawable/history_all.xml
similarity index 100%
rename from res/drawable/history_all.xml
rename to app/src/main/res/drawable/history_all.xml
diff --git a/res/drawable/history_missed.xml b/app/src/main/res/drawable/history_missed.xml
similarity index 100%
rename from res/drawable/history_missed.xml
rename to app/src/main/res/drawable/history_missed.xml
diff --git a/res/drawable/list_detail.xml b/app/src/main/res/drawable/list_detail.xml
similarity index 100%
rename from res/drawable/list_detail.xml
rename to app/src/main/res/drawable/list_detail.xml
diff --git a/res/drawable/list_selector.xml b/app/src/main/res/drawable/list_selector.xml
similarity index 100%
rename from res/drawable/list_selector.xml
rename to app/src/main/res/drawable/list_selector.xml
diff --git a/res/drawable/menu.xml b/app/src/main/res/drawable/menu.xml
similarity index 100%
rename from res/drawable/menu.xml
rename to app/src/main/res/drawable/menu.xml
diff --git a/res/drawable/micro.xml b/app/src/main/res/drawable/micro.xml
similarity index 100%
rename from res/drawable/micro.xml
rename to app/src/main/res/drawable/micro.xml
diff --git a/res/drawable/numpad_eight.xml b/app/src/main/res/drawable/numpad_eight.xml
similarity index 100%
rename from res/drawable/numpad_eight.xml
rename to app/src/main/res/drawable/numpad_eight.xml
diff --git a/res/drawable/numpad_five.xml b/app/src/main/res/drawable/numpad_five.xml
similarity index 100%
rename from res/drawable/numpad_five.xml
rename to app/src/main/res/drawable/numpad_five.xml
diff --git a/res/drawable/numpad_four.xml b/app/src/main/res/drawable/numpad_four.xml
similarity index 100%
rename from res/drawable/numpad_four.xml
rename to app/src/main/res/drawable/numpad_four.xml
diff --git a/res/drawable/numpad_nine.xml b/app/src/main/res/drawable/numpad_nine.xml
similarity index 100%
rename from res/drawable/numpad_nine.xml
rename to app/src/main/res/drawable/numpad_nine.xml
diff --git a/res/drawable/numpad_one.xml b/app/src/main/res/drawable/numpad_one.xml
similarity index 100%
rename from res/drawable/numpad_one.xml
rename to app/src/main/res/drawable/numpad_one.xml
diff --git a/res/drawable/numpad_seven.xml b/app/src/main/res/drawable/numpad_seven.xml
similarity index 100%
rename from res/drawable/numpad_seven.xml
rename to app/src/main/res/drawable/numpad_seven.xml
diff --git a/res/drawable/numpad_sharp.xml b/app/src/main/res/drawable/numpad_sharp.xml
similarity index 100%
rename from res/drawable/numpad_sharp.xml
rename to app/src/main/res/drawable/numpad_sharp.xml
diff --git a/res/drawable/numpad_six.xml b/app/src/main/res/drawable/numpad_six.xml
similarity index 100%
rename from res/drawable/numpad_six.xml
rename to app/src/main/res/drawable/numpad_six.xml
diff --git a/res/drawable/numpad_star_digit.xml b/app/src/main/res/drawable/numpad_star_digit.xml
similarity index 100%
rename from res/drawable/numpad_star_digit.xml
rename to app/src/main/res/drawable/numpad_star_digit.xml
diff --git a/res/drawable/numpad_three.xml b/app/src/main/res/drawable/numpad_three.xml
similarity index 100%
rename from res/drawable/numpad_three.xml
rename to app/src/main/res/drawable/numpad_three.xml
diff --git a/res/drawable/numpad_two.xml b/app/src/main/res/drawable/numpad_two.xml
similarity index 100%
rename from res/drawable/numpad_two.xml
rename to app/src/main/res/drawable/numpad_two.xml
diff --git a/res/drawable/numpad_zero.xml b/app/src/main/res/drawable/numpad_zero.xml
similarity index 100%
rename from res/drawable/numpad_zero.xml
rename to app/src/main/res/drawable/numpad_zero.xml
diff --git a/res/drawable/options.xml b/app/src/main/res/drawable/options.xml
similarity index 100%
rename from res/drawable/options.xml
rename to app/src/main/res/drawable/options.xml
diff --git a/res/drawable/options_add_call.xml b/app/src/main/res/drawable/options_add_call.xml
similarity index 100%
rename from res/drawable/options_add_call.xml
rename to app/src/main/res/drawable/options_add_call.xml
diff --git a/res/drawable/options_start_conference.xml b/app/src/main/res/drawable/options_start_conference.xml
similarity index 100%
rename from res/drawable/options_start_conference.xml
rename to app/src/main/res/drawable/options_start_conference.xml
diff --git a/res/drawable/options_transfer_call.xml b/app/src/main/res/drawable/options_transfer_call.xml
similarity index 100%
rename from res/drawable/options_transfer_call.xml
rename to app/src/main/res/drawable/options_transfer_call.xml
diff --git a/res/drawable/pause.xml b/app/src/main/res/drawable/pause.xml
similarity index 100%
rename from res/drawable/pause.xml
rename to app/src/main/res/drawable/pause.xml
diff --git a/res/drawable/quit.xml b/app/src/main/res/drawable/quit.xml
similarity index 100%
rename from res/drawable/quit.xml
rename to app/src/main/res/drawable/quit.xml
diff --git a/res/drawable/resizable_assistant_button.xml b/app/src/main/res/drawable/resizable_assistant_button.xml
similarity index 100%
rename from res/drawable/resizable_assistant_button.xml
rename to app/src/main/res/drawable/resizable_assistant_button.xml
diff --git a/res/drawable/round_button_background.xml b/app/src/main/res/drawable/round_button_background.xml
similarity index 100%
rename from res/drawable/round_button_background.xml
rename to app/src/main/res/drawable/round_button_background.xml
diff --git a/res/drawable/round_button_background_default.xml b/app/src/main/res/drawable/round_button_background_default.xml
similarity index 100%
rename from res/drawable/round_button_background_default.xml
rename to app/src/main/res/drawable/round_button_background_default.xml
diff --git a/res/drawable/round_button_background_over.xml b/app/src/main/res/drawable/round_button_background_over.xml
similarity index 100%
rename from res/drawable/round_button_background_over.xml
rename to app/src/main/res/drawable/round_button_background_over.xml
diff --git a/res/drawable/round_orange_button_background.xml b/app/src/main/res/drawable/round_orange_button_background.xml
similarity index 100%
rename from res/drawable/round_orange_button_background.xml
rename to app/src/main/res/drawable/round_orange_button_background.xml
diff --git a/res/drawable/round_orange_button_background_default.xml b/app/src/main/res/drawable/round_orange_button_background_default.xml
similarity index 100%
rename from res/drawable/round_orange_button_background_default.xml
rename to app/src/main/res/drawable/round_orange_button_background_default.xml
diff --git a/res/drawable/round_orange_button_background_over.xml b/app/src/main/res/drawable/round_orange_button_background_over.xml
similarity index 100%
rename from res/drawable/round_orange_button_background_over.xml
rename to app/src/main/res/drawable/round_orange_button_background_over.xml
diff --git a/res/drawable/route_bluetooth.xml b/app/src/main/res/drawable/route_bluetooth.xml
similarity index 100%
rename from res/drawable/route_bluetooth.xml
rename to app/src/main/res/drawable/route_bluetooth.xml
diff --git a/res/drawable/route_earpiece.xml b/app/src/main/res/drawable/route_earpiece.xml
similarity index 100%
rename from res/drawable/route_earpiece.xml
rename to app/src/main/res/drawable/route_earpiece.xml
diff --git a/res/drawable/route_speaker.xml b/app/src/main/res/drawable/route_speaker.xml
similarity index 100%
rename from res/drawable/route_speaker.xml
rename to app/src/main/res/drawable/route_speaker.xml
diff --git a/res/drawable/security_switch_thumb.xml b/app/src/main/res/drawable/security_switch_thumb.xml
similarity index 100%
rename from res/drawable/security_switch_thumb.xml
rename to app/src/main/res/drawable/security_switch_thumb.xml
diff --git a/res/drawable/security_switch_track.xml b/app/src/main/res/drawable/security_switch_track.xml
similarity index 100%
rename from res/drawable/security_switch_track.xml
rename to app/src/main/res/drawable/security_switch_track.xml
diff --git a/res/drawable/speaker.xml b/app/src/main/res/drawable/speaker.xml
similarity index 100%
rename from res/drawable/speaker.xml
rename to app/src/main/res/drawable/speaker.xml
diff --git a/res/drawable/status_level.xml b/app/src/main/res/drawable/status_level.xml
similarity index 100%
rename from res/drawable/status_level.xml
rename to app/src/main/res/drawable/status_level.xml
diff --git a/res/drawable/switch_camera.xml b/app/src/main/res/drawable/switch_camera.xml
similarity index 100%
rename from res/drawable/switch_camera.xml
rename to app/src/main/res/drawable/switch_camera.xml
diff --git a/res/drawable/toolbar_button.xml b/app/src/main/res/drawable/toolbar_button.xml
similarity index 100%
rename from res/drawable/toolbar_button.xml
rename to app/src/main/res/drawable/toolbar_button.xml
diff --git a/res/drawable/unread_message_count_bg.xml b/app/src/main/res/drawable/unread_message_count_bg.xml
similarity index 100%
rename from res/drawable/unread_message_count_bg.xml
rename to app/src/main/res/drawable/unread_message_count_bg.xml
diff --git a/res/drawable/valid.xml b/app/src/main/res/drawable/valid.xml
similarity index 100%
rename from res/drawable/valid.xml
rename to app/src/main/res/drawable/valid.xml
diff --git a/res/layout-land/about.xml b/app/src/main/res/layout-land/about.xml
similarity index 100%
rename from res/layout-land/about.xml
rename to app/src/main/res/layout-land/about.xml
diff --git a/res/layout-land/assistant_codec_downloader.xml b/app/src/main/res/layout-land/assistant_codec_downloader.xml
similarity index 100%
rename from res/layout-land/assistant_codec_downloader.xml
rename to app/src/main/res/layout-land/assistant_codec_downloader.xml
diff --git a/res/layout-land/call.xml b/app/src/main/res/layout-land/call.xml
similarity index 100%
rename from res/layout-land/call.xml
rename to app/src/main/res/layout-land/call.xml
diff --git a/res/layout-land/dialer.xml b/app/src/main/res/layout-land/dialer.xml
similarity index 100%
rename from res/layout-land/dialer.xml
rename to app/src/main/res/layout-land/dialer.xml
diff --git a/res/layout-land/launch_screen.xml b/app/src/main/res/layout-land/launch_screen.xml
similarity index 100%
rename from res/layout-land/launch_screen.xml
rename to app/src/main/res/layout-land/launch_screen.xml
diff --git a/res/layout-land/main.xml b/app/src/main/res/layout-land/main.xml
similarity index 100%
rename from res/layout-land/main.xml
rename to app/src/main/res/layout-land/main.xml
diff --git a/res/layout-sw533dp-land/assistant_account_creation.xml b/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml
similarity index 100%
rename from res/layout-sw533dp-land/assistant_account_creation.xml
rename to app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml
diff --git a/res/layout-sw533dp-land/assistant_codec_downloader.xml b/app/src/main/res/layout-sw533dp-land/assistant_codec_downloader.xml
similarity index 100%
rename from res/layout-sw533dp-land/assistant_codec_downloader.xml
rename to app/src/main/res/layout-sw533dp-land/assistant_codec_downloader.xml
diff --git a/res/layout-sw533dp-land/assistant_linphone_login.xml b/app/src/main/res/layout-sw533dp-land/assistant_linphone_login.xml
similarity index 100%
rename from res/layout-sw533dp-land/assistant_linphone_login.xml
rename to app/src/main/res/layout-sw533dp-land/assistant_linphone_login.xml
diff --git a/res/layout-sw533dp-land/assistant_login.xml b/app/src/main/res/layout-sw533dp-land/assistant_login.xml
similarity index 100%
rename from res/layout-sw533dp-land/assistant_login.xml
rename to app/src/main/res/layout-sw533dp-land/assistant_login.xml
diff --git a/res/layout-sw533dp-land/assistant_welcome.xml b/app/src/main/res/layout-sw533dp-land/assistant_welcome.xml
similarity index 100%
rename from res/layout-sw533dp-land/assistant_welcome.xml
rename to app/src/main/res/layout-sw533dp-land/assistant_welcome.xml
diff --git a/res/layout-sw533dp-land/call.xml b/app/src/main/res/layout-sw533dp-land/call.xml
similarity index 100%
rename from res/layout-sw533dp-land/call.xml
rename to app/src/main/res/layout-sw533dp-land/call.xml
diff --git a/res/layout-sw533dp-land/dialer.xml b/app/src/main/res/layout-sw533dp-land/dialer.xml
similarity index 100%
rename from res/layout-sw533dp-land/dialer.xml
rename to app/src/main/res/layout-sw533dp-land/dialer.xml
diff --git a/res/layout-sw533dp-land/main.xml b/app/src/main/res/layout-sw533dp-land/main.xml
similarity index 100%
rename from res/layout-sw533dp-land/main.xml
rename to app/src/main/res/layout-sw533dp-land/main.xml
diff --git a/res/layout-sw533dp/assistant_codec_downloader.xml b/app/src/main/res/layout-sw533dp/assistant_codec_downloader.xml
similarity index 100%
rename from res/layout-sw533dp/assistant_codec_downloader.xml
rename to app/src/main/res/layout-sw533dp/assistant_codec_downloader.xml
diff --git a/res/layout-sw533dp/dialer.xml b/app/src/main/res/layout-sw533dp/dialer.xml
similarity index 100%
rename from res/layout-sw533dp/dialer.xml
rename to app/src/main/res/layout-sw533dp/dialer.xml
diff --git a/res/layout-sw533dp/main.xml b/app/src/main/res/layout-sw533dp/main.xml
similarity index 100%
rename from res/layout-sw533dp/main.xml
rename to app/src/main/res/layout-sw533dp/main.xml
diff --git a/res/layout-sw720dp-land/assistant_codec_downloader.xml b/app/src/main/res/layout-sw720dp-land/assistant_codec_downloader.xml
similarity index 100%
rename from res/layout-sw720dp-land/assistant_codec_downloader.xml
rename to app/src/main/res/layout-sw720dp-land/assistant_codec_downloader.xml
diff --git a/res/layout/about.xml b/app/src/main/res/layout/about.xml
similarity index 100%
rename from res/layout/about.xml
rename to app/src/main/res/layout/about.xml
diff --git a/res/layout/assistant.xml b/app/src/main/res/layout/assistant.xml
similarity index 100%
rename from res/layout/assistant.xml
rename to app/src/main/res/layout/assistant.xml
diff --git a/res/layout/assistant_account_creation.xml b/app/src/main/res/layout/assistant_account_creation.xml
similarity index 100%
rename from res/layout/assistant_account_creation.xml
rename to app/src/main/res/layout/assistant_account_creation.xml
diff --git a/res/layout/assistant_account_creation_code_activation.xml b/app/src/main/res/layout/assistant_account_creation_code_activation.xml
similarity index 100%
rename from res/layout/assistant_account_creation_code_activation.xml
rename to app/src/main/res/layout/assistant_account_creation_code_activation.xml
diff --git a/res/layout/assistant_account_creation_email_activation.xml b/app/src/main/res/layout/assistant_account_creation_email_activation.xml
similarity index 100%
rename from res/layout/assistant_account_creation_email_activation.xml
rename to app/src/main/res/layout/assistant_account_creation_email_activation.xml
diff --git a/res/layout/assistant_codec_downloader.xml b/app/src/main/res/layout/assistant_codec_downloader.xml
similarity index 100%
rename from res/layout/assistant_codec_downloader.xml
rename to app/src/main/res/layout/assistant_codec_downloader.xml
diff --git a/res/layout/assistant_country_list.xml b/app/src/main/res/layout/assistant_country_list.xml
similarity index 100%
rename from res/layout/assistant_country_list.xml
rename to app/src/main/res/layout/assistant_country_list.xml
diff --git a/res/layout/assistant_ec_calibration.xml b/app/src/main/res/layout/assistant_ec_calibration.xml
similarity index 100%
rename from res/layout/assistant_ec_calibration.xml
rename to app/src/main/res/layout/assistant_ec_calibration.xml
diff --git a/res/layout/assistant_linphone_login.xml b/app/src/main/res/layout/assistant_linphone_login.xml
similarity index 100%
rename from res/layout/assistant_linphone_login.xml
rename to app/src/main/res/layout/assistant_linphone_login.xml
diff --git a/res/layout/assistant_login.xml b/app/src/main/res/layout/assistant_login.xml
similarity index 100%
rename from res/layout/assistant_login.xml
rename to app/src/main/res/layout/assistant_login.xml
diff --git a/res/layout/assistant_remote_provisioning.xml b/app/src/main/res/layout/assistant_remote_provisioning.xml
similarity index 100%
rename from res/layout/assistant_remote_provisioning.xml
rename to app/src/main/res/layout/assistant_remote_provisioning.xml
diff --git a/res/layout/assistant_remote_provisioning_login.xml b/app/src/main/res/layout/assistant_remote_provisioning_login.xml
similarity index 100%
rename from res/layout/assistant_remote_provisioning_login.xml
rename to app/src/main/res/layout/assistant_remote_provisioning_login.xml
diff --git a/res/layout/assistant_topbar.xml b/app/src/main/res/layout/assistant_topbar.xml
similarity index 100%
rename from res/layout/assistant_topbar.xml
rename to app/src/main/res/layout/assistant_topbar.xml
diff --git a/res/layout/assistant_welcome.xml b/app/src/main/res/layout/assistant_welcome.xml
similarity index 100%
rename from res/layout/assistant_welcome.xml
rename to app/src/main/res/layout/assistant_welcome.xml
diff --git a/res/layout/audio.xml b/app/src/main/res/layout/audio.xml
similarity index 100%
rename from res/layout/audio.xml
rename to app/src/main/res/layout/audio.xml
diff --git a/res/layout/call.xml b/app/src/main/res/layout/call.xml
similarity index 100%
rename from res/layout/call.xml
rename to app/src/main/res/layout/call.xml
diff --git a/res/layout/call_inactive_row.xml b/app/src/main/res/layout/call_inactive_row.xml
similarity index 100%
rename from res/layout/call_inactive_row.xml
rename to app/src/main/res/layout/call_inactive_row.xml
diff --git a/res/layout/call_incoming.xml b/app/src/main/res/layout/call_incoming.xml
similarity index 100%
rename from res/layout/call_incoming.xml
rename to app/src/main/res/layout/call_incoming.xml
diff --git a/res/layout/call_outgoing.xml b/app/src/main/res/layout/call_outgoing.xml
similarity index 100%
rename from res/layout/call_outgoing.xml
rename to app/src/main/res/layout/call_outgoing.xml
diff --git a/res/layout/chat.xml b/app/src/main/res/layout/chat.xml
similarity index 100%
rename from res/layout/chat.xml
rename to app/src/main/res/layout/chat.xml
diff --git a/res/layout/chat_bubble.xml b/app/src/main/res/layout/chat_bubble.xml
similarity index 100%
rename from res/layout/chat_bubble.xml
rename to app/src/main/res/layout/chat_bubble.xml
diff --git a/res/layout/chat_create.xml b/app/src/main/res/layout/chat_create.xml
similarity index 100%
rename from res/layout/chat_create.xml
rename to app/src/main/res/layout/chat_create.xml
diff --git a/res/layout/chat_device_cell.xml b/app/src/main/res/layout/chat_device_cell.xml
similarity index 100%
rename from res/layout/chat_device_cell.xml
rename to app/src/main/res/layout/chat_device_cell.xml
diff --git a/res/layout/chat_device_group.xml b/app/src/main/res/layout/chat_device_group.xml
similarity index 100%
rename from res/layout/chat_device_group.xml
rename to app/src/main/res/layout/chat_device_group.xml
diff --git a/res/layout/chat_devices.xml b/app/src/main/res/layout/chat_devices.xml
similarity index 100%
rename from res/layout/chat_devices.xml
rename to app/src/main/res/layout/chat_devices.xml
diff --git a/res/layout/chat_imdn.xml b/app/src/main/res/layout/chat_imdn.xml
similarity index 100%
rename from res/layout/chat_imdn.xml
rename to app/src/main/res/layout/chat_imdn.xml
diff --git a/res/layout/chat_imdn_cell.xml b/app/src/main/res/layout/chat_imdn_cell.xml
similarity index 100%
rename from res/layout/chat_imdn_cell.xml
rename to app/src/main/res/layout/chat_imdn_cell.xml
diff --git a/res/layout/chat_infos.xml b/app/src/main/res/layout/chat_infos.xml
similarity index 100%
rename from res/layout/chat_infos.xml
rename to app/src/main/res/layout/chat_infos.xml
diff --git a/res/layout/chat_infos_cell.xml b/app/src/main/res/layout/chat_infos_cell.xml
similarity index 100%
rename from res/layout/chat_infos_cell.xml
rename to app/src/main/res/layout/chat_infos_cell.xml
diff --git a/res/layout/chatlist.xml b/app/src/main/res/layout/chatlist.xml
similarity index 100%
rename from res/layout/chatlist.xml
rename to app/src/main/res/layout/chatlist.xml
diff --git a/res/layout/chatlist_cell.xml b/app/src/main/res/layout/chatlist_cell.xml
similarity index 100%
rename from res/layout/chatlist_cell.xml
rename to app/src/main/res/layout/chatlist_cell.xml
diff --git a/res/layout/conf_call_control_row.xml b/app/src/main/res/layout/conf_call_control_row.xml
similarity index 100%
rename from res/layout/conf_call_control_row.xml
rename to app/src/main/res/layout/conf_call_control_row.xml
diff --git a/res/layout/conference_header.xml b/app/src/main/res/layout/conference_header.xml
similarity index 100%
rename from res/layout/conference_header.xml
rename to app/src/main/res/layout/conference_header.xml
diff --git a/res/layout/conference_paused_row.xml b/app/src/main/res/layout/conference_paused_row.xml
similarity index 100%
rename from res/layout/conference_paused_row.xml
rename to app/src/main/res/layout/conference_paused_row.xml
diff --git a/res/layout/contact.xml b/app/src/main/res/layout/contact.xml
similarity index 100%
rename from res/layout/contact.xml
rename to app/src/main/res/layout/contact.xml
diff --git a/res/layout/contact_avatar.xml b/app/src/main/res/layout/contact_avatar.xml
similarity index 100%
rename from res/layout/contact_avatar.xml
rename to app/src/main/res/layout/contact_avatar.xml
diff --git a/res/layout/contact_cell.xml b/app/src/main/res/layout/contact_cell.xml
similarity index 100%
rename from res/layout/contact_cell.xml
rename to app/src/main/res/layout/contact_cell.xml
diff --git a/res/layout/contact_control_row.xml b/app/src/main/res/layout/contact_control_row.xml
similarity index 100%
rename from res/layout/contact_control_row.xml
rename to app/src/main/res/layout/contact_control_row.xml
diff --git a/res/layout/contact_edit.xml b/app/src/main/res/layout/contact_edit.xml
similarity index 100%
rename from res/layout/contact_edit.xml
rename to app/src/main/res/layout/contact_edit.xml
diff --git a/res/layout/contact_edit_row.xml b/app/src/main/res/layout/contact_edit_row.xml
similarity index 100%
rename from res/layout/contact_edit_row.xml
rename to app/src/main/res/layout/contact_edit_row.xml
diff --git a/res/layout/contact_selected.xml b/app/src/main/res/layout/contact_selected.xml
similarity index 100%
rename from res/layout/contact_selected.xml
rename to app/src/main/res/layout/contact_selected.xml
diff --git a/res/layout/contacts_list.xml b/app/src/main/res/layout/contacts_list.xml
similarity index 100%
rename from res/layout/contacts_list.xml
rename to app/src/main/res/layout/contacts_list.xml
diff --git a/res/layout/context_bar.xml b/app/src/main/res/layout/context_bar.xml
similarity index 100%
rename from res/layout/context_bar.xml
rename to app/src/main/res/layout/context_bar.xml
diff --git a/res/layout/country_cell.xml b/app/src/main/res/layout/country_cell.xml
similarity index 100%
rename from res/layout/country_cell.xml
rename to app/src/main/res/layout/country_cell.xml
diff --git a/res/layout/dialer.xml b/app/src/main/res/layout/dialer.xml
similarity index 100%
rename from res/layout/dialer.xml
rename to app/src/main/res/layout/dialer.xml
diff --git a/res/layout/dialog.xml b/app/src/main/res/layout/dialog.xml
similarity index 100%
rename from res/layout/dialog.xml
rename to app/src/main/res/layout/dialog.xml
diff --git a/res/layout/edit_list.xml b/app/src/main/res/layout/edit_list.xml
similarity index 100%
rename from res/layout/edit_list.xml
rename to app/src/main/res/layout/edit_list.xml
diff --git a/res/layout/empty_fragment.xml b/app/src/main/res/layout/empty_fragment.xml
similarity index 100%
rename from res/layout/empty_fragment.xml
rename to app/src/main/res/layout/empty_fragment.xml
diff --git a/res/layout/file_upload_cell.xml b/app/src/main/res/layout/file_upload_cell.xml
similarity index 100%
rename from res/layout/file_upload_cell.xml
rename to app/src/main/res/layout/file_upload_cell.xml
diff --git a/res/layout/group_contact_cell.xml b/app/src/main/res/layout/group_contact_cell.xml
similarity index 100%
rename from res/layout/group_contact_cell.xml
rename to app/src/main/res/layout/group_contact_cell.xml
diff --git a/res/layout/hello_world.xml b/app/src/main/res/layout/hello_world.xml
similarity index 100%
rename from res/layout/hello_world.xml
rename to app/src/main/res/layout/hello_world.xml
diff --git a/res/layout/hidden.xml b/app/src/main/res/layout/hidden.xml
similarity index 100%
rename from res/layout/hidden.xml
rename to app/src/main/res/layout/hidden.xml
diff --git a/res/layout/history.xml b/app/src/main/res/layout/history.xml
similarity index 100%
rename from res/layout/history.xml
rename to app/src/main/res/layout/history.xml
diff --git a/res/layout/history_cell.xml b/app/src/main/res/layout/history_cell.xml
similarity index 100%
rename from res/layout/history_cell.xml
rename to app/src/main/res/layout/history_cell.xml
diff --git a/res/layout/history_detail.xml b/app/src/main/res/layout/history_detail.xml
similarity index 100%
rename from res/layout/history_detail.xml
rename to app/src/main/res/layout/history_detail.xml
diff --git a/res/layout/image_upload_cell.xml b/app/src/main/res/layout/image_upload_cell.xml
similarity index 100%
rename from res/layout/image_upload_cell.xml
rename to app/src/main/res/layout/image_upload_cell.xml
diff --git a/res/layout/in_app.xml b/app/src/main/res/layout/in_app.xml
similarity index 100%
rename from res/layout/in_app.xml
rename to app/src/main/res/layout/in_app.xml
diff --git a/res/layout/in_app_list.xml b/app/src/main/res/layout/in_app_list.xml
similarity index 100%
rename from res/layout/in_app_list.xml
rename to app/src/main/res/layout/in_app_list.xml
diff --git a/res/layout/in_app_purchase_item.xml b/app/src/main/res/layout/in_app_purchase_item.xml
similarity index 100%
rename from res/layout/in_app_purchase_item.xml
rename to app/src/main/res/layout/in_app_purchase_item.xml
diff --git a/res/layout/in_app_store.xml b/app/src/main/res/layout/in_app_store.xml
similarity index 100%
rename from res/layout/in_app_store.xml
rename to app/src/main/res/layout/in_app_store.xml
diff --git a/res/layout/incall_stats.xml b/app/src/main/res/layout/incall_stats.xml
similarity index 100%
rename from res/layout/incall_stats.xml
rename to app/src/main/res/layout/incall_stats.xml
diff --git a/res/layout/launch_screen.xml b/app/src/main/res/layout/launch_screen.xml
similarity index 100%
rename from res/layout/launch_screen.xml
rename to app/src/main/res/layout/launch_screen.xml
diff --git a/res/layout/main.xml b/app/src/main/res/layout/main.xml
similarity index 100%
rename from res/layout/main.xml
rename to app/src/main/res/layout/main.xml
diff --git a/res/layout/new_password.xml b/app/src/main/res/layout/new_password.xml
similarity index 100%
rename from res/layout/new_password.xml
rename to app/src/main/res/layout/new_password.xml
diff --git a/res/layout/numpad.xml b/app/src/main/res/layout/numpad.xml
similarity index 100%
rename from res/layout/numpad.xml
rename to app/src/main/res/layout/numpad.xml
diff --git a/res/layout/preference_led.xml b/app/src/main/res/layout/preference_led.xml
similarity index 100%
rename from res/layout/preference_led.xml
rename to app/src/main/res/layout/preference_led.xml
diff --git a/res/layout/preference_list_content.xml b/app/src/main/res/layout/preference_list_content.xml
similarity index 100%
rename from res/layout/preference_list_content.xml
rename to app/src/main/res/layout/preference_list_content.xml
diff --git a/res/layout/progress_dialog.xml b/app/src/main/res/layout/progress_dialog.xml
similarity index 100%
rename from res/layout/progress_dialog.xml
rename to app/src/main/res/layout/progress_dialog.xml
diff --git a/res/layout/remote_provisioning.xml b/app/src/main/res/layout/remote_provisioning.xml
similarity index 100%
rename from res/layout/remote_provisioning.xml
rename to app/src/main/res/layout/remote_provisioning.xml
diff --git a/res/layout/search_contact_cell.xml b/app/src/main/res/layout/search_contact_cell.xml
similarity index 100%
rename from res/layout/search_contact_cell.xml
rename to app/src/main/res/layout/search_contact_cell.xml
diff --git a/res/layout/settings.xml b/app/src/main/res/layout/settings.xml
similarity index 100%
rename from res/layout/settings.xml
rename to app/src/main/res/layout/settings.xml
diff --git a/res/layout/side_menu_account_cell.xml b/app/src/main/res/layout/side_menu_account_cell.xml
similarity index 100%
rename from res/layout/side_menu_account_cell.xml
rename to app/src/main/res/layout/side_menu_account_cell.xml
diff --git a/res/layout/side_menu_item_cell.xml b/app/src/main/res/layout/side_menu_item_cell.xml
similarity index 100%
rename from res/layout/side_menu_item_cell.xml
rename to app/src/main/res/layout/side_menu_item_cell.xml
diff --git a/res/layout/side_menu_main_account.xml b/app/src/main/res/layout/side_menu_main_account.xml
similarity index 100%
rename from res/layout/side_menu_main_account.xml
rename to app/src/main/res/layout/side_menu_main_account.xml
diff --git a/res/layout/status.xml b/app/src/main/res/layout/status.xml
similarity index 100%
rename from res/layout/status.xml
rename to app/src/main/res/layout/status.xml
diff --git a/res/layout/toast.xml b/app/src/main/res/layout/toast.xml
similarity index 100%
rename from res/layout/toast.xml
rename to app/src/main/res/layout/toast.xml
diff --git a/res/layout/tuto_carddav.xml b/app/src/main/res/layout/tuto_carddav.xml
similarity index 100%
rename from res/layout/tuto_carddav.xml
rename to app/src/main/res/layout/tuto_carddav.xml
diff --git a/res/layout/tutorials.xml b/app/src/main/res/layout/tutorials.xml
similarity index 100%
rename from res/layout/tutorials.xml
rename to app/src/main/res/layout/tutorials.xml
diff --git a/res/layout/video.xml b/app/src/main/res/layout/video.xml
similarity index 100%
rename from res/layout/video.xml
rename to app/src/main/res/layout/video.xml
diff --git a/res/layout/video_no_opengl.xml b/app/src/main/res/layout/video_no_opengl.xml
similarity index 100%
rename from res/layout/video_no_opengl.xml
rename to app/src/main/res/layout/video_no_opengl.xml
diff --git a/res/layout/wait_layout.xml b/app/src/main/res/layout/wait_layout.xml
similarity index 100%
rename from res/layout/wait_layout.xml
rename to app/src/main/res/layout/wait_layout.xml
diff --git a/res/menu/chat_bubble_menu.xml b/app/src/main/res/menu/chat_bubble_menu.xml
similarity index 100%
rename from res/menu/chat_bubble_menu.xml
rename to app/src/main/res/menu/chat_bubble_menu.xml
diff --git a/res/menu/chat_bubble_menu_with_resend.xml b/app/src/main/res/menu/chat_bubble_menu_with_resend.xml
similarity index 100%
rename from res/menu/chat_bubble_menu_with_resend.xml
rename to app/src/main/res/menu/chat_bubble_menu_with_resend.xml
diff --git a/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
similarity index 100%
rename from res/mipmap-anydpi-v26/ic_launcher.xml
rename to app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
diff --git a/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
similarity index 100%
rename from res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
diff --git a/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from res/mipmap-hdpi/ic_launcher.png
rename to app/src/main/res/mipmap-hdpi/ic_launcher.png
diff --git a/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
similarity index 100%
rename from res/mipmap-hdpi/ic_launcher_round.png
rename to app/src/main/res/mipmap-hdpi/ic_launcher_round.png
diff --git a/res/mipmap-hdpi/linphone_launcher_icon_foreground.png b/app/src/main/res/mipmap-hdpi/linphone_launcher_icon_foreground.png
similarity index 100%
rename from res/mipmap-hdpi/linphone_launcher_icon_foreground.png
rename to app/src/main/res/mipmap-hdpi/linphone_launcher_icon_foreground.png
diff --git a/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from res/mipmap-mdpi/ic_launcher.png
rename to app/src/main/res/mipmap-mdpi/ic_launcher.png
diff --git a/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
similarity index 100%
rename from res/mipmap-mdpi/ic_launcher_round.png
rename to app/src/main/res/mipmap-mdpi/ic_launcher_round.png
diff --git a/res/mipmap-mdpi/linphone_launcher_icon_foreground.png b/app/src/main/res/mipmap-mdpi/linphone_launcher_icon_foreground.png
similarity index 100%
rename from res/mipmap-mdpi/linphone_launcher_icon_foreground.png
rename to app/src/main/res/mipmap-mdpi/linphone_launcher_icon_foreground.png
diff --git a/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from res/mipmap-xhdpi/ic_launcher.png
rename to app/src/main/res/mipmap-xhdpi/ic_launcher.png
diff --git a/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
similarity index 100%
rename from res/mipmap-xhdpi/ic_launcher_round.png
rename to app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
diff --git a/res/mipmap-xhdpi/linphone_launcher_icon_foreground.png b/app/src/main/res/mipmap-xhdpi/linphone_launcher_icon_foreground.png
similarity index 100%
rename from res/mipmap-xhdpi/linphone_launcher_icon_foreground.png
rename to app/src/main/res/mipmap-xhdpi/linphone_launcher_icon_foreground.png
diff --git a/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from res/mipmap-xxhdpi/ic_launcher.png
rename to app/src/main/res/mipmap-xxhdpi/ic_launcher.png
diff --git a/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
similarity index 100%
rename from res/mipmap-xxhdpi/ic_launcher_round.png
rename to app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
diff --git a/res/mipmap-xxhdpi/linphone_launcher_icon_foreground.png b/app/src/main/res/mipmap-xxhdpi/linphone_launcher_icon_foreground.png
similarity index 100%
rename from res/mipmap-xxhdpi/linphone_launcher_icon_foreground.png
rename to app/src/main/res/mipmap-xxhdpi/linphone_launcher_icon_foreground.png
diff --git a/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from res/mipmap-xxxhdpi/ic_launcher.png
rename to app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
diff --git a/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
similarity index 100%
rename from res/mipmap-xxxhdpi/ic_launcher_round.png
rename to app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
diff --git a/res/mipmap-xxxhdpi/linphone_launcher_icon_foreground.png b/app/src/main/res/mipmap-xxxhdpi/linphone_launcher_icon_foreground.png
similarity index 100%
rename from res/mipmap-xxxhdpi/linphone_launcher_icon_foreground.png
rename to app/src/main/res/mipmap-xxxhdpi/linphone_launcher_icon_foreground.png
diff --git a/res/raw-sw600dp/linphonerc_default b/app/src/main/res/raw-sw600dp/linphonerc_default
similarity index 100%
rename from res/raw-sw600dp/linphonerc_default
rename to app/src/main/res/raw-sw600dp/linphonerc_default
diff --git a/res/raw/assistant_create.rc b/app/src/main/res/raw/assistant_create.rc
similarity index 100%
rename from res/raw/assistant_create.rc
rename to app/src/main/res/raw/assistant_create.rc
diff --git a/res/raw/linphonerc_default b/app/src/main/res/raw/linphonerc_default
similarity index 100%
rename from res/raw/linphonerc_default
rename to app/src/main/res/raw/linphonerc_default
diff --git a/res/raw/linphonerc_factory b/app/src/main/res/raw/linphonerc_factory
similarity index 100%
rename from res/raw/linphonerc_factory
rename to app/src/main/res/raw/linphonerc_factory
diff --git a/res/raw/lpconfig.xsd b/app/src/main/res/raw/lpconfig.xsd
similarity index 100%
rename from res/raw/lpconfig.xsd
rename to app/src/main/res/raw/lpconfig.xsd
diff --git a/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
similarity index 100%
rename from res/values-ar/strings.xml
rename to app/src/main/res/values-ar/strings.xml
diff --git a/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
similarity index 100%
rename from res/values-de/strings.xml
rename to app/src/main/res/values-de/strings.xml
diff --git a/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
similarity index 100%
rename from res/values-es/strings.xml
rename to app/src/main/res/values-es/strings.xml
diff --git a/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
similarity index 100%
rename from res/values-fi/strings.xml
rename to app/src/main/res/values-fi/strings.xml
diff --git a/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
similarity index 100%
rename from res/values-fr/strings.xml
rename to app/src/main/res/values-fr/strings.xml
diff --git a/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
similarity index 100%
rename from res/values-hi/strings.xml
rename to app/src/main/res/values-hi/strings.xml
diff --git a/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
similarity index 100%
rename from res/values-it/strings.xml
rename to app/src/main/res/values-it/strings.xml
diff --git a/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
similarity index 100%
rename from res/values-iw/strings.xml
rename to app/src/main/res/values-iw/strings.xml
diff --git a/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
similarity index 100%
rename from res/values-ja/strings.xml
rename to app/src/main/res/values-ja/strings.xml
diff --git a/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml
similarity index 100%
rename from res/values-ka/strings.xml
rename to app/src/main/res/values-ka/strings.xml
diff --git a/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
similarity index 100%
rename from res/values-nl/strings.xml
rename to app/src/main/res/values-nl/strings.xml
diff --git a/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
similarity index 100%
rename from res/values-pl/strings.xml
rename to app/src/main/res/values-pl/strings.xml
diff --git a/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
similarity index 100%
rename from res/values-pt-rBR/strings.xml
rename to app/src/main/res/values-pt-rBR/strings.xml
diff --git a/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
similarity index 100%
rename from res/values-ru/strings.xml
rename to app/src/main/res/values-ru/strings.xml
diff --git a/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
similarity index 100%
rename from res/values-sr/strings.xml
rename to app/src/main/res/values-sr/strings.xml
diff --git a/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
similarity index 100%
rename from res/values-sv/strings.xml
rename to app/src/main/res/values-sv/strings.xml
diff --git a/res/values-sw533dp/non_localizable_strings.xml b/app/src/main/res/values-sw533dp/non_localizable_strings.xml
similarity index 100%
rename from res/values-sw533dp/non_localizable_strings.xml
rename to app/src/main/res/values-sw533dp/non_localizable_strings.xml
diff --git a/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
similarity index 100%
rename from res/values-tr/strings.xml
rename to app/src/main/res/values-tr/strings.xml
diff --git a/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
similarity index 100%
rename from res/values-zh-rCN/strings.xml
rename to app/src/main/res/values-zh-rCN/strings.xml
diff --git a/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
similarity index 100%
rename from res/values-zh-rTW/strings.xml
rename to app/src/main/res/values-zh-rTW/strings.xml
diff --git a/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
similarity index 100%
rename from res/values/attrs.xml
rename to app/src/main/res/values/attrs.xml
diff --git a/res/values/color.xml b/app/src/main/res/values/color.xml
similarity index 100%
rename from res/values/color.xml
rename to app/src/main/res/values/color.xml
diff --git a/res/values/config.xml b/app/src/main/res/values/config.xml
similarity index 100%
rename from res/values/config.xml
rename to app/src/main/res/values/config.xml
diff --git a/res/values/digit_style.xml b/app/src/main/res/values/digit_style.xml
similarity index 100%
rename from res/values/digit_style.xml
rename to app/src/main/res/values/digit_style.xml
diff --git a/res/values/non_localizable_custom.xml b/app/src/main/res/values/non_localizable_custom.xml
similarity index 100%
rename from res/values/non_localizable_custom.xml
rename to app/src/main/res/values/non_localizable_custom.xml
diff --git a/res/values/non_localizable_strings.xml b/app/src/main/res/values/non_localizable_strings.xml
similarity index 100%
rename from res/values/non_localizable_strings.xml
rename to app/src/main/res/values/non_localizable_strings.xml
diff --git a/res/values/slidingtab_style.xml b/app/src/main/res/values/slidingtab_style.xml
similarity index 100%
rename from res/values/slidingtab_style.xml
rename to app/src/main/res/values/slidingtab_style.xml
diff --git a/res/values/strings.xml b/app/src/main/res/values/strings.xml
similarity index 100%
rename from res/values/strings.xml
rename to app/src/main/res/values/strings.xml
diff --git a/res/values/styles.xml b/app/src/main/res/values/styles.xml
similarity index 100%
rename from res/values/styles.xml
rename to app/src/main/res/values/styles.xml
diff --git a/res/xml/account_preferences.xml b/app/src/main/res/xml/account_preferences.xml
similarity index 100%
rename from res/xml/account_preferences.xml
rename to app/src/main/res/xml/account_preferences.xml
diff --git a/res/xml/authenticator.xml b/app/src/main/res/xml/authenticator.xml
similarity index 100%
rename from res/xml/authenticator.xml
rename to app/src/main/res/xml/authenticator.xml
diff --git a/res/xml/contacts.xml b/app/src/main/res/xml/contacts.xml
similarity index 100%
rename from res/xml/contacts.xml
rename to app/src/main/res/xml/contacts.xml
diff --git a/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
similarity index 100%
rename from res/xml/preferences.xml
rename to app/src/main/res/xml/preferences.xml
diff --git a/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml
similarity index 100%
rename from res/xml/provider_paths.xml
rename to app/src/main/res/xml/provider_paths.xml
diff --git a/res/xml/syncadapter.xml b/app/src/main/res/xml/syncadapter.xml
similarity index 100%
rename from res/xml/syncadapter.xml
rename to app/src/main/res/xml/syncadapter.xml
diff --git a/build.gradle b/build.gradle
index 6da7240f2..adac884df 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,192 +1,26 @@
-// Project information
-buildDir = 'bin'
-
-def getPackageName() {
- return "org.linphone"
-}
-
-def firebaseEnable() {
- File googleFile = new File('google-services.json')
- return googleFile.exists()
-}
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- File googleFile = new File('google-services.json')
repositories {
+ google()
jcenter()
mavenCentral()
- mavenLocal()
- google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.1.0'
- if (googleFile.exists()) {
- classpath 'com.google.gms:google-services:3.1.0'
- }
+ classpath 'com.android.tools.build:gradle:3.2.1'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
}
}
allprojects {
repositories {
- jcenter()
- mavenCentral()
- mavenLocal()
google()
+ jcenter()
}
}
-apply plugin: 'com.android.application'
-
-dependencies {
- androidTestImplementation('com.android.support.test.espresso:espresso-core:+') {
- exclude module: 'support-annotations'
- }
- androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.6.3'
- androidTestImplementation 'junit:junit:4.12'
- implementation 'org.apache.commons:commons-compress:1.16.1'
- if (firebaseEnable()) {
- implementation 'com.google.firebase:firebase-messaging:15.0.2'
- }
- implementation 'com.android.support:support-v4:27.1.1'
- implementation 'com.android.support:recyclerview-v7:27.1.1'
- implementation 'com.android.support:appcompat-v7:27.1.1'
- implementation 'com.android.support:design:27.1.1'
- implementation project(':liblinphone-sdk')
+task clean(type: Delete) {
+ delete rootProject.buildDir
}
-
-if (firebaseEnable()) {
- apply plugin: 'com.google.gms.google-services'
-}
-
-///// Exclude Files /////
-def excludeFiles = []
-// Exclude firebase file if not enable
-if (!firebaseEnable()) {
- excludeFiles.add('**/Firebase*')
- println '[Push Notification] Firebase disabled'
-} else {
- excludeFiles.add('**/gcm*')
- println '[Push Notification] Firebase enabled'
-}
-
-excludeFiles.add('src/android/org/linphone/tutorials/*.java')
-
-def excludePackage = []
-
-excludePackage.add('**/gdb.*')
-excludePackage.add('**/libopenh264**')
-excludePackage.add('**/**tester**')
-excludePackage.add('**/LICENSE.txt')
-/////////////////////////
-
-android {
- defaultConfig {
- compileSdkVersion 28
- buildToolsVersion "28.0.0"
- applicationId getPackageName()
- multiDexEnabled true
-
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- }
- lintOptions {
- checkReleaseBuilds false
- // Or, if you prefer, you can continue to check for errors in release builds,
- // but continue the build even when errors are found:
- abortOnError false
- disable 'MissingTranslation', 'UnusedResources'
- }
- // Signing
- signingConfigs {
- release {
- storeFile file(RELEASE_STORE_FILE)
- storePassword RELEASE_STORE_PASSWORD
- keyAlias RELEASE_KEY_ALIAS
- keyPassword RELEASE_KEY_PASSWORD
- }
- }
- buildTypes {
- release {
- signingConfig signingConfigs.release
- }
- packaged {
- initWith release
- signingConfig null
- matchingFallbacks = ['debug', 'release']
- }
- }
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- def srcDirs = ['src/android']
- java.srcDirs = srcDirs
- resources.srcDirs = srcDirs
- aidl.srcDirs = srcDirs
- renderscript.srcDirs = srcDirs
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- java.excludes = excludeFiles
-
- // Exclude some useless files
- packagingOptions {
- excludes = excludePackage
- }
- }
-
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
- sourceSets {
- androidTest {
- manifest.srcFile 'AndroidManifest.xml'
- def srcDirs = ['src/android', 'src/androidTest']
- java.srcDirs = srcDirs
- resources.srcDirs = srcDirs
- aidl.srcDirs = srcDirs
- renderscript.srcDirs = srcDirs
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- java.excludes = excludeFiles
-
- // Exclude some useless files
- packagingOptions {
- excludes = excludePackage
- }
- }
-
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
- packagingOptions {
- pickFirst 'META-INF/NOTICE'
- pickFirst 'META-INF/LICENSE'
- exclude 'META-INF/MANIFEST.MF'
- }
-}
-
-// Grant permissions
-android.applicationVariants.all { variant ->
- def applicationId = getPackageName()
- def adb = android.getAdbExecutable().toString()
- def variantName = variant.name.capitalize()
- def grantPermissionTask = tasks.create("grant${variantName}Permissions").doLast({
- "${adb} devices".execute().text.eachLine {
- "${adb} shell pm grant ${applicationId} android.permission.RECORD_AUDIO".execute()
- "${adb} shell pm grant ${applicationId} android.permission.WRITE_EXTERNAL_STORAGE".execute()
- "${adb} shell pm grant ${applicationId} android.permission.CAMERA".execute()
- "${adb} shell pm grant ${applicationId} android.permission.READ_PHONE_STATE".execute()
- "${adb} shell pm grant ${applicationId} android.permission.READ_CONTACTS".execute()
- "${adb} shell pm grant ${applicationId} android.permission.WRITE_CONTACTS".execute()
- }
- })
-}
-
-task runApplication {
- doLast {
- def result = exec {
- executable = android.getAdbExecutable().toString()
- ignoreExitValue true
- args = ['shell', 'monkey', '-p', getPackageName(), '-c', 'android.intent.category.LAUNCHER', '1']
- }
- }
-}
-
diff --git a/check_unused_resources.py b/check_unused_resources.py
new file mode 100755
index 000000000..063603539
--- /dev/null
+++ b/check_unused_resources.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+
+import os
+import subprocess
+
+for filename in os.listdir('res/drawable-xhdpi/'):
+ resourcename = os.path.splitext(filename)[0]
+ if resourcename[-2:] == '.9':
+ resourcename = resourcename[:-2]
+ p = subprocess.Popen(['grep', '-nr', 'R.drawable.' + resourcename, 'src/'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ if str(out) is "":
+ p = subprocess.Popen(['grep', '-nr', '@drawable/' + resourcename, 'res/'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ if str(out) is "":
+ #os.remove('res/drawable-xhdpi/' + filename)
+ print 'Unused file : ' + filename
+
+for filename in os.listdir('res/drawable/'):
+ resourcename = os.path.splitext(filename)[0]
+ if resourcename[-2:] == '.9':
+ resourcename = resourcename[:-2]
+ p = subprocess.Popen(['grep', '-nr', 'R.drawable.' + resourcename, 'src/'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ if str(out) is "":
+ p = subprocess.Popen(['grep', '-nr', '@drawable/' + resourcename, 'res/'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ if str(out) is "":
+ #os.remove('res/drawable/' + filename)
+ print 'Unused file : ' + filename
\ No newline at end of file
diff --git a/cmake_builder/CMakeLists.txt b/cmake_builder/CMakeLists.txt
deleted file mode 100644
index ea7e0f119..000000000
--- a/cmake_builder/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-############################################################################
-# CMakeLists.txt
-# Copyright (C) 2018 Belledonne Communications, Grenoble France
-#
-############################################################################
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-############################################################################
-
-# Blacklist these dependencies because they are useless for now
-#lcb_blacklist_dependencies("libxsd" "xerces-c" "soci")
-
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index c0173c8c0..f6b961fd5 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 40f16998a..9a4163a4f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Wed May 16 15:22:42 CEST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
diff --git a/jni/Android.mk b/jni/Android.mk
deleted file mode 100644
index c2bd5acb3..000000000
--- a/jni/Android.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-# Must be present to used ndk-gdb
-# In ndk-gdb you need to set the path of your symbols
-# Command: set solib-search-path YOUR_PROJECT_ROOT/libs-debug/ABI/
\ No newline at end of file
diff --git a/jni/Application.mk b/jni/Application.mk
deleted file mode 100644
index de4fe3a36..000000000
--- a/jni/Application.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-# This is used by ndk-gdb
-APP_ABI := arm64-v8a x86 armeabi armeabi-v7a
\ No newline at end of file
diff --git a/liblinphone-sdk/AndroidManifestLibrary.xml b/liblinphone-sdk/AndroidManifestLibrary.xml
deleted file mode 100755
index 650cbb6e1..000000000
--- a/liblinphone-sdk/AndroidManifestLibrary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
diff --git a/liblinphone-sdk/build.gradle b/liblinphone-sdk/build.gradle
deleted file mode 100644
index b53e51ea1..000000000
--- a/liblinphone-sdk/build.gradle
+++ /dev/null
@@ -1,185 +0,0 @@
-// Project information
-buildDir = 'bin'
-buildscript {
- repositories {
- jcenter()
- mavenCentral()
- mavenLocal()
- google()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.1.0'
- }
-}
-
-allprojects {
- repositories {
- jcenter()
- mavenCentral()
- mavenLocal()
- google()
- }
-}
-
-
-configurations {
- javadocDeps
-}
-
-
-
-
-apply plugin: 'com.android.library'
-
-
-dependencies {
- implementation 'org.apache.commons:commons-compress:1.16.1'
- javadocDeps 'org.apache.commons:commons-compress:1.16.1'
-}
-
-def srcDir = ['../submodules/mediastreamer2/java/src']
-def rootSdk
-
-if (file('android-arm64/share/linphonej/java/org/linphone/core/Factory.java').exists() )
- rootSdk = 'android-arm64'
-else if (file('android-arm/share/linphonej/java/org/linphone/core/Factory.java').exists() )
- rootSdk = 'android-arm'
-else if (file('android-armv7/share/linphonej/java/org/linphone/core/Factory.java').exists() )
- rootSdk = 'android-armv7'
-else if (file('android-x86/share/linphonej/java/org/linphone/core/Factory.java').exists() )
- rootSdk = 'android-x86'
-else {
- println ("native sdk not ready yet")
- rootSdk = ""
-}
-
-srcDir += [rootSdk+'/share/linphonej/java/org/linphone/core/']
-srcDir += ['../submodules/linphone/wrappers/java/classes/']
-
-def excludePackage = []
-
-excludePackage.add('**/gdb.*')
-excludePackage.add('**/libopenh264**')
-excludePackage.add('**/**tester**')
-excludePackage.add('**/LICENSE.txt')
-
-android {
-
-
- buildTypes {
- release {}
- debug {}
- }
-
- defaultConfig {
- compileSdkVersion 28
- buildToolsVersion "28.0.0"
- multiDexEnabled true
- setProperty("archivesBaseName", "liblinphone-sdk")
- }
-
- // Signing
- signingConfigs {
- release {
- storeFile file(RELEASE_STORE_FILE)
- storePassword RELEASE_STORE_PASSWORD
- keyAlias RELEASE_KEY_ALIAS
- keyPassword RELEASE_KEY_PASSWORD
- }
- }
- buildTypes {
- release {
- signingConfig signingConfigs.release
- }
- packaged {
- initWith release
- signingConfig null
- //matchingFallbacks = ['debug', 'release']
- }
- }
-
- lintOptions {
- checkReleaseBuilds false
- // Or, if you prefer, you can continue to check for errors in release builds,
- // but continue the build even when errors are found:
- abortOnError false
- }
-
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifestLibrary.xml'
- java.srcDirs = srcDir
- aidl.srcDirs = srcDir
- assets.srcDirs = ["${buildDir}/sdk-assets/assets/"]
- renderscript.srcDirs = srcDir
- jniLibs.srcDirs = ['../libs']
- resources.srcDir("res")
-
- java.excludes = ['**/mediastream/MediastreamerActivity.java']
-
- // Exclude some useless files
- packagingOptions {
- excludes = excludePackage
- }
- }
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
-}
-
-///////////// Task /////////////
-
-task(releaseJavadoc, type: Javadoc, dependsOn: "assembleRelease") {
- source = srcDir
- excludes = ['**/mediastream/MediastreamerActivity.java',
- '**/**.html',
- '**/**.aidl']
- classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
- classpath += files(android.libraryVariants.release.javaCompile.classpath.files)
- classpath += configurations.javadocDeps
- options.encoding = 'UTF-8'
-}
-
-task sourcesJar(type: Jar) {
- classifier = 'sources'
- from android.sourceSets.main.java.srcDirs
-}
-
-task androidJavadocsJar(type: Jar, dependsOn: releaseJavadoc) {
- classifier = 'javadoc'
- from releaseJavadoc.destinationDir
-}
-
-task sdkZip(type: Zip) {
- String appName = "liblinphone-android-sdk"
- String gitSha = 'git describe --always'.execute().text.trim()
- String newSdkName = appName + "-" + gitSha + ".zip"
-
- from('bin/libs',
- 'bin/outputs/aar')
- include '*'
- archiveName newSdkName
-}
-
-task copyAssets(type: Sync) {
- from rootSdk
- into "${buildDir}/sdk-assets/assets/org.linphone.core"
- include '**/*.png'
- include '**/*.pem'
- include '**/*.mkv'
- include '**/*.wav'
- include '**/*_grammar'
-
- //rename '(.*)', '$1'.toLowerCase()
- eachFile {
- path = path.toLowerCase() //to workaround case insensitive fs (macosx)
- println("Syncing sdk asset ${sourcePath} to ${path}")
- }
- doFirst {
- println("Syncing sdk assets into root dir ${destinationDir}")
- }
- // do not copy those
- includeEmptyDirs = false
-
-}
-project.tasks['preBuild'].dependsOn 'copyAssets'
diff --git a/liblinphone_tester/.classpath b/liblinphone_tester/.classpath
deleted file mode 100644
index 7e1fd65d7..000000000
--- a/liblinphone_tester/.classpath
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/liblinphone_tester/.gitignore b/liblinphone_tester/.gitignore
deleted file mode 100644
index 9e04b4e45..000000000
--- a/liblinphone_tester/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# built application files
-*.apk
-*.ap_
-
-# files for the dex VM
-*.dex
-
-# Java class files
-*.class
-
-# generated files
-bin/
-gen/
-libs/
-obj/
-
-# Local configuration file (sdk path, etc)
-local.properties
-
-assets
diff --git a/liblinphone_tester/.project b/liblinphone_tester/.project
deleted file mode 100644
index 0877c21b1..000000000
--- a/liblinphone_tester/.project
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- liblinphoneTester
-
-
-
-
-
- com.android.ide.eclipse.adt.ResourceManagerBuilder
-
-
-
-
- com.android.ide.eclipse.adt.PreCompilerBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- com.android.ide.eclipse.adt.ApkBuilder
-
-
-
-
-
- com.android.ide.eclipse.adt.AndroidNature
- org.eclipse.jdt.core.javanature
-
-
-
- linphone
- 2
- PARENT-1-PROJECT_LOCATION/submodules/linphone/java
-
-
- mediastreamer2
- 2
- PARENT-1-PROJECT_LOCATION/submodules/linphone/mediastreamer2/java/src
-
-
-
diff --git a/liblinphone_tester/AndroidManifest.xml b/liblinphone_tester/AndroidManifest.xml
deleted file mode 100644
index b465b495e..000000000
--- a/liblinphone_tester/AndroidManifest.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/liblinphone_tester/Makefile b/liblinphone_tester/Makefile
deleted file mode 100644
index e78471ae5..000000000
--- a/liblinphone_tester/Makefile
+++ /dev/null
@@ -1,73 +0,0 @@
-all: copy-files
- ../gradlew clean
- ../gradlew uninstallDebug
-
-run-all-tests: copy-files
- ../gradlew :installDebugAndroidTest && \
- ../gradlew :installDebug && \
- ../gradlew :grantDebugPermissions -i && \
- ../gradlew :connectedAndroidTest -i \
-
-copy-libs:
- mkdir -p assets && \
- mkdir -p assets/config_files && \
- rm -rf libs/arm64-v8a
- if test -d "../liblinphone-sdk/android-arm64"; then \
- mkdir -p libs/arm64-v8a && \
- cp -f ../liblinphone-sdk/android-arm64/lib/*.so libs/arm64-v8a && \
- cp -f ../liblinphone-sdk/android-arm64/lib/mediastreamer/plugins/*.so libs/arm64-v8a && \
- cp -f ../liblinphone-sdk/android-arm64/share/linphone/rootca.pem assets/config_files; \
- fi
- if test -f "../liblinphone-sdk/android-arm64/bin/gdbserver"; then \
- cp -f ../liblinphone-sdk/android-arm64/bin/gdbserver libs/arm64-v8a && \
- cp -f ../liblinphone-sdk/android-arm64/bin/gdb.setup libs/arm64-v8a; \
- fi
- rm -rf libs/armeabi-v7a
- if test -d "../liblinphone-sdk/android-armv7"; then \
- mkdir -p libs/armeabi-v7a && \
- cp -f ../liblinphone-sdk/android-armv7/lib/*.so libs/armeabi-v7a && \
- cp -f ../liblinphone-sdk/android-armv7/lib/mediastreamer/plugins/*.so libs/armeabi-v7a && \
- cp -f ../liblinphone-sdk/android-armv7/share/linphone/rootca.pem assets/config_files; \
- fi
- if test -f "../liblinphone-sdk/android-armv7/bin/gdbserver"; then \
- cp -f ../liblinphone-sdk/android-armv7/bin/gdbserver libs/armeabi-v7a && \
- cp -f ../liblinphone-sdk/android-armv7/bin/gdb.setup libs/armeabi-v7a; \
- fi
- rm -rf libs/x86
- if test -d "../liblinphone-sdk/android-x86"; then \
- mkdir -p libs/x86 && \
- cp -f ../liblinphone-sdk/android-x86/lib/*.so libs/x86 && \
- cp -f ../liblinphone-sdk/android-x86/lib/mediastreamer/plugins/*.so libs/x86 && \
- cp -f ../liblinphone-sdk/android-x86/share/linphone/rootca.pem assets/config_files; \
- fi
- if test -f "../liblinphone-sdk/android-x86/bin/gdbserver"; then \
- cp -f ../liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \
- cp -f ../liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \
- fi
-
-copy-files: ../submodules/linphone/tester/tester_hosts
- $(MAKE) copy-libs
- rm -rf assets/config_files
- mkdir -p assets/config_files
- for file in $^; do \
- cp -rf $$file assets/config_files/. ; \
- done
- cp -rf ../submodules/linphone/tester/certificates assets/config_files
- cp -rf ../submodules/linphone/tester/images assets/config_files
- cp -rf ../submodules/linphone/tester/rcfiles assets/config_files
- cp -rf ../submodules/linphone/tester/sounds assets/config_files
- cp -rf ../submodules/linphone/tester/vcards assets/config_files
- cp -rf ../submodules/linphone/tester/db assets/config_files
- mkdir -p res/raw
- if test -d "../liblinphone-sdk/android-arm/share/belr/grammars"; then \
- cp ../liblinphone-sdk/android-arm/share/belr/grammars/*_grammar res/raw/; \
- fi
- if test -d "../liblinphone-sdk/android-armv7/share/belr/grammars"; then \
- cp ../liblinphone-sdk/android-armv7/share/belr/grammars/*_grammar res/raw/; \
- fi
- if test -d "../liblinphone-sdk/android-arm64/share/belr/grammars"; then \
- cp ../liblinphone-sdk/android-arm64/share/belr/grammars/*_grammar res/raw/; \
- fi
- if test -d "../liblinphone-sdk/android-x86/share/belr/grammars"; then \
- cp ../liblinphone-sdk/android-x86/share/belr/grammars/*_grammar res/raw/; \
- fi
diff --git a/liblinphone_tester/adb-log-start.sh b/liblinphone_tester/adb-log-start.sh
deleted file mode 100755
index 73ec81563..000000000
--- a/liblinphone_tester/adb-log-start.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#! /bin/bash
-adb logcat -v time > $1 &
-echo $! >adb.pid
-
diff --git a/liblinphone_tester/build.gradle b/liblinphone_tester/build.gradle
deleted file mode 100644
index 595fe5035..000000000
--- a/liblinphone_tester/build.gradle
+++ /dev/null
@@ -1,139 +0,0 @@
-// Project information
-buildDir = 'bin'
-
-def getPackageName() {
- return "org.linphone.tester"
-}
-
-buildscript {
- repositories {
- jcenter()
- mavenCentral()
- mavenLocal()
- google()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.1.0'
- }
-}
-
-allprojects {
- repositories {
- jcenter()
- mavenCentral()
- mavenLocal()
- google()
- }
-}
-
-apply plugin: 'com.android.application'
-
-dependencies {
- androidTestCompile 'org.apache.commons:commons-compress:1.16.1'
- androidTestCompile group: 'junit', name: 'junit', version: '+'
- androidTestCompile group: 'com.jayway.android.robotium', name: 'robotium', version: '+'
- androidTestCompile fileTree(dir: 'libs', include: 'android-junit-report*.jar')
- implementation 'org.apache.commons:commons-compress:1.16.1'
- implementation group: 'junit', name: 'junit', version: '+'
- implementation group: 'com.jayway.android.robotium', name: 'robotium-solo', version: '+'
- implementation fileTree(dir: 'libs', include: 'android-junit-report*.jar')
- implementation project(":liblinphone-sdk")
-}
-
-android {
- defaultConfig {
- compileSdkVersion 26
- buildToolsVersion "26.0.0"
- applicationId getPackageName()
- multiDexEnabled true
- }
-
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- jniLibs.srcDir 'libs'
-
- // Exclude some useless files
- packagingOptions {
- exclude '**/gdb.*'
- }
- }
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
-
- sourceSets {
- androidTest {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- jniLibs.srcDir 'libs'
- }
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
-
- testOptions {
- unitTests.all {
- // All the usual Gradle options.
- testLogging {
- events "passed", "skipped", "failed", "standardOut", "standardError"
- outputs.upToDateWhen {false}
- showStandardStreams = true
- }
- }
- }
-
- lintOptions {
- checkReleaseBuilds false
- // Or, if you prefer, you can continue to check for errors in release builds,
- // but continue the build even when errors are found:
- abortOnError false
- }
-}
-
-// Grant permissions
-android.applicationVariants.all { variant ->
- def applicationId = getPackageName()
- def applicationIdtest = "${getPackageName()}.test"
- def adb = android.getAdbExecutable().toString()
- def variantName = variant.name.capitalize()
- def grantPermissionTask = tasks.create("grant${variantName}Permissions") << {
- "${adb} devices".execute().text.eachLine {
- if(it.endsWith("device")){
- def device = it.split()[0]
- println "Granting permissions on devices ${device}"
- "${adb} shell pm grant ${applicationId} android.permission.RECORD_AUDIO".execute()
- "${adb} shell pm grant ${applicationId} android.permission.WRITE_EXTERNAL_STORAGE".execute()
- "${adb} shell pm grant ${applicationId} android.permission.CAMERA".execute()
- "${adb} shell pm grant ${applicationIdtest} android.permission.RECORD_AUDIO".execute()
- "${adb} shell pm grant ${applicationIdtest} android.permission.WRITE_EXTERNAL_STORAGE".execute()
- "${adb} shell pm grant ${applicationIdtest} android.permission.CAMERA".execute()
- }
- }
- }
-}
-
-tasks.withType(Test) {
- testLogging {
- exceptionFormat 'full'
- showCauses true
- showExceptions true
- showStackTraces true
- showStandardStreams false
- ignoreFailures = true
- }
- connectedAndroidTest {
- ignoreFailures = true
- }
-}
diff --git a/liblinphone_tester/gradle.properties b/liblinphone_tester/gradle.properties
deleted file mode 100644
index a4996c82d..000000000
--- a/liblinphone_tester/gradle.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-// Signing APK Release
-RELEASE_STORE_FILE=""
-RELEASE_STORE_PASSWORD=
-RELEASE_KEY_ALIAS=
-RELEASE_KEY_PASSWORD=
-#source:https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory
-org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
diff --git a/liblinphone_tester/gradlew b/liblinphone_tester/gradlew
deleted file mode 100755
index cccdd3d51..000000000
--- a/liblinphone_tester/gradlew
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env sh
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/liblinphone_tester/gradlew.bat b/liblinphone_tester/gradlew.bat
deleted file mode 100644
index e95643d6a..000000000
--- a/liblinphone_tester/gradlew.bat
+++ /dev/null
@@ -1,84 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/liblinphone_tester/libs/android-junit-report-1.5.8.jar b/liblinphone_tester/libs/android-junit-report-1.5.8.jar
deleted file mode 100644
index 09e6a2d4f..000000000
Binary files a/liblinphone_tester/libs/android-junit-report-1.5.8.jar and /dev/null differ
diff --git a/liblinphone_tester/res/drawable-hdpi/ic_launcher.png b/liblinphone_tester/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 96a442e5b..000000000
Binary files a/liblinphone_tester/res/drawable-hdpi/ic_launcher.png and /dev/null differ
diff --git a/liblinphone_tester/res/drawable-mdpi/ic_launcher.png b/liblinphone_tester/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 359047dfa..000000000
Binary files a/liblinphone_tester/res/drawable-mdpi/ic_launcher.png and /dev/null differ
diff --git a/liblinphone_tester/res/drawable-xhdpi/ic_launcher.png b/liblinphone_tester/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 71c6d760f..000000000
Binary files a/liblinphone_tester/res/drawable-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/liblinphone_tester/res/layout/activity_logs.xml b/liblinphone_tester/res/layout/activity_logs.xml
deleted file mode 100644
index 353062eb8..000000000
--- a/liblinphone_tester/res/layout/activity_logs.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/layout/activity_main.xml b/liblinphone_tester/res/layout/activity_main.xml
deleted file mode 100644
index 751318d94..000000000
--- a/liblinphone_tester/res/layout/activity_main.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/layout/activity_suites.xml b/liblinphone_tester/res/layout/activity_suites.xml
deleted file mode 100644
index 2c8294d5e..000000000
--- a/liblinphone_tester/res/layout/activity_suites.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/menu/activity_logs.xml b/liblinphone_tester/res/menu/activity_logs.xml
deleted file mode 100644
index 77f358b68..000000000
--- a/liblinphone_tester/res/menu/activity_logs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/menu/activity_main.xml b/liblinphone_tester/res/menu/activity_main.xml
deleted file mode 100644
index 77f358b68..000000000
--- a/liblinphone_tester/res/menu/activity_main.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/menu/activity_suites.xml b/liblinphone_tester/res/menu/activity_suites.xml
deleted file mode 100644
index 77f358b68..000000000
--- a/liblinphone_tester/res/menu/activity_suites.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/values-v11/styles.xml b/liblinphone_tester/res/values-v11/styles.xml
deleted file mode 100644
index 541752f6e..000000000
--- a/liblinphone_tester/res/values-v11/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/values-v14/styles.xml b/liblinphone_tester/res/values-v14/styles.xml
deleted file mode 100644
index f20e01501..000000000
--- a/liblinphone_tester/res/values-v14/styles.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/values/strings.xml b/liblinphone_tester/res/values/strings.xml
deleted file mode 100644
index 941a872da..000000000
--- a/liblinphone_tester/res/values/strings.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- liblinphone tester
- All
- Settings
- LogsActivity
- SuitesActivity
-
-
\ No newline at end of file
diff --git a/liblinphone_tester/res/values/styles.xml b/liblinphone_tester/res/values/styles.xml
deleted file mode 100644
index 4a10ca492..000000000
--- a/liblinphone_tester/res/values/styles.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/liblinphone_tester/settings.gradle b/liblinphone_tester/settings.gradle
deleted file mode 100644
index 291201bd6..000000000
--- a/liblinphone_tester/settings.gradle
+++ /dev/null
@@ -1,2 +0,0 @@
-include ':liblinphone-sdk'
-project(':liblinphone-sdk').projectDir = new File(rootProject.projectDir,'../liblinphone-sdk')
diff --git a/liblinphone_tester/src/org/linphone/tester/LogsActivity.java b/liblinphone_tester/src/org/linphone/tester/LogsActivity.java
deleted file mode 100644
index 173dd9e87..000000000
--- a/liblinphone_tester/src/org/linphone/tester/LogsActivity.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.linphone.tester;
-
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-import android.os.Bundle;
-import android.app.Activity;
-import android.view.Menu;
-import android.widget.TextView;
-
-public class LogsActivity extends Activity {
- private String mLogs = "";
- private LogsThread mLogsThread;
- private class LogsThread extends Thread {
- LogsActivity mLogsActivity;
- String mArgs[];
- TesterLogger tester;
- public LogsThread(LogsActivity logsActivity, String[] args) {
- mLogsActivity = logsActivity;
- mArgs = args;
- }
-
- @Override
- public void run() {
- String res_path = mLogsActivity.getFilesDir().getAbsolutePath();
- String write_path = mLogsActivity.getCacheDir().getPath();
- tester = new TesterLogger(mLogsActivity);
- List list = new LinkedList(Arrays.asList(new String[]{"tester", "--verbose", "--resource-dir", res_path, "--writable-dir", write_path}));
- list.addAll(Arrays.asList(mArgs));
- String[] array = list.toArray(new String[list.size()]);
- tester.run(array);
- Tester.clearAccounts();
- mLogsActivity.runOnUiThread(new Runnable() {
- public void run() {
- mLogsActivity.done();
- }
- });
- }
- }
-
- private static String join(String [] array, String separator) {
- String ret = "";
- for(int i = 0; i < array.length; ++i) {
- if(i != 0) {
- ret += separator;
- }
- ret += array[i];
- }
- return ret;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_logs);
- ((TextView)findViewById(R.id.textView1)).setText(mLogs);
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- String[] values = extras.getStringArray("args");
- if(values != null) {
- if(mLogsThread == null || !mLogsThread.isAlive()) {
- this.setTitle("Test Logs (" + join(values, " ") + ")");
- mLogs = "";
- ((TextView)findViewById(R.id.textView1)).setText(mLogs);
- mLogsThread = new LogsThread(this, values);
- mLogsThread.start();
- }
- }
- }
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action context_bar if it is present.
- getMenuInflater().inflate(R.menu.activity_logs, menu);
- return true;
- }
-
- public void addLog(int level, String message) {
- mLogs += message;
- ((TextView)findViewById(R.id.textView1)).append(message);
- }
- @Override
- public void onBackPressed() {
- if(mLogsThread == null || !mLogsThread.isAlive()) {
- finish();
- }
- }
-
- public void done() {
- }
-}
diff --git a/liblinphone_tester/src/org/linphone/tester/MainActivity.java b/liblinphone_tester/src/org/linphone/tester/MainActivity.java
deleted file mode 100644
index d43c00860..000000000
--- a/liblinphone_tester/src/org/linphone/tester/MainActivity.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.linphone.tester;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.Override;
-
-import android.os.Bundle;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.AssetManager;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.View;
-import android.widget.Button;
-import android.widget.LinearLayout;
-
-public class MainActivity extends Activity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.activity_main);
- try {
- TestUnit.copyAssetsFromPackage(getApplicationContext());
- } catch (IOException e) {
- Log.e("liblinphone_tester", "Cannot install rc files",e);
- }
- Tester.keepAccounts(true);
- TesterList suitesTest = new TesterList();
- suitesTest.run(new String[]{"tester", "--list-suites"});
- LinearLayout layout = ((LinearLayout)findViewById(R.id.suites_list));
- layout.removeAllViews();
- addButton(layout, "All", null);
- for(String str: suitesTest.getList()) {
- str = str.trim();
- addButton(layout, str, str);
- }
- }
-
- @Override
- protected void onDestroy(){
- Tester.clearAccounts();
- super.onDestroy();
- }
-
- private void addButton(LinearLayout layout, String text, String data) {
- Button button = new Button(this);
- button.setText(text);
- button.setTag(data);
- button.setGravity(Gravity.CENTER);
- button.setOnClickListener(new Button.OnClickListener() {
- public void onClick(View v) {
- Button button = (Button) v;
- String data = (String)button.getTag();
- if(data == null) {
- Intent intent = new Intent(getBaseContext(), LogsActivity.class);
- intent.putExtra("args", new String[]{});
- startActivity(intent);
- } else {
- Intent intent = new Intent(getBaseContext(), SuitesActivity.class);
- intent.putExtra("suite", data);
- startActivity(intent);
- }
- }
- });
- layout.addView(button);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action context_bar if it is present.
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
-}
diff --git a/liblinphone_tester/src/org/linphone/tester/SuitesActivity.java b/liblinphone_tester/src/org/linphone/tester/SuitesActivity.java
deleted file mode 100644
index 18c8a5fff..000000000
--- a/liblinphone_tester/src/org/linphone/tester/SuitesActivity.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.linphone.tester;
-
-import android.os.Bundle;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.View;
-import android.widget.Button;
-import android.widget.LinearLayout;
-
-public class SuitesActivity extends Activity {
- String mSuite;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_suites);
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- mSuite = extras.getString("suite");
- if(mSuite != null) {
- Tester.setApplicationContext(getBaseContext());
- this.setTitle(this.getResources().getString(R.string.app_name) + " | " + mSuite);
- TesterList suitesTest = new TesterList();
- suitesTest.run(new String[]{"tester", "--list-tests", mSuite});
- LinearLayout layout = ((LinearLayout)findViewById(R.id.tests_list));
- layout.removeAllViews();
- addButton(layout, "All", null);
- for(String str: suitesTest.getList()) {
- str = str.trim();
- addButton(layout, str, str);
- }
- }
- }
-
- }
- private void addButton(LinearLayout layout, String text, String data) {
- Button button = new Button(this);
- button.setText(text);
- button.setTag(data);
- button.setGravity(Gravity.CENTER);
- button.setOnClickListener(new Button.OnClickListener() {
- public void onClick(View v) {
- Button button = (Button) v;
- String data = (String)button.getTag();
- if(mSuite != null) {
- if(data == null) {
- Intent intent = new Intent(getBaseContext(), LogsActivity.class);
- intent.putExtra("args", new String[]{"--suite", mSuite});
- startActivity(intent);
- } else {
- Intent intent = new Intent(getBaseContext(), LogsActivity.class);
- intent.putExtra("args", new String[]{"--suite", mSuite, "--test", data});
- startActivity(intent);
- }
- }
- }
- });
- layout.addView(button);
- }
-
-
- @Override
- public void onDestroy() {
- Tester.removeApplicationContext();
- super.onDestroy();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action context_bar if it is present.
- getMenuInflater().inflate(R.menu.activity_suites, menu);
- return true;
- }
-
-}
diff --git a/liblinphone_tester/src/org/linphone/tester/TestRunner.java b/liblinphone_tester/src/org/linphone/tester/TestRunner.java
deleted file mode 100644
index c3b67547f..000000000
--- a/liblinphone_tester/src/org/linphone/tester/TestRunner.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.linphone.tester;
-
-import junit.framework.TestSuite;
-import android.os.Bundle;
-
-import com.zutubi.android.junitreport.JUnitReportTestRunner;
-
-import java.lang.Override;
-
-
-public class TestRunner extends JUnitReportTestRunner {
- String mSuite = null;
- String mTest = null;
-
- @Override
- public void onCreate(Bundle arguments) {
- mSuite = arguments.getString("suite");
- mTest = arguments.getString("test");
- Tester.keepAccounts(true);
-
- super.onCreate(arguments);
- }
-
- @Override
- public void onDestroy() {
- Tester.clearAccounts();
- super.onDestroy();
- }
-
- @Override
- public TestSuite getAllTests () {
- TestSuite suite = new TestSuite("Tests");
- addSuites(suite, mSuite, mTest);
- return suite;
- }
-
- public static void addSuites(TestSuite suite, String suiteCheck, String testCheck) {
- TesterList testerList = new TesterList();
- testerList.run(new String[]{"tester", "--list-suites"});
- for(String str: testerList.getList()) {
- str = str.trim();
- if(suiteCheck == null || suiteCheck.equals(str)) {
- addSuite(suite, str, testCheck);
- }
- }
- }
-
- public static void addSuite(TestSuite suite, String suiteStr, String testCheck) {
- TesterList testerList = new TesterList();
- testerList.run(new String[]{"tester", "--list-tests", suiteStr});
- for(String str: testerList.getList()) {
- str = str.trim();
- if(testCheck == null || testCheck.equals(str)) {
- suite.addTest(new TestUnit(suiteStr, str));
- }
- }
- }
-}
diff --git a/liblinphone_tester/src/org/linphone/tester/TestUnit.java b/liblinphone_tester/src/org/linphone/tester/TestUnit.java
deleted file mode 100644
index eefe4f675..000000000
--- a/liblinphone_tester/src/org/linphone/tester/TestUnit.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.linphone.tester;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-import junit.framework.Assert;
-import android.content.Context;
-import android.test.AndroidTestCase;
-
-public class TestUnit extends AndroidTestCase {
- private String mSuite;
- private String mTest;
- static Boolean isAssetCopied=false;
-
- public TestUnit(String suite, String test) {
- mSuite = suite;
- mTest = test;
- setName(suite + "/" + test);
- }
-
- public TestUnit(String name) {
- String[] tab = name.split("/");
- mSuite = tab[0];
- if (tab.length == 2)
- mTest = tab[1];
- setName(name);
- }
-
- static public void copyAssetsFromPackage(Context ctx) throws IOException {
- //copy sdk assets
- org.linphone.core.tools.AndroidPlatformHelper.copyAssetsFromPackage(ctx,"org.linphone.core",".");
- //copy tester assets
- org.linphone.core.tools.AndroidPlatformHelper.copyAssetsFromPackage(ctx,"config_files",".");
- }
-
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- if (isAssetCopied ==false) {
- Tester.setApplicationContext(getContext());
- copyAssetsFromPackage(getContext());
- isAssetCopied=true;
- }
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- }
-
- @Override
- protected void runTest() {
- String res_path = getContext().getFilesDir().getPath();
- String write_path = getContext().getCacheDir().getPath();
- Tester tester = new Tester();
-
- List list;
- if (mTest != null && !mTest.isEmpty()) {
- list = new LinkedList(Arrays.asList(new String[]{"tester", "--verbose", "--resource-dir", res_path, "--writable-dir", write_path, "--suite", mSuite, "--test", mTest}));
- } else {
- list = new LinkedList(Arrays.asList(new String[]{"tester", "--verbose", "--resource-dir", res_path, "--writable-dir", write_path, "--suite", mSuite}));
- }
- String[] array = list.toArray(new String[list.size()]);
- Assert.assertTrue(tester.run(array) == 0);
- }
-}
diff --git a/liblinphone_tester/src/org/linphone/tester/Tester.java b/liblinphone_tester/src/org/linphone/tester/Tester.java
deleted file mode 100644
index 8c3827a7b..000000000
--- a/liblinphone_tester/src/org/linphone/tester/Tester.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.linphone.tester;
-
-import java.util.List;
-
-import org.linphone.core.Factory;
-import org.linphone.mediastream.Version;
-
-import android.util.Log;
-import android.content.Context;
-
-public class Tester {
- public static String TAG = "liblinphone-tester";
- private static boolean loadOptionalLibrary(String s) {
- try {
- System.loadLibrary(s);
- return true;
- } catch (Throwable e) {
- Log.w("Unable to load optional library lib", s);
- }
- return false;
- }
-
- public static boolean isArmv7()
- {
- return System.getProperty("os.arch").contains("armv7");
- }
-
- static {
- List cpuabis=Version.getCpuAbis();
- String ffmpegAbi;
- boolean libLoaded=false;
- Throwable firstException=null;
-
- System.loadLibrary("c++_shared");
- loadOptionalLibrary("ffmpeg-linphone");
- System.loadLibrary("bctoolbox");
- System.loadLibrary("bctoolbox-tester");
- System.loadLibrary("ortp");
- System.loadLibrary("mediastreamer_base");
- System.loadLibrary("mediastreamer_voip");
- System.loadLibrary("linphone");
- System.loadLibrary("linphonetester");
- libLoaded=true;
-
- if (!libLoaded){
- throw new RuntimeException(firstException);
-
- }else{
- Version.dumpCapabilities();
- }
- }
-
- public static native void setApplicationContext(Context ct);
- public static native void removeApplicationContext();
- public native int run(String args[]);
- public static native void keepAccounts(boolean keep);
- public static native void clearAccounts();
-
- public void printLog(final int level, final String message) {
- switch(level) {
- case 0:
- android.util.Log.i(TAG, message);
- break;
- case 1:
- android.util.Log.e(TAG, message);
- break;
- }
- }
-}
diff --git a/liblinphone_tester/src/org/linphone/tester/TesterList.java b/liblinphone_tester/src/org/linphone/tester/TesterList.java
deleted file mode 100644
index e2ba3a15c..000000000
--- a/liblinphone_tester/src/org/linphone/tester/TesterList.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.linphone.tester;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public class TesterList extends Tester {
- private List list = new LinkedList();
- public void printLog(final int level, final String message) {
- super.printLog(level, message);
- list.add(message);
- }
-
- public List getList() {
- return list;
- }
-}
diff --git a/liblinphone_tester/src/org/linphone/tester/TesterLogger.java b/liblinphone_tester/src/org/linphone/tester/TesterLogger.java
deleted file mode 100644
index 516763589..000000000
--- a/liblinphone_tester/src/org/linphone/tester/TesterLogger.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.linphone.tester;
-
-public class TesterLogger extends Tester {
- private LogsActivity mLogsActivity;
- TesterLogger(LogsActivity logsActivity) {
- mLogsActivity = logsActivity;
- }
- public void printLog(final int level, final String message) {
- super.printLog(level, message);
- mLogsActivity.runOnUiThread(new Runnable() {
- public void run() {
- mLogsActivity.addLog(level, message);
- }
- });
- }
-}
diff --git a/linphone-sdk b/linphone-sdk
new file mode 160000
index 000000000..5de516823
--- /dev/null
+++ b/linphone-sdk
@@ -0,0 +1 @@
+Subproject commit 5de5168235f7afc68c92d01202e9f43d3a2e5c2b
diff --git a/linphone-sdk-android/build.gradle b/linphone-sdk-android/build.gradle
new file mode 100644
index 000000000..65b9df6ef
--- /dev/null
+++ b/linphone-sdk-android/build.gradle
@@ -0,0 +1,2 @@
+configurations.maybeCreate("default")
+artifacts.add("default", file('linphone-sdk-android-debug.aar'))
\ No newline at end of file
diff --git a/linphone-sdk-android/linphone-sdk-android-debug.aar b/linphone-sdk-android/linphone-sdk-android-debug.aar
new file mode 100644
index 000000000..da7a561c9
Binary files /dev/null and b/linphone-sdk-android/linphone-sdk-android-debug.aar differ
diff --git a/linphoneAndroidSdk.gradle b/linphoneAndroidSdk.gradle
deleted file mode 100644
index 1a0c5dc88..000000000
--- a/linphoneAndroidSdk.gradle
+++ /dev/null
@@ -1,117 +0,0 @@
-// Project information
-buildDir = 'bin'
-
-
-buildscript {
- repositories {
- jcenter()
- mavenCentral()
- mavenLocal()
- google()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.1.0'
- }
-}
-
-allprojects {
- repositories {
- jcenter()
- mavenCentral()
- mavenLocal()
- google()
- }
-}
-
-apply plugin: 'com.android.library'
-
-dependencies {
- implementation group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
- implementation 'com.android.support:support-v4:26.0.2'
-}
-
-
-def srcDirs = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper', 'src/android']
-
-def excludeFiles = []
-
-excludeFiles.add('**/Firebase*')
-excludeFiles.add('**/gcm*')
-excludeFiles.add('**/mediastream/MediastreamerActivity.java')
-
-def excludePackage = []
-
-excludePackage.add('**/gdb.*')
-excludePackage.add('**/libopenh264**')
-excludePackage.add('**/**tester**')
-excludePackage.add('**/LICENSE.txt')
-
-android {
- defaultConfig {
- compileSdkVersion 26
- buildToolsVersion "27.0.3"
- multiDexEnabled true
- }
-
- lintOptions {
- checkReleaseBuilds false
- // Or, if you prefer, you can continue to check for errors in release builds,
- // but continue the build even when errors are found:
- abortOnError false
- }
-
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifestSdk.xml'
- java.srcDirs = srcDirs
- resources.srcDirs = srcDirs
- aidl.srcDirs = srcDirs
- renderscript.srcDirs = srcDirs
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- jniLibs.srcDirs = ['libs']
-
- java.excludes = excludeFiles
-
- // Exclude some useless files
- packagingOptions {
- excludes = excludePackage
- }
- }
-
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
-}
-
-///////////// Task /////////////
-
-task(releaseJavadoc, type: Javadoc, dependsOn: "assembleRelease") {
- source = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper']
- excludes = ['**/mediastream/MediastreamerActivity.java',
- '**/**.html',
- '**/**.aidl']
- classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
- classpath += files(android.libraryVariants.release.javaCompile.classpath.files)
-}
-
-task sourcesJar(type: Jar) {
- classifier = 'sources'
- from android.sourceSets.main.java.srcDirs
-}
-
-task androidJavadocsJar(type: Jar, dependsOn: releaseJavadoc) {
- classifier = 'javadoc'
- from releaseJavadoc.destinationDir
-}
-
-task sdkZip(type: Zip) {
- String appName = "linphone-android-sdk"
- String gitSha = 'git describe --always'.execute().text.trim()
- String newSdkName = appName + "-" + gitSha + ".zip"
-
- from('bin/libs',
- 'bin/outputs/aar')
- include '*'
- archiveName newSdkName
-}
diff --git a/sample/.classpath b/sample/.classpath
deleted file mode 100644
index d8c730618..000000000
--- a/sample/.classpath
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sample/.project b/sample/.project
deleted file mode 100644
index 7a87b9fca..000000000
--- a/sample/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
- LinphoneMini
-
-
-
-
-
- com.android.ide.eclipse.adt.ResourceManagerBuilder
-
-
-
-
- com.android.ide.eclipse.adt.PreCompilerBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- com.android.ide.eclipse.adt.ApkBuilder
-
-
-
-
-
- com.android.ide.eclipse.adt.AndroidNature
- org.eclipse.jdt.core.javanature
-
-
diff --git a/sample/AndroidManifest.xml b/sample/AndroidManifest.xml
deleted file mode 100644
index d777f53ed..000000000
--- a/sample/AndroidManifest.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sample/README b/sample/README
deleted file mode 100644
index 8b9e5ff3d..000000000
--- a/sample/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Fist compile linphone libraries using the makefile in the parent folder (with the make command)
-Then set the url to your configuration in the res/raw/linphonerc_default file
-Finally install and run this app on your device (using eclipse for example)
diff --git a/sample/res/drawable-xhdpi/ic_launcher.png b/sample/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 71c6d760f..000000000
Binary files a/sample/res/drawable-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/sample/res/raw/linphonerc_default b/sample/res/raw/linphonerc_default
deleted file mode 100644
index 73bc9fb1e..000000000
--- a/sample/res/raw/linphonerc_default
+++ /dev/null
@@ -1,23 +0,0 @@
-[net]
-download_bw=380
-upload_bw=380
-
-[sip]
-contact=sip:unknown@unknown-host
-use_info=0
-use_ipv6=0
-keepalive_period=30000
-
-[video]
-size=qvga
-
-[app]
-sharing_server=https://www.linphone.org:444/upload.php
-tunnel=disabled
-
-[tunnel]
-host=
-port=443
-
-[misc]
-config-uri=INSERT_URL_TO_CONFIG_TO_TRY_HERE
\ No newline at end of file
diff --git a/sample/res/raw/linphonerc_factory b/sample/res/raw/linphonerc_factory
deleted file mode 100644
index 2dc6a2670..000000000
--- a/sample/res/raw/linphonerc_factory
+++ /dev/null
@@ -1,30 +0,0 @@
-[net]
-mtu=1300
-
-[sip]
-guess_hostname=1
-inc_timeout=15
-register_only_when_network_is_up=1
-auto_net_state_mon=0
-auto_answer_replacing_calls=1
-media_encryption_mandatory=0
-ping_with_options=0
-
-[rtp]
-audio_rtp_port=7076
-video_rtp_port=9078
-audio_jitt_comp=60
-video_jitt_comp=60
-nortp_timeout=30
-disable_upnp=1
-
-[sound]
-playback_dev_id=
-ringer_dev_id=
-capture_dev_id=
-remote_ring=/data/data/org.linphone.mini/files/ringback.wav
-local_ring=/data/data/org.linphone.mini/files/oldphone_mono.wav
-dtmf_player_amp=0.1
-
-[misc]
-max_calls=10
diff --git a/sample/res/raw/lpconfig.xsd b/sample/res/raw/lpconfig.xsd
deleted file mode 100644
index 49bb56180..000000000
--- a/sample/res/raw/lpconfig.xsd
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sample/res/raw/oldphone_mono.wav b/sample/res/raw/oldphone_mono.wav
deleted file mode 100644
index 39a1c9a80..000000000
Binary files a/sample/res/raw/oldphone_mono.wav and /dev/null differ
diff --git a/sample/res/raw/ringback.wav b/sample/res/raw/ringback.wav
deleted file mode 100644
index 21f4b5bfb..000000000
Binary files a/sample/res/raw/ringback.wav and /dev/null differ
diff --git a/sample/res/raw/rootca.pem b/sample/res/raw/rootca.pem
deleted file mode 100644
index 57388a337..000000000
--- a/sample/res/raw/rootca.pem
+++ /dev/null
@@ -1,3895 +0,0 @@
-##
-## /home/viish/Work/android/linphone/res/raw/rootca.pem -- Bundle of CA Root Certificates
-##
-## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012
-##
-## This is a bundle of X.509 certificates of public Certificate Authorities
-## (CA). These were automatically extracted from Mozilla's root certificates
-## file (certdata.txt). This file can be found in the mozilla source tree:
-## https://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
-##
-## It contains the certificates in PEM format and therefore
-## can be directly used with curl / libcurl / php_curl, or with
-## an Apache+mod_ssl webserver for SSL client authentication.
-## Just configure this file as the SSLCACertificateFile.
-##
-
-# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $
-
-GTE CyberTrust Global Root
-==========================
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
-Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
-A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
-MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
-Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
-IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
-sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
-HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
-AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
-M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
-NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-Thawte Server CA
-================
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
-AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
-b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
-BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
-c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
-A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
-ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
-/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
-1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
-MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
-GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
-GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-Thawte Premium Server CA
-========================
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
-AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
-ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
-VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
-aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
-cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
-aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
-Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
-qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
-SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
-8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
-UCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
-
-Equifax Secure CA
-=================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
-ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
-B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
-fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
-8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
-CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
-spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
-zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
-BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
-70+sB3c4
------END CERTIFICATE-----
-
-Digital Signature Trust Co. Global CA 1
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
-MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
-NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
-o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
-kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
-RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
-
-Digital Signature Trust Co. Global CA 3
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
-MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
-VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
-xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
-up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
-mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
-TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
-WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
-Tqj/ZA1k
------END CERTIFICATE-----
-
-Verisign Class 1 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
-k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
-WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
-XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
-lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
-cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
-Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
-cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
-Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
-nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
-wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
-ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
-1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
-LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
-FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
-lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
-1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
-Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
------END CERTIFICATE-----
-
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-ValiCert Class 1 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
-MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
-GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
-DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
-lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
-icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
-Orf1LXLI
------END CERTIFICATE-----
-
-ValiCert Class 2 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
-CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
-ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
-SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
-UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
-W9ViH0Pd
------END CERTIFICATE-----
-
-RSA Root Certificate 1
-======================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
-3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
-BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
-3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
-V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
-on+jjBXu
------END CERTIFICATE-----
-
-Verisign Class 1 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
-bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
-rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
-Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
-FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
-y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
-a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
-D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
-azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
-b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
-tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
-C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
-0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
-Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
-JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
-0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
-JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
-GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
-EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
-cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
-EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
-055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
-xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
-t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Verisign Class 4 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
-tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
-8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
-Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
-Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
-RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
-UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-Entrust.net Secure Server CA
-============================
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
-cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
-ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
-A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
-eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
-dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
-aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
-gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
-ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
-dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
-NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
-HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
-Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
-n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
-AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
-gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
-AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
-o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
-2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
-OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-Equifax Secure Global eBusiness CA
-==================================
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
-bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
-b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
-PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
-qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
-hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
-BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
-MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
-I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
-NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 1
-=============================
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
-LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
-ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
-IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
-1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
-IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
-MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
-Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
-AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
-lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
-KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 2
-=============================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
-ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
-MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
-DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
-2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
-BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
-JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
-uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
-jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
-78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
-V+GRMOrN
------END CERTIFICATE-----
-
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust External Root
-======================
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
-VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
-NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
-cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
-Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
-+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
-Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
-aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
-2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
-7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
-VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
-VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
-e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
-G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-Entrust Root Certification Authority
-====================================
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
-b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
-A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
-MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
-MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
-Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
-A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
-Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
-j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
-rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
-MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
-Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
-v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
-W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
-tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-GeoTrust Global CA
-==================
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
-MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
-BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
-8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
-T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
-vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
-DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
-zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
-d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
-mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
-XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-GeoTrust Universal CA
-=====================
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
-MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
-Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
-JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
-RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
-7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
-8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
-qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
-Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
-Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
-KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
-ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
-XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
-qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
-oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
-xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
-KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
-DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
-xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
-p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
-P/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-GeoTrust Universal CA 2
-=======================
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
-MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
-SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
-DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
-j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
-JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
-QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
-WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
-20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
-ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
-SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
-8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
-+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
-4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
-mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
-A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
-Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
-pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
-FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
-gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
-X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-UTN-USER First-Network Applications
-===================================
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
-BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
-WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
-YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
-cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
-mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
-DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
-Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
-P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
-j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
-HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
-cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
-CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
-RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
-xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
-DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
------END CERTIFICATE-----
-
-America Online Root Certification Authority 1
-=============================================
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
-v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
-DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
-sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
-8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
-AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
-o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
-GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
-VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
-3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
-Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-America Online Root Certification Authority 2
-=============================================
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
-fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
-f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
-qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
-RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
-gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
-6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
-FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
-Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
-B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
-aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
-T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
-+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
-JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
-zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
-ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
-1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
-GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
-Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
-cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
------END CERTIFICATE-----
-
-Visa eCommerce Root
-===================
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
-EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
-QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
-WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
-VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
-F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
-RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
-TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
-/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
-GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
-CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
-YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
-zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Certum Root CA
-==============
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
-ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
-Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
-by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
-wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
-kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
-89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
-Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
-NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
-GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
-GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
-0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
-qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
-QuoVadis Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
-ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
-XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
-lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
-lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
-lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
-66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
-wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
-D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
-BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
-J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
-DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
-Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
-UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
-VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
-+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
-IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
-WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
-f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
-4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
-VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-QuoVadis Root CA 3
-==================
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
-OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
-DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
-KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
-DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
-BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
-p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
-nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
-MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
-Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
-uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
-BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
-BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
-VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
-ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
-AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
-qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
-hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
-POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
-Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
-8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
-bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
-g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
-vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
-qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-Security Communication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
-8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
-DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
-5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
-DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
-JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
-0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
-mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
-s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
-6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera Class 1 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
-NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
-7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
-EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
-0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
-2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
-HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
-iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
-28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
-yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
-vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
-qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
-IRlXvVWa
------END CERTIFICATE-----
-
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA
-=============================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
-ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
-HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
-bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
-vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
-jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
-C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
-vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
-22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
-HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
-dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
-BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
-EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
-MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-TDC Internet Root CA
-====================
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
-ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
-NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
-ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
-xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
-znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
-5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
-otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
-AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
-VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
-MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
-AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
-UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
-CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
-gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
-O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
-Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
-TDC OCES Root CA
-================
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
-ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
-MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
-nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
-zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
-iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
-dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
-3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
-5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
-ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
-cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
-Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
-LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
-MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
-aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
-+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
-NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
-A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
-A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
-AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
-AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
-
-UTN DATACorp SGC Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
-BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
-MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
-HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
-dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
-raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
-wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
-9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
-33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
-DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
-BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
-LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
-I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
-EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
-DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-UTN USERFirst Email Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
-BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
-OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
-FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
-ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
-dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
-B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
-om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
-TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
-yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
-AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
-HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
-bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
-xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
-5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
-NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
-w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
-
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
-UTN USERFirst Object Root CA
-============================
------BEGIN CERTIFICATE-----
-MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
-BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
-NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
-HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
-dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
-loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
-w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
-lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
-RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
-BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
-ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
-c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
-DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
-NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
-PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
-qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
-hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
------END CERTIFICATE-----
-
-Camerfirma Chambers of Commerce Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
-NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
-cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
-MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
-AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
-xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
-NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
-DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
-d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
-EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
-cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
-AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
-bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
-fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
-L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
-UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
-ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
-erfutGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-Camerfirma Global Chambersign Root
-==================================
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
-NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
-YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
-MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
-ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
-1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
-by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
-6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
-8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
-BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
-aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
-Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
-aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
-PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
-gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
-PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
-IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
-t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-NetLock Qualified (Class QA) Root
-=================================
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
-eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
-bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
-LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
-dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
-aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
-CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
-8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
-m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
-0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
-0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
-YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
-a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
-YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
-YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
-ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
-L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
-Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
-aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
-YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
-IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
-DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
-wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
-W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
-R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
-5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
-
-NetLock Notary (Class A) Root
-=============================
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
-EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
-ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
-DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
-EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
-VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
-cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
-D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
-z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
-/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
-tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
-4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
-A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
-Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
-bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
-LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
-ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
-IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
-IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
-b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
-Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
-bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
-ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
-ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
-CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
-KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
-8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-NetLock Business (Class B) Root
-===============================
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
-VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
-VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
-bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
-VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
-o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
-1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
-RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
-dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
-ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
-c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
-YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
-Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
-bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
-IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
-YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
-cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
-43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
-stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-NetLock Express (Class C) Root
-==============================
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
-BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
-ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
-W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
-euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
-DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
-RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
-YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
-IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
-aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
-ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
-emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
-IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
-UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
-YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
-xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
-gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
-YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
-AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
-Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
-U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
-LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
-cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
-dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
-AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
-3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
-vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
-fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
-EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
-1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
-lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
-g14=
------END CERTIFICATE-----
-
-Taiwan GRCA
-===========
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
-EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
-dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
-w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
-BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
-1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
-htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
-J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
-Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
-B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
-O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
-lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
-HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
-Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
-Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
-D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
-DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
-Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
-7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
-CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
-+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
------END CERTIFICATE-----
-
-Firmaprofesional Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
-GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
-Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
-ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
-MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
-OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
-ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
-j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
-lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
-3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
-NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
-KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
-AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
-ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
-wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
-7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
-VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
------END CERTIFICATE-----
-
-Wells Fargo Root CA
-===================
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
-bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
-MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
-x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
-E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
-OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
-sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
-YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
-BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
-ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
-m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
-OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
-tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
-
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
-MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
-MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
-NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
-AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
-b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
-7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
-cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
-WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
-haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
-MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
-MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
-jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
-MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
-VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
-vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
-OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
-1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
-nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
-x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
-MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
-9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
-UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
-/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
-oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
-GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
-66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
-hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
-EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
-SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-DigiCert Global Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
-MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
-TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
-BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
-4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
-7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
-o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
-8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
-BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
-EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
-tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-DigiCert High Assurance EV Root CA
-==================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
-KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
-MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
-MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
-Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
-Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
-OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
-MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
-NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
-h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
-JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
-V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
-myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
-
-Certplus Class 2 Primary CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
-BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
-OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
-dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
-5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
-Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
-YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
-e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
-CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
-YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
-L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
-P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
-TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
-7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-DST ACES CA X6
-==============
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
-MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
-MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
-CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
-DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
-pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
-GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
-MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
-Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
-dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
-CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
-5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
-vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
-oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 1
-==============================================
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
-MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
-acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
-MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
-TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
-aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
-yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
-Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
-8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
-W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
-BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
-sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
-q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
-nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2
-==============================================
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
-MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
-dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
-LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
-x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
-QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
-5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
-AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
-Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
-hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
-9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
-UrbnBEI=
------END CERTIFICATE-----
-
-SwissSign Platinum CA - G2
-==========================
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
-HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
-U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
-KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
-669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
-eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
-WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
-j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
-8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
-aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
-domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
-+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
-CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
-zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
-Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
-NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
-U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
-KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
-9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
-aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
-OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
-Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
-IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
-
-SwissSign Gold CA - G2
-======================
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
-EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
-MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
-c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
-t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
-jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
-vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
-ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
-AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
-jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
-peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
-7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
-GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
-5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
-44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
-Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
-Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
-mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
-vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
-KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
-NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
-viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-SwissSign Silver CA - G2
-========================
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
-DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
-aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
-N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
-+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
-6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
-MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
-qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
-FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
-ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
-celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
-CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
-4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
-kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
-3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
-/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
-DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
-e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
-WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
-DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
-DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority
-========================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
-CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
-cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
-b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
-nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
-RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
-tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
-hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
-Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
-NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
-Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-thawte Primary Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
-MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
-SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
-KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
-FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
-oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
-1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
-q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
-aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
-afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
-AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
-jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
-z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G5
-============================================================
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
-dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
-j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
-Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
-Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
-fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
-SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
-X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
-KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
-Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
-ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-SecureTrust CA
-==============
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
-dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
-BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
-OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
-DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
-GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
-01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
-ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
-aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
-SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
-mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-Secure Global CA
-================
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
-bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
-MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
-Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
-YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
-bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
-8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
-HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
-0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
-oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
-MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
-OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
-CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-COMODO Certification Authority
-==============================
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
-MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
-T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
-+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
-xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
-4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
-1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
-rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
-b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
-AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
-IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
-+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
-
-Network Solutions Certificate Authority
-=======================================
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
-EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
-IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
-MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
-jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
-aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
-crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
-/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
-AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
-bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
-A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
-4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
-GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
-ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-COMODO ECC Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
-GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
-Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
-4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
-wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
-FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
-U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
-Security Communication EV RootCA1
-=================================
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
-BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
-Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
-/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
-WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
-ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
-bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
-9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
-iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
-Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
-mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
-T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GA CA
-===============================
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
-BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
-A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
-bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
-VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
-IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
-IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
-Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
-Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
-d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
-/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
-LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
-MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
-+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
-okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
------END CERTIFICATE-----
-
-S-TRUST Authentication and Encryption Root CA 2005 PN
-=====================================================
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
-BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
-cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
-LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
-NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
-ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
-aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
-b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
-4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
-g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
-eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
-KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
-/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
-bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
-D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
-P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
-nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
-F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
-Hz2eBIPdltkdOpQ=
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-Certigna
-========
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
-EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
-MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
-Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
-XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
-GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
-ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
-DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
-Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
-tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
-BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
-SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
-hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
-ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
-PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
-1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
-======================================
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
-AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
-LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
-HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
-U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
-IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
-yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
-2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
-4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
-2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
-8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
-HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
-Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
-5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
-czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
-ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
-BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
-cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
-AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
-EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
-/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
-MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
-3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
-eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
-/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
-RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
-Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 2 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
-MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
-IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
-xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
-Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
-SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
-dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
-KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
-TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
-JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
-vQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 3 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
-MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
-yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
-6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
-uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
-2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
-O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
-yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
-IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
-092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
-5A==
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA I
-=============================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
-MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
-VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
-JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
-qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
-xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
-ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
-gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
-BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
-1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
-vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
-ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
-7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
-Deutsche Telekom Root CA 2
-==========================
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
-RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
-A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
-MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
-A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
-b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
-bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
-KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
-AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
-Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
-jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
-HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
-E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
-zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
-rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
-dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-ComSign CA
-==========
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
-EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
-MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
-Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
-ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
-P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
-GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
-YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
-rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
-oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
-AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
-VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
-QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
-mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
-/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
-zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
-
-ComSign Secured CA
-==================
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
-AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
-NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
-QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
-49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
-7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
-kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
-9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
-AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
-U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
-j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
-AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
-BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
-FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
-51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-ePKI Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
-EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
-MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
-MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
-IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
-lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
-qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
-12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
-WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
-ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
-lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
-vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
-Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
-MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
-1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
-KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
-xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
-NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
-GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
-xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
-gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
-sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
-BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
-=============================================================================================================================
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
-DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
-aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
-b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
-BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
-S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
-MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
-IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
-n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
-IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
-dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
-cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
-Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
-xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
-6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
-BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
-N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
-y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
-LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
-dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-Buypass Class 3 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
-MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
-ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
-n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
-AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
-1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
-pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
-EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
-htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
-el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-certSIGN ROOT CA
-================
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
-VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
-Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
-CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
-JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
-rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
-ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
-0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
-AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
-AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
-SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
-x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
-vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
-TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G3
-=============================================
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
-NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
-YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
-LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
-K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
-c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
-IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
-dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
-2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
-cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
-Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
-t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-thawte Primary Root CA - G2
-===========================
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
-VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
-IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
-Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
-MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
-b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
-IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
-LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
-8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
-mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
-G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
-rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-thawte Primary Root CA - G3
-===========================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
-ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
-VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
-A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
-P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
-+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
-7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
-vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
-KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
-A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
-8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
-er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G2
-=============================================
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
-OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
-b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
-BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
-KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
-EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
-ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
-npaqBA+K
------END CERTIFICATE-----
-
-VeriSign Universal Root Certification Authority
-===============================================
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
-1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
-MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
-9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
-AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
-tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
-CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
-a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
-Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
-Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
-P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
-wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
-mJO37M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G4
-============================================================
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
-VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
-b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
-ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
-b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
-Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
-rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
-/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
-HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
-Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
-A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
-AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-NetLock Arany (Class Gold) FÅ‘tanúsÃtvány
-============================================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
-A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
-dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
-cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
-MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
-ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
-c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
-0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
-/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
-H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
-fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
-neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
-BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
-qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
-YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
-NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
-dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G2
-==================================
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
-5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
-vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
-CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
-e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
-OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
-CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
-48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
-trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
-qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
-AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
-ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
-A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
-+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
-f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
-kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
-CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
-URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
-CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
-oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
-IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
-66+KAQ==
------END CERTIFICATE-----
-
-CA Disig
-========
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
-QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
-MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
-bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
-GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
-Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
-hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
-ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
-gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
-AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
-aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
-ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
-BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
-WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
-mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
-ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
-4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
-Hongkong Post Root CA 1
-=======================
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
-DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
-NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
-IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
-ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
-auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
-qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
-V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
-HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
-h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
-l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
-IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
-T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
-c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
------END CERTIFICATE-----
-
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-ACEDICOM Root
-=============
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
-T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
-MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
-A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
-WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
-YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
-MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
-m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
-HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
-xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
-3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
-2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
-TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
-4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
-9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
-aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
-eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
-zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
-ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
-KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
-nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
-I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
-MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
-tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-Verisign Class 1 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
-VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
-yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
-XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
-0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
-RjXZ+Hxb
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
-CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
-bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
-D/xwzoiQ
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
-MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
-c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
-BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
-U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
-fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
-0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
-pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
-1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
-AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
-QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
-FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
-lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
-I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
-yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
-LXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
-===================================================
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
-ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
-MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
-cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
-aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
-8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
-jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
-JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
-9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
-SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
-F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
-D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
-Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
-
-GlobalSign Root CA - R3
-=======================
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
-iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
-0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
-rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
-OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
-xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
-lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
-EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
-bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
-YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
-kpeDMdmztcpHWD9f
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA III
-===============================
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
-Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
-QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
-KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
-QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
-juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
-CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
-M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
-A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
-g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
-KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
-BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
-woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
-
-Autoridad de Certificacion Firmaprofesional CIF A62634068
-=========================================================
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
-BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
-QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
-NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
-Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
-B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
-7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
-ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
-plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
-MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
-LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
-bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
-vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
-EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
-DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
-bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
-ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
-51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
-R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
-T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
-Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
-osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
-crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
-saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
-KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
-6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-Izenpe.com
-==========
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
-EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
-MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
-QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
-03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
-ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
-+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
-PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
-OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
-F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
-0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
-0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
-leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
-AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
-SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
-NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
-Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
-kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
-hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
-g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
-aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
-nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
-ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
-Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
-WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-Go Daddy Root Certificate Authority - G2
-========================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
-MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
-A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
-9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
-+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
-fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
-NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
-BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
-vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
-5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
-N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
------END CERTIFICATE-----
-
-Starfield Root Certificate Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
-eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
-DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
-VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
-dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
-W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
-bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
-N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
-ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
-JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
-TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
-4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
-F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
-c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-Starfield Services Root Certificate Authority - G2
-==================================================
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
-IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
-dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
-h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
-hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
-LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
-rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
-SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
-E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
-xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
-YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
------END CERTIFICATE-----
-
-AffirmTrust Commercial
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
-MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
-DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
-C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
-BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
-MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
-HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
-hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
-qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
-0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
-sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-AffirmTrust Networking
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
-MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
-Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
-dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
-/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
-h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
-HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
-UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
-12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
-WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
-/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-AffirmTrust Premium
-===================
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
-OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
-dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
-BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
-5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
-+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
-GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
-p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
-S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
-6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
-/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
-+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
-MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
-6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
-L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
-+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
-BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
-IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
-g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
-zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-AffirmTrust Premium ECC
-=======================
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
-BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
-MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
-cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
-N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
-BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
-BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
-57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
-eQ==
------END CERTIFICATE-----
-
-Certum Trusted Network CA
-=========================
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
-MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
-ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
-l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
-J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
-fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
-cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
-Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
-DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
-jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
-mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
-Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-Certinomis - Autorité Racine
-=============================
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
-LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
-A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
-JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
-wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
-Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
-2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
-jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
-c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
-lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
-xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
-530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
-4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
-WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
-R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
-nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
-CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
-JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
-qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
-WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
-wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
-vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-A-Trust-nQual-03
-================
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
-Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
-a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
-dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
-RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
-ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
-c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
-zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
-yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
-SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
-iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
-cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
-eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
-ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
-sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
-JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
-ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-TWCA Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
-VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
-EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
-IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
-QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
-oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
-4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
-y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
-9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
-mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
-QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
-T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
-Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-Security Communication RootCA2
-==============================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
-SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
-aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
-+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
-3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
-spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
-EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
-QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
-u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
-3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
-tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
-mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-Actalis Authentication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
-BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
-AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
-MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
-IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
-wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
-by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
-zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
-YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
-oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
-EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
-hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
-EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
-jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
-iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
-WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
-JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
-K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
-Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
-4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
-2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
-lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
-OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
-vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-Trustis FPS Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
-EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
-IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
-BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
-RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
-H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
-cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
-o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
-AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
-BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
-GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
-yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
-8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
-l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
-iB6XzCGcKQENZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
-Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
-dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
-c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
-bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
-aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
-L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
-fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
-N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
-Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
-tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
-e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
-2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
-HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
-D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-StartCom Certification Authority G2
-===================================
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
-ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
-o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
-4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
-Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
-Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
-O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
-vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
-nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
-FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
-z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
-KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
-J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
-JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
-/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
-nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
-blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
-l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
-7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
-obp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-Buypass Class 2 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
-DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
-g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
-9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
-/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
-CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
-awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
-zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
-Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
-Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
-M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
-osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
-aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
-DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
-LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
-oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
-wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
-CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
-rJgWVqA=
------END CERTIFICATE-----
-
-Buypass Class 3 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
-DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
-sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
-5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
-7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
-ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
-2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
-/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
-RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
-Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
-j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
-uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
-Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
-ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
-KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
-6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
-UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
-eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
-Cp/HuZc=
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 3
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
-MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
-9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
-NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
-iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
-0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
-AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
-fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
-ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
-P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
------END CERTIFICATE-----
-
-EE Certification Centre Root CA
-===============================
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
-dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
-MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
-UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
-ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
-TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
-rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
-93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
-P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
-MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
-BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
-xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
-lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
-3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
-dcGWxZ0=
------END CERTIFICATE-----
diff --git a/sample/res/raw/toy_mono.wav b/sample/res/raw/toy_mono.wav
deleted file mode 100644
index a225ac2cb..000000000
Binary files a/sample/res/raw/toy_mono.wav and /dev/null differ
diff --git a/sample/res/values-v11/styles.xml b/sample/res/values-v11/styles.xml
deleted file mode 100644
index 3c02242ad..000000000
--- a/sample/res/values-v11/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
diff --git a/sample/res/values-v14/styles.xml b/sample/res/values-v14/styles.xml
deleted file mode 100644
index a91fd0372..000000000
--- a/sample/res/values-v14/styles.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
diff --git a/sample/res/values/strings.xml b/sample/res/values/strings.xml
deleted file mode 100644
index 9d39c77ce..000000000
--- a/sample/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- Linphone Mini
-
-
diff --git a/sample/res/values/styles.xml b/sample/res/values/styles.xml
deleted file mode 100644
index 6ce89c7ba..000000000
--- a/sample/res/values/styles.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/sample/src/org/linphone/mini/LinphoneMiniActivity.java b/sample/src/org/linphone/mini/LinphoneMiniActivity.java
deleted file mode 100644
index 2c69ecd91..000000000
--- a/sample/src/org/linphone/mini/LinphoneMiniActivity.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.linphone.mini;
-
-/*
-LinphoneMiniActivity.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class LinphoneMiniActivity extends Activity {
- private LinphoneMiniManager mManager;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mManager = new LinphoneMiniManager(this);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- }
-
- @Override
- protected void onDestroy() {
- mManager.destroy();
-
- super.onDestroy();
- }
-}
diff --git a/sample/src/org/linphone/mini/LinphoneMiniManager.java b/sample/src/org/linphone/mini/LinphoneMiniManager.java
deleted file mode 100644
index 24b480488..000000000
--- a/sample/src/org/linphone/mini/LinphoneMiniManager.java
+++ /dev/null
@@ -1,288 +0,0 @@
-package org.linphone.mini;
-
-/*
-LinphoneMiniManager.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.linphone.core.LinphoneAddress;
-import org.linphone.core.LinphoneCall;
-import org.linphone.core.LinphoneCall.State;
-import org.linphone.core.LinphoneCallStats;
-import org.linphone.core.LinphoneChatMessage;
-import org.linphone.core.LinphoneChatRoom;
-import org.linphone.core.LinphoneContent;
-import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneCore.EcCalibratorStatus;
-import org.linphone.core.LinphoneCore.GlobalState;
-import org.linphone.core.LinphoneCore.RegistrationState;
-import org.linphone.core.LinphoneCore.RemoteProvisioningState;
-import org.linphone.core.LinphoneCoreException;
-import org.linphone.core.LinphoneCoreFactory;
-import org.linphone.core.LinphoneCoreListener;
-import org.linphone.core.LinphoneEvent;
-import org.linphone.core.LinphoneFriend;
-import org.linphone.core.LinphoneInfoMessage;
-import org.linphone.core.LinphoneProxyConfig;
-import org.linphone.core.PublishState;
-import org.linphone.core.SubscriptionState;
-import org.linphone.mediastream.Log;
-import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
-import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera;
-
-import android.content.Context;
-import android.content.pm.PackageManager.NameNotFoundException;
-
-public class LinphoneMiniManager implements LinphoneCoreListener {
- private static LinphoneMiniManager mInstance;
- private Context mContext;
- private LinphoneCore mLinphoneCore;
- private Timer mTimer;
-
- public LinphoneMiniManager(Context c) {
- mContext = c;
- LinphoneCoreFactory.instance().setDebugMode(true, "Linphone Mini");
-
- try {
- String basePath = mContext.getFilesDir().getAbsolutePath();
- copyAssetsFromPackage(basePath);
- mLinphoneCore = LinphoneCoreFactory.instance().createLinphoneCore(this, basePath + "/.linphonerc", basePath + "/linphonerc", null, mContext);
- initLinphoneCoreValues(basePath);
-
- setUserAgent();
- setFrontCamAsDefault();
- startIterate();
- mInstance = this;
- mLinphoneCore.setNetworkReachable(true); // Let's assume it's true
- } catch (LinphoneCoreException e) {
- } catch (IOException e) {
- }
- }
-
- public static LinphoneMiniManager getInstance() {
- return mInstance;
- }
-
- public void destroy() {
- try {
- mTimer.cancel();
- mLinphoneCore.destroy();
- }
- catch (RuntimeException e) {
- }
- finally {
- mLinphoneCore = null;
- mInstance = null;
- }
- }
-
- private void startIterate() {
- TimerTask lTask = new TimerTask() {
- @Override
- public void run() {
- mLinphoneCore.iterate();
- }
- };
-
- /*use schedule instead of scheduleAtFixedRate to avoid iterate from being call in burst after cpu wake up*/
- mTimer = new Timer("LinphoneMini scheduler");
- mTimer.schedule(lTask, 0, 20);
- }
-
- private void setUserAgent() {
- try {
- String versionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;
- if (versionName == null) {
- versionName = String.valueOf(mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode);
- }
- mLinphoneCore.setUserAgent("LinphoneMiniAndroid", versionName);
- } catch (NameNotFoundException e) {
- }
- }
-
- private void setFrontCamAsDefault() {
- int camId = 0;
- AndroidCamera[] cameras = AndroidCameraConfiguration.retrieveCameras();
- for (AndroidCamera androidCamera : cameras) {
- if (androidCamera.frontFacing)
- camId = androidCamera.id;
- }
- mLinphoneCore.setVideoDevice(camId);
- }
-
- private void copyAssetsFromPackage(String basePath) throws IOException {
- LinphoneMiniUtils.copyIfNotExist(mContext, R.raw.oldphone_mono, basePath + "/oldphone_mono.wav");
- LinphoneMiniUtils.copyIfNotExist(mContext, R.raw.ringback, basePath + "/ringback.wav");
- LinphoneMiniUtils.copyIfNotExist(mContext, R.raw.toy_mono, basePath + "/toy_mono.wav");
- LinphoneMiniUtils.copyIfNotExist(mContext, R.raw.linphonerc_default, basePath + "/.linphonerc");
- LinphoneMiniUtils.copyFromPackage(mContext, R.raw.linphonerc_factory, new File(basePath + "/linphonerc").getName());
- LinphoneMiniUtils.copyIfNotExist(mContext, R.raw.lpconfig, basePath + "/lpconfig.xsd");
- LinphoneMiniUtils.copyIfNotExist(mContext, R.raw.rootca, basePath + "/rootca.pem");
- }
-
- private void initLinphoneCoreValues(String basePath) {
- mLinphoneCore.setContext(mContext);
- mLinphoneCore.setRing(null);
- mLinphoneCore.setRootCA(basePath + "/rootca.pem");
- mLinphoneCore.setPlayFile(basePath + "/toy_mono.wav");
- mLinphoneCore.setChatDatabasePath(basePath + "/linphone-history.db");
-
- int availableCores = Runtime.getRuntime().availableProcessors();
- mLinphoneCore.setCpuCount(availableCores);
- }
-
- @Override
- public void authInfoRequested(LinphoneCore lc, String realm, String username) {
-
- }
-
- @Override
- public void globalState(LinphoneCore lc, GlobalState state, String message) {
- Log.d("Global state: " + state + "(" + message + ")");
- }
-
- @Override
- public void callState(LinphoneCore lc, LinphoneCall call, State cstate,
- String message) {
- Log.d("Call state: " + cstate + "(" + message + ")");
- }
-
- @Override
- public void callStatsUpdated(LinphoneCore lc, LinphoneCall call,
- LinphoneCallStats stats) {
-
- }
-
- @Override
- public void callEncryptionChanged(LinphoneCore lc, LinphoneCall call,
- boolean encrypted, String authenticationToken) {
-
- }
-
- @Override
- public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,
- RegistrationState cstate, String smessage) {
- Log.d("Registration state: " + cstate + "(" + smessage + ")");
- }
-
- @Override
- public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,
- String url) {
-
- }
-
- @Override
- public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {
-
- }
-
- @Override
- public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,
- LinphoneAddress from, String message) {
-
- }
-
- @Override
- public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr,
- LinphoneChatMessage message) {
- Log.d("Message received from " + cr.getPeerAddress().asString() + " : " + message.getText() + "(" + message.getExternalBodyUrl() + ")");
- }
-
- @Override
- public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr) {
- Log.d("Composing received from " + cr.getPeerAddress().asString());
- }
-
- @Override
- public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) {
-
- }
-
- @Override
- public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status,
- int delay_ms, Object data) {
-
- }
-
- @Override
- public void notifyReceived(LinphoneCore lc, LinphoneCall call,
- LinphoneAddress from, byte[] event) {
-
- }
-
- @Override
- public void transferState(LinphoneCore lc, LinphoneCall call,
- State new_call_state) {
-
- }
-
- @Override
- public void infoReceived(LinphoneCore lc, LinphoneCall call,
- LinphoneInfoMessage info) {
-
- }
-
- @Override
- public void subscriptionStateChanged(LinphoneCore lc, LinphoneEvent ev,
- SubscriptionState state) {
-
- }
-
- @Override
- public void notifyReceived(LinphoneCore lc, LinphoneEvent ev,
- String eventName, LinphoneContent content) {
- Log.d("Notify received: " + eventName + " -> " + content.getDataAsString());
- }
-
- @Override
- public void publishStateChanged(LinphoneCore lc, LinphoneEvent ev,
- PublishState state) {
-
- }
-
- @Override
- public void configuringStatus(LinphoneCore lc,
- RemoteProvisioningState state, String message) {
- Log.d("Configuration state: " + state + "(" + message + ")");
- }
-
- @Override
- public void show(LinphoneCore lc) {
-
- }
-
- @Override
- public void displayStatus(LinphoneCore lc, String message) {
-
- }
-
- @Override
- public void displayMessage(LinphoneCore lc, String message) {
-
- }
-
- @Override
- public void displayWarning(LinphoneCore lc, String message) {
-
- }
-
-}
diff --git a/sample/src/org/linphone/mini/LinphoneMiniUtils.java b/sample/src/org/linphone/mini/LinphoneMiniUtils.java
deleted file mode 100644
index 41f35c256..000000000
--- a/sample/src/org/linphone/mini/LinphoneMiniUtils.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.linphone.mini;
-
-/*
-LinphoneMiniUtils.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import android.content.Context;
-
-public class LinphoneMiniUtils {
- public static void copyIfNotExist(Context context, int ressourceId, String target) throws IOException {
- File lFileToCopy = new File(target);
- if (!lFileToCopy.exists()) {
- copyFromPackage(context, ressourceId, lFileToCopy.getName());
- }
- }
-
- public static void copyFromPackage(Context context, int ressourceId, String target) throws IOException {
- FileOutputStream lOutputStream = context.openFileOutput (target, 0);
- InputStream lInputStream = context.getResources().openRawResource(ressourceId);
- int readByte;
- byte[] buff = new byte[8048];
- while (( readByte = lInputStream.read(buff)) != -1) {
- lOutputStream.write(buff,0, readByte);
- }
- lOutputStream.flush();
- lOutputStream.close();
- lInputStream.close();
- }
-}
diff --git a/sample/submodules b/sample/submodules
deleted file mode 120000
index 1bc410d91..000000000
--- a/sample/submodules
+++ /dev/null
@@ -1 +0,0 @@
-../submodules
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index e3ee292e9..3c51d2094 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include 'liblinphone-sdk'
+include ':app', ':linphone-sdk-android'
diff --git a/src/androidTest/org/linphone/AccountAssistant.java b/src/androidTest/org/linphone/AccountAssistant.java
deleted file mode 100644
index 9658dd077..000000000
--- a/src/androidTest/org/linphone/AccountAssistant.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package org.linphone;
-
-/*
-AccountAssistant.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.assistant.AssistantActivity;
-import org.linphone.core.LinphoneNatPolicy;
-import org.linphone.core.LinphoneProxyConfig;
-import org.linphone.mediastream.video.capture.hwconf.Hacks;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Button;
-
-public class AccountAssistant extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testAWizardDisplayedAfterInstall() {
- LinphonePreferences.instance().setXmlrpcUrl("https://sip3.linphone.org:444/inapp.php");
- solo.waitForActivity("AssistantActivity", 3000);
- solo.assertCurrentActivity("Expected Assistant Activity", AssistantActivity.class);
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testBLoginWithLinphoneAccount() {
- solo.waitForActivity("AssistantActivity", 3000);
- solo.assertCurrentActivity("Expected Assistant Activity", AssistantActivity.class);
-
- solo.clickOnView(solo.getView(R.id.login_linphone));
- solo.clickOnView(solo.getView(R.id.use_username));
- solo.enterText((EditText) solo.getView(R.id.assistant_username), aContext.getString(R.string.account_linphone_login));
- solo.enterText((EditText) solo.getView(R.id.assistant_password), aContext.getString(R.string.account_linphone_pwd));
- solo.clickOnView(solo.getView(R.id.assistant_apply));
- solo.sleep(3000);
- solo.clickOnView(solo.getView(R.id.assistant_skip));
- solo.sleep(1000);
-
- //Test download openh264
- if (LinphoneManager.getLc().downloadOpenH264Enabled()) {
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.assistant_codec_down_question)));
- solo.clickOnView(solo.getView(R.id.answerNo));
- }
-
- solo.waitForActivity("LinphoneActivity", 8000);
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.account_linphone_login) + "@sip.linphone.org"));
-
- solo.sleep(3000); //Wait for registration to be done
- LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList();
- Assert.assertEquals(1, proxyConfigs.length);
- LinphoneProxyConfig proxyConfig = proxyConfigs[0];
- waitForRegistration(proxyConfig);
-
- //Check the wizard added sip.linphone.org custom settings
- LinphoneNatPolicy natPolicy = proxyConfig.getNatPolicy();
- LinphonePreferences prefs = LinphonePreferences.instance();
- String stunServer = natPolicy.getStunServer();
- Assert.assertEquals(aContext.getString(R.string.default_stun), stunServer);
-
- String transport = prefs.getAccountTransportKey(0);
- Assert.assertEquals(aContext.getString(R.string.pref_transport_tls_key), transport);
-
- String proxy = prefs.getAccountProxy(0);
- Assert.assertEquals("", proxy);
-
- String username = prefs.getAccountUsername(0);
- Assert.assertEquals(aContext.getString(R.string.account_linphone_login), username);
-
- boolean ice = natPolicy.iceEnabled();
- Assert.assertEquals(ice, true);
- }
-
- @LargeTest
- public void testCWizardDoesntShowWhenAccountIsConfigured() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testDLoginWithGenericAccount() {
- startAssistant();
-
- solo.clickOnView(solo.getView(R.id.login_generic));
- solo.enterText((EditText) solo.getView(R.id.assistant_username), aContext.getString(R.string.account_generic_login));
- solo.enterText((EditText) solo.getView(R.id.assistant_password), aContext.getString(R.string.account_generic_pwd));
- solo.enterText((EditText) solo.getView(R.id.assistant_domain), aContext.getString(R.string.account_generic_domain));
- solo.clickOnView(solo.getView(R.id.assistant_apply));
-
- if (!Hacks.hasBuiltInEchoCanceller())
- solo.waitForActivity("LinphoneActivity", 8000);
- else
- solo.waitForActivity("LinphoneActivity", 2000);
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.account_generic_login) + "@" + aContext.getString(R.string.account_generic_domain)));
-
- solo.sleep(3000); //Wait for registration to be done
- LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList();
- Assert.assertEquals(proxyConfigs.length, 2);
- LinphoneProxyConfig proxyConfig = proxyConfigs[1];
- waitForRegistration(proxyConfig);
- }
-
- @LargeTest
- public void testECreateNewAccount() {
- int sleepingTime = 1500;
- startAssistant();
-
- solo.clickOnView(solo.getView(R.id.create_account));
-
- if (aContext.getResources().getBoolean(R.bool.isTablet)) {
- solo.enterText((EditText) solo.getView(R.id.username), iContext.getString(R.string.account_create_login).substring(0, 2));
- solo.sleep(200);
- TextView error = (TextView) solo.getView(R.id.username_error);
- Button createAccount = (Button) solo.getView(R.id.assistant_create);
-
- Assert.assertEquals(error.getText(), aContext.getString(R.string.wizard_username_incorrect));
- Assert.assertFalse(createAccount.isEnabled());
-
- solo.clearEditText((EditText) solo.getView(R.id.username));
- solo.enterText((EditText) solo.getView(R.id.username), iContext.getString(R.string.account_linphone_login));
- solo.sleep(sleepingTime * 2);
- Assert.assertEquals(error.getText(), aContext.getString(R.string.wizard_username_unavailable));
- Assert.assertFalse(createAccount.isEnabled());
-
- solo.enterText((EditText) solo.getView(R.id.password), iContext.getString(R.string.account_create_pwd).substring(0, 2));
- solo.sleep(sleepingTime);
- error = (TextView) solo.getView(R.id.confirm_password_error);
- Assert.assertEquals(error.getText(), aContext.getString(R.string.wizard_passwords_unmatched));
- Assert.assertFalse(createAccount.isEnabled());
-
- solo.clearEditText((EditText) solo.getView(R.id.password));
- solo.enterText((EditText) solo.getView(R.id.password), iContext.getString(R.string.account_create_pwd).substring(0, 2));
- solo.enterText((EditText) solo.getView(R.id.confirm_password), iContext.getString(R.string.account_create_pwd).substring(0, 2));
- solo.sleep(sleepingTime);
- error = (TextView) solo.getView(R.id.password_error);
- Assert.assertEquals(error.getText(), aContext.getString(R.string.wizard_password_incorrect));
- Assert.assertFalse(createAccount.isEnabled());
-
- solo.enterText((EditText) solo.getView(R.id.email), iContext.getString(R.string.account_create_email).substring(0, 12));
- solo.sleep(sleepingTime);
- error = (TextView) solo.getView(R.id.email_error);
- Assert.assertEquals(error.getText(), aContext.getString(R.string.wizard_email_incorrect));
- Assert.assertFalse(createAccount.isEnabled());
-
- solo.clearEditText((EditText) solo.getView(R.id.username));
- solo.clearEditText((EditText) solo.getView(R.id.password));
- solo.clearEditText((EditText) solo.getView(R.id.confirm_password));
- solo.clearEditText((EditText) solo.getView(R.id.email));
- solo.enterText((EditText) solo.getView(R.id.username), iContext.getString(R.string.account_create_login));
- solo.enterText((EditText) solo.getView(R.id.password), iContext.getString(R.string.account_create_pwd));
- solo.enterText((EditText) solo.getView(R.id.confirm_password), iContext.getString(R.string.account_create_pwd));
- solo.enterText((EditText) solo.getView(R.id.email), iContext.getString(R.string.account_create_email));
- solo.sleep(sleepingTime);
- Assert.assertEquals(error.getText(), "");
- Assert.assertTrue(createAccount.isEnabled());
- } else {
- solo.clickOnView(solo.getView(R.id.select_country));
-
- solo.enterText((EditText) solo.getView(R.id.search_country), aContext.getString(R.string.account_create_country_name));
- solo.sleep(500);
- solo.clickInList(0);
- solo.sleep(500);
- Assert.assertEquals(((Button)solo.getView(R.id.select_country)).getText().toString().toLowerCase(),
- aContext.getString(R.string.account_create_country_name).toLowerCase());
- Assert.assertEquals(((EditText)solo.getView(R.id.dial_code)).getText().toString(),
- "+"+aContext.getString(R.string.account_create_country_code));
-
- Assert.assertEquals(((TextView)solo.getView(R.id.sip_uri)).getText().toString(), "");
- solo.enterText((EditText) solo.getView(R.id.phone_number),
- aContext.getString(R.string.account_create_phone_number).substring(2));
- Assert.assertEquals(((TextView)solo.getView(R.id.phone_number_error)).getText().toString(),
- aContext.getString(R.string.phone_number_too_short));
- solo.clearEditText((EditText) solo.getView(R.id.phone_number));
- solo.enterText((EditText) solo.getView(R.id.phone_number), aContext.getString(R.string.account_create_phone_number)+"1234");
- Assert.assertEquals(((TextView)solo.getView(R.id.phone_number_error)).getText().toString(),
- aContext.getString(R.string.phone_number_too_long));
- solo.clearEditText((EditText) solo.getView(R.id.phone_number));
- solo.enterText((EditText) solo.getView(R.id.phone_number), aContext.getString(R.string.account_create_phone_number));
- Assert.assertEquals(((TextView)solo.getView(R.id.phone_number_error)).getText().toString(), "");
- Assert.assertEquals(((TextView)solo.getView(R.id.sip_uri)).getText().toString(),
- aContext.getString(R.string.assistant_create_account_phone_number_address)
- + " <" + "+" + aContext.getString(R.string.account_create_country_code)
- + aContext.getString(R.string.account_create_phone_number)
- + "@" + aContext.getString(R.string.default_domain) + ">");
-
- solo.clickOnView(solo.getView(R.id.use_username));
- Assert.assertEquals(((TextView)solo.getView(R.id.sip_uri)).getText().toString(), "");
- solo.enterText((EditText) solo.getView(R.id.username), aContext.getString(R.string.account_create_login));
- Assert.assertEquals(((TextView)solo.getView(R.id.sip_uri)).getText().toString(),
- aContext.getString(R.string.assistant_create_account_phone_number_address)
- + " <" + aContext.getString(R.string.account_create_login)
- + "@" + aContext.getString(R.string.default_domain) + ">");
-
- Button createAccount = (Button) solo.getView(R.id.assistant_create);
-
- Assert.assertTrue(createAccount.isEnabled());
- }
- }
-
- @LargeTest
- public void testFCancelWizard() {
- startAssistant();
- solo.clickOnView(solo.getView(R.id.assistant_cancel));
-
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- private void startAssistant() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.clickOnView(solo.getView(R.id.side_menu_button));
- solo.clickOnText(aContext.getString(R.string.menu_assistant));
- }
-}
diff --git a/src/androidTest/org/linphone/AccountManagement.java b/src/androidTest/org/linphone/AccountManagement.java
deleted file mode 100644
index 0af9ff8a2..000000000
--- a/src/androidTest/org/linphone/AccountManagement.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.linphone;
-
-/*
-AccountManagement.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.core.LinphoneProxyConfig;
-import org.linphone.fragments.FragmentsAvailable;
-
-import android.test.suitebuilder.annotation.LargeTest;
-
-public class AccountManagement extends SampleTest {
-
- @LargeTest
- public void testAEditAccount() {
- goToSettings();
- solo.clickOnText(iContext.getString(R.string.account_generic_login) + "@" + iContext.getString(R.string.account_generic_domain));
- solo.clickOnText(aContext.getString(R.string.pref_username));
- solo.enterText(0, "new");
-
- solo.clickOnView(solo.getView(android.R.id.button1));
-
- solo.goBack();
- solo.goBack();
- solo.waitForFragmentByTag(FragmentsAvailable.DIALER.toString(), 2000);
-
- LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList();
- LinphoneProxyConfig proxyConfig = proxyConfigs[0];
- waitForRegistration(proxyConfig);
- Assert.assertEquals(proxyConfigs.length, 2);
- proxyConfig = proxyConfigs[1];
- waitForRegistration(proxyConfig);
- Assert.assertTrue(proxyConfig.getIdentity(), proxyConfig.getIdentity().contains("new"));
- }
-
- @LargeTest
- public void testBDeleteAccount() {
- goToSettings();
- solo.clickOnText(iContext.getString(R.string.account_generic_login) + "new");
- selectItemInListOnUIThread(16);
- solo.clickLongOnText(aContext.getString(R.string.pref_delete_account));
-
- solo.goBack();
- solo.goBack();
-
- LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList();
- Assert.assertEquals(1, proxyConfigs.length);
- }
-
- @LargeTest
- public void testCDisableAccount() {
- goToSettings();
- solo.clickOnText(iContext.getString(R.string.account_linphone_login));
- selectItemInListOnUIThread(14);
- solo.clickLongOnText(aContext.getString(R.string.pref_disable_account));
-
- solo.goBack();
- solo.goBack();
-
- Assert.assertFalse(LinphonePreferences.instance().isAccountEnabled(0));
- }
-
- @LargeTest
- public void testDEnableAccount() {
- goToSettings();
- solo.clickOnText(iContext.getString(R.string.account_linphone_login));
- selectItemInListOnUIThread(14);
- solo.clickLongOnText(aContext.getString(R.string.pref_disable_account));
-
- solo.goBack();
- solo.goBack();
-
- Assert.assertTrue(LinphonePreferences.instance().isAccountEnabled(0));
- }
-
- private void goToSettings() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.clickOnView(solo.getView(R.id.side_menu_button));
- solo.clickOnText("Settings");
- }
-}
diff --git a/src/androidTest/org/linphone/AinitTestEnv.java b/src/androidTest/org/linphone/AinitTestEnv.java
deleted file mode 100644
index 1daa95d39..000000000
--- a/src/androidTest/org/linphone/AinitTestEnv.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.linphone;
-
-/*
-AinitTestEnv.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-
-public class AinitTestEnv extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testAInitLinphoneCore() {
- LinphoneTestManager.createAndStart(aContext, iContext, 1);
-
- solo.sleep(5000);
- Assert.assertEquals(1, LinphoneTestManager.getLc().getProxyConfigList().length);
- waitForRegistration(LinphoneTestManager.getLc().getProxyConfigList()[0]);
- }
-}
diff --git a/src/androidTest/org/linphone/CallsAudio.java b/src/androidTest/org/linphone/CallsAudio.java
deleted file mode 100644
index 6c395045f..000000000
--- a/src/androidTest/org/linphone/CallsAudio.java
+++ /dev/null
@@ -1,490 +0,0 @@
-package org.linphone;
-
-/*
-CallsAudio.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import org.linphone.call.CallActivity;
-import org.linphone.call.CallIncomingActivity;
-import org.linphone.call.CallOutgoingActivity;
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.core.LinphoneCall;
-import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneCoreException;
-import org.linphone.core.PayloadType;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.ImageView;
-
-import static android.test.TouchUtils.dragViewToX;
-
-public class CallsAudio extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testAInit() {
- //Disable video
- goToSettings();
-
- selectItemInListOnUIThread(3);
- solo.clickOnText(aContext.getString(R.string.pref_video_title));
- solo.clickOnText(aContext.getString(R.string.pref_video_enable_title));
- solo.sleep(500);
-
- solo.goBack();
- solo.sleep(1000);
- Assert.assertFalse(LinphoneManager.getLc().isVideoEnabled());
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testBOutgoingCallWithDefaultConfig() {
- LinphoneTestManager.getInstance().declineCall = false; // Just in case
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertOutgoingCallIsCorrectlyRunning();
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testCDTMFRFC2833InPCMUCall() {
- disableAllEnabledAudioCodecs();
- solo.scrollUp();
- solo.clickOnText("PCMU");
- solo.sleep(500);
- goBackToDialerAfterCodecChanges();
- solo.sleep(1000);
-
- LinphoneManager.getLc().setUseRfc2833ForDtmfs(true);
- LinphoneManager.getLc().setUseSipInfoForDtmfs(false);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.dialer));
- solo.clickOnView(solo.getView(R.id.Digit3));
- solo.clickOnView(solo.getView(R.id.dialer));
-
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
-
- //To enable when issue http://git.linphone.org/mantis/view.php?id=750 will be fixed
- //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
- LinphoneTestManager.getInstance().isDTMFReceived = false;
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testDDTMFSIPINFO() {
- LinphoneManager.getLc().setUseRfc2833ForDtmfs(false);
- LinphoneManager.getLc().setUseSipInfoForDtmfs(true);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.dialer));
- solo.clickOnView(solo.getView(R.id.Digit3));
- solo.clickOnView(solo.getView(R.id.dialer));
-
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
-
- //To enable when issue http://git.linphone.org/mantis/view.php?id=751 will be fixed
- //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
- LinphoneTestManager.getInstance().isDTMFReceived = false;
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testEOutgoingCallToAudioClient() {
- LinphoneTestManager.getLc().enableVideo(false, false);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.waitForActivity("CallOutgoingActivity", 2000);
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testFOutgoingCallToVideoClient() {
- LinphoneTestManager.getLc().enableVideo(true, true);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.waitForActivity("CallOutgoingActivity", 5000);
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testGOutgoingCallCancelled() {
- LinphoneTestManager.getInstance().autoAnswer = false;
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.waitForActivity("CallOutgoingActivity", 200);
- solo.assertCurrentActivity("Expected InCall Activity", CallOutgoingActivity.class);
-
- solo.sleep(2000);
- waitForCallState(LinphoneManager.getLc().getCalls()[0],LinphoneCall.State.OutgoingRinging);
-
- LinphoneTestManager.getInstance().autoAnswer = true;
-
- ImageView hangUp = (ImageView) solo.getView(R.id.outgoing_hang_up);
- solo.clickOnView(hangUp);
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testHOutgoingCallDeclined() {
- LinphoneTestManager.getInstance().autoAnswer = true; // Just in case
- LinphoneTestManager.getInstance().declineCall = true;
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.sleep(1500);
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.error_call_declined)));
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- LinphoneTestManager.getInstance().declineCall = false;
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testIIncomingAudioCall() {
- LinphoneTestManager.getInstance().declineCall = false; // Just in case
- LinphoneTestManager.getLc().enableVideo(false, false);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc().invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("CallIncomingActivity", 2000);
- solo.assertCurrentActivity("Expected Incoming Call Activity", CallIncomingActivity.class);
-
- solo.sleep(1000);
- dragViewToX(this, solo.getView(R.id.accept), Gravity.CENTER_HORIZONTAL, 0);
- getInstrumentation().waitForIdleSync();
-
- assertCallIsCorrectlyRunning();
- }
-
- @LargeTest
- public void testJIncomingVideoCall() {
- LinphoneTestManager.getLc().enableVideo(true, true);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc().invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("CallIncomingActivity", 5000);
- solo.assertCurrentActivity("Expected Incoming Call Activity", CallIncomingActivity.class);
-
- solo.sleep(1000);
- dragViewToX(this, solo.getView(R.id.accept), Gravity.CENTER_HORIZONTAL, 0);
- getInstrumentation().waitForIdleSync();
-
- assertCallIsCorrectlyRunning();
- }
-
- @MediumTest
- @LargeTest
- public void testKSelfPauseResumeCall() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.pause));
- solo.sleep(1000);
-
- waitForCallPaused(LinphoneManager.getLc().getCalls()[0]);
-
- solo.clickOnView(solo.getView(R.id.call_pause));
- solo.sleep(1000);
-
- waitForCallResumed(LinphoneManager.getLc().getCalls()[0]);
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testLRemotePauseResumeCall() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- LinphoneTestManager.getLc().pauseAllCalls();
- solo.sleep(1000);
-
- waitForCallState(LinphoneManager.getLc().getCalls()[0], LinphoneCall.State.PausedByRemote);
-
- LinphoneTestManager.getLc().resumeCall(LinphoneTestManager.getLc().getCalls()[0]);
- solo.sleep(1000);
-
- waitForCallResumed(LinphoneManager.getLc().getCalls()[0]);
-
- solo.clickLongOnScreen(200, 200); //To ensure controls are shown
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testMSwitchOnVideoInCallIsNotAllowed() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- Assert.assertFalse(solo.getView(R.id.video).isEnabled());
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testNDeclineIncomingCall() {
- LinphoneTestManager.getInstance().declineCall = false; // Just in case
- LinphoneTestManager.getLc().enableVideo(false, false);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc().invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("CallIncomingActivity", 5000);
- solo.assertCurrentActivity("Expected Incoming Call Activity", CallIncomingActivity.class);
-
- solo.sleep(1000);
-
- View topLayout = solo.getView(R.id.topLayout);
- dragViewToX(this, solo.getView(R.id.decline), Gravity.CENTER_HORIZONTAL, topLayout.getMeasuredWidth());
- getInstrumentation().waitForIdleSync();
- }
-
- @MediumTest
- @LargeTest
- public void testOCancelledIncomingCall() {
- LinphoneTestManager.getInstance().declineCall = false; // Just in case
- LinphoneTestManager.getLc().enableVideo(false, false);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc().invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("CallIncomingActivity", 5000);
- solo.assertCurrentActivity("Expected Incoming Call Activity", CallIncomingActivity.class);
-
- LinphoneTestManager.getLc().terminateAllCalls();
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testPDisplayMissedCallsNumber() {
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- Assert.assertTrue(solo.searchText("1"));
- }
-
- //TODO: Test each audio codec
-
- private void assertOutgoingCallIsCorrectlyRunning() {
- solo.waitForActivity("CallOutgoingActivity", 2000);
- solo.assertCurrentActivity("Expected OutgoingCall Activity", CallOutgoingActivity.class);
-
- LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
- waitForCallState(call, LinphoneCall.State.OutgoingProgress);
- }
-
- private void assertCallIsCorrectlyRunning() {
- solo.waitForActivity("CallActivity", 5000);
- solo.assertCurrentActivity("Expected InCall Activity", CallActivity.class);
-
- LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
- waitForCallState(call, LinphoneCall.State.StreamsRunning);
- }
-
- private void goToSettings() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.clickOnView(solo.getView(R.id.side_menu_button));
- solo.clickOnText(aContext.getString(R.string.menu_settings));
- }
-
- private void goToAudioCodecsSettings() {
- goToSettings();
-
- selectItemInListOnUIThread(4);
- solo.clickOnText(aContext.getString(R.string.pref_audio_title));
- solo.sleep(500);
- }
-
- private boolean isAudioCodecEnabled(String mime, int rate) {
- LinphoneCore lc = LinphoneTestManager.getLc();
- for (final PayloadType pt : lc.getAudioCodecs()) {
- if (pt.getMime().equals(mime) && pt.getRate() == rate)
- return lc.isPayloadTypeEnabled(pt);
- }
- return false;
- }
-
- private void disableAllEnabledAudioCodecs() {
- goToAudioCodecsSettings();
-
- if (isAudioCodecEnabled("opus", 48000)) {
- solo.clickOnText("opus");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("speex", 16000)) {
- solo.clickOnText("speex");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("speex", 8000)) {
- solo.clickOnText("speex", 1);
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("PCMU", 8000)) {
- solo.clickOnText("PCMU");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("PCMA", 8000)) {
- solo.clickOnText("PCMA");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("iLBC", 8000)) {
- solo.clickOnText("iLBC");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("AMR", 8000)) {
- solo.clickOnText("AMR");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("AMRWB", 8000)) {
- solo.clickOnText("AMRWB");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("G729", 8000)) {
- solo.clickOnText("G729");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("GSM", 8000)) {
- solo.clickOnText("GSM");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("G722", 8000)) {
- solo.clickOnText("G722");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("SILK", 24000)) {
- solo.clickOnText("SILK");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("SILK", 16000)) {
- solo.clickOnText("SILK", 1);
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("SILK", 8000)) {
- solo.clickOnText("SILK", 2);
- solo.sleep(500);
- }
- }
-
- private void goBackToDialerAfterCodecChanges() {
- solo.goBack();
- solo.goBack();
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-}
diff --git a/src/androidTest/org/linphone/CallsVideo.java b/src/androidTest/org/linphone/CallsVideo.java
deleted file mode 100644
index cece7d52f..000000000
--- a/src/androidTest/org/linphone/CallsVideo.java
+++ /dev/null
@@ -1,592 +0,0 @@
-package org.linphone;
-
-/*
-CallsVideo.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import org.linphone.call.CallActivity;
-import org.linphone.call.CallIncomingActivity;
-import org.linphone.call.CallOutgoingActivity;
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.core.LinphoneCall;
-import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneCoreException;
-import org.linphone.core.PayloadType;
-
-import android.test.suitebuilder.annotation.SmallTest;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.view.Gravity;
-
-import static android.test.TouchUtils.dragViewToX;
-
-public class CallsVideo extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testAInit() {
- //Enable video
- goToSettings();
-
- // enable auto accept and auto share video
- goToVideoCodecsSettings();
- solo.sleep(500);
- solo.clickOnText(aContext.getString(R.string.pref_video_enable_title));
- solo.clickOnText(aContext.getString(R.string.pref_video_initiate_call_with_video_title));
- solo.clickOnText(aContext.getString(R.string.pref_video_automatically_accept_video_title));
- solo.sleep(500);
- solo.goBack();
-
- solo.goBack();
- solo.sleep(1000);
- Assert.assertTrue(LinphoneManager.getLc().isVideoEnabled());
- Assert.assertTrue(LinphoneManager.getLc().getVideoAutoAcceptPolicy());
- Assert.assertTrue(LinphoneManager.getLc().getVideoAutoInitiatePolicy());
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testBOutgoingCallWithDefaultConfig() {
- LinphoneTestManager.getInstance().declineCall = false; // Just in case
- LinphoneTestManager.getLc().enableVideo(true, true);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertOutgoingCallIsCorrectlyRunning();
- assertCallIsCorrectlyRunning();
- assertCallIsRunningWithVideo();
-
- solo.clickOnView(solo.getView(R.id.video_frame));
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testCDTMFRFC2833InPCMUCall() {
- disableAllEnabledAudioCodecs();
- solo.scrollUp();
- solo.clickOnText("PCMU");
- solo.sleep(500);
- goBackToDialerAfterCodecChanges();
- solo.sleep(1000);
-
- LinphoneManager.getLc().setUseRfc2833ForDtmfs(true);
- LinphoneManager.getLc().setUseSipInfoForDtmfs(false);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.dialer));
- solo.clickOnView(solo.getView(R.id.Digit3));
- solo.clickOnView(solo.getView(R.id.dialer));
-
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
-
- //To enable when issue http://git.linphone.org/mantis/view.php?id=750 will be fixed
- //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
- LinphoneTestManager.getInstance().isDTMFReceived = false;
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testDDTMFSIPINFO() {
- LinphoneManager.getLc().setUseRfc2833ForDtmfs(false);
- LinphoneManager.getLc().setUseSipInfoForDtmfs(true);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.dialer));
- solo.clickOnView(solo.getView(R.id.Digit3));
- solo.clickOnView(solo.getView(R.id.dialer));
-
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
-
- //To enable when issue http://git.linphone.org/mantis/view.php?id=751 will be fixed
- //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
- LinphoneTestManager.getInstance().isDTMFReceived = false;
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testEOutgoingCallToAudioClient() {
- LinphoneTestManager.getLc().enableVideo(false, false);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertOutgoingCallIsCorrectlyRunning();
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testFOutgoingCallToVideoClient() {
- LinphoneTestManager.getLc().enableVideo(true, true);
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertOutgoingCallIsCorrectlyRunning();
- assertCallIsCorrectlyRunning();
- assertCallIsRunningWithVideo();
-
- solo.clickOnView(solo.getView(R.id.video_frame));
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testGOutgoingCallCancelled() {
- LinphoneTestManager.getInstance().autoAnswer = false;
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.waitForActivity("InCallActivity", 5000);
- solo.assertCurrentActivity("Expected InCall Activity", CallActivity.class);
-
- solo.sleep(2000);
- waitForCallState(LinphoneManager.getLc().getCalls()[0],LinphoneCall.State.OutgoingRinging);
-
- LinphoneTestManager.getInstance().autoAnswer = true;
-
- solo.clickOnView(solo.getView(R.id.outgoing_hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testHOutgoingCallDeclined() {
- LinphoneTestManager.getInstance().autoAnswer = true; // Just in case
- LinphoneTestManager.getInstance().declineCall = true;
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.sleep(1500);
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.error_call_declined)));
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- LinphoneTestManager.getInstance().declineCall = false;
- }
-
- @LargeTest
- public void testIIncomingAudioCall() {
- LinphoneTestManager.getInstance().declineCall = false; // Just in case
- LinphoneTestManager.getLc().enableVideo(false, false);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc().invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("IncomingCallActivity", 5000);
- solo.assertCurrentActivity("Expected Incoming Call Activity", CallIncomingActivity.class);
-
- solo.sleep(1000);
- dragViewToX(this, solo.getView(R.id.accept), Gravity.CENTER_HORIZONTAL, 0);
- getInstrumentation().waitForIdleSync();
-
- assertCallIsCorrectlyRunning();
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testJIncomingVideoCall() {
- LinphoneTestManager.getLc().enableVideo(true, true);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc().invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("IncomingCallActivity", 5000);
- solo.assertCurrentActivity("Expected Incoming Call Activity", CallIncomingActivity.class);
-
-
- solo.sleep(1000);
- dragViewToX(this, solo.getView(R.id.accept), Gravity.CENTER_HORIZONTAL, 0);
- getInstrumentation().waitForIdleSync();
-
- assertCallIsCorrectlyRunning();
- assertCallIsRunningWithVideo();
- }
-
-// @SmallTest
-// @MediumTest
-// @LargeTest
-// public void testJIncommingCallWithCallPlayer() throws InterruptedException {
-// testJIncomingVideoCall();
-// Thread.sleep(2000);
-// callPlayerTest();
-// }
-
- //TODO: Test each video codec
-
- @MediumTest
- @LargeTest
- public void testKSelfPauseResumeCall() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.active_call));
- solo.clickOnView(solo.getView(R.id.pause));
- solo.sleep(1000);
-
- waitForCallPaused(LinphoneManager.getLc().getCalls()[0]);
- solo.clickOnView(solo.getView(R.id.active_call));
- solo.clickOnView(solo.getView(R.id.call_pause));
- solo.sleep(1000);
-
- waitForCallResumed(LinphoneManager.getLc().getCalls()[0]);
-
- solo.clickOnView(solo.getView(R.id.active_call));
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testLRemotePauseResumeCall() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- LinphoneTestManager.getLc().pauseAllCalls();
- solo.sleep(1000);
-
- waitForCallState(LinphoneManager.getLc().getCalls()[0], LinphoneCall.State.PausedByRemote);
- solo.clickOnView(solo.getView(R.id.active_call));
- LinphoneTestManager.getLc().resumeCall(LinphoneTestManager.getLc().getCalls()[0]);
- solo.sleep(1000);
-
- waitForCallResumed(LinphoneManager.getLc().getCalls()[0]);
-
- solo.clickOnView(solo.getView(R.id.active_call));
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testMSwitchOffVideoInCall() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
- assertCallIsRunningWithVideo();
-
- Assert.assertTrue(solo.getView(R.id.video).isEnabled());
- solo.clickOnView(solo.getView(R.id.video_frame));
- solo.clickOnView(solo.getView(R.id.video));
- solo.sleep(1000);
- Assert.assertFalse(LinphoneManager.getLc().getCurrentCall().getCurrentParamsCopy().getVideoEnabled());
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- private void assertCallIsRunningWithVideo() {
- LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
- Assert.assertTrue(call.getCurrentParamsCopy().getVideoEnabled());
- }
- private void assertOutgoingCallIsCorrectlyRunning() {
- solo.waitForActivity("CallOutgoingActivity", 2000);
- solo.assertCurrentActivity("Expected OutgoingCall Activity", CallOutgoingActivity.class);
-
- LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
-
- waitForCallState(call, LinphoneCall.State.OutgoingProgress);
- }
-
- private void assertCallIsCorrectlyRunning() {
- solo.waitForActivity("CallActivity", 2000);
- solo.assertCurrentActivity("Expected InCall Activity", CallActivity.class);
-
- LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
-
- waitForCallState(call, LinphoneCall.State.StreamsRunning);
- }
-
- private void goToSettings() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- solo.clickOnView(solo.getView(R.id.side_menu_button));
- solo.clickOnText(aContext.getString(R.string.menu_settings));
- }
-
- private void goToAudioCodecsSettings() {
- goToSettings();
-
- selectItemInListOnUIThread(4);
- solo.clickOnText(aContext.getString(R.string.pref_audio_title));
- solo.sleep(500);
- }
-
- private void goToVideoCodecsSettings() {
- //goToSettings();
-
- selectItemInListOnUIThread(6);
- if (solo.searchText(aContext.getString(R.string.pref_video_title), 2)) // Needed in case pref_video_enable_title contains pref_video
- solo.clickOnText(aContext.getString(R.string.pref_video_title), 2);
- else
- solo.clickOnText(aContext.getString(R.string.pref_video_title));
- solo.sleep(500);
- }
-
- private boolean isAudioCodecEnabled(String mime, int rate) {
- LinphoneCore lc = LinphoneTestManager.getLc();
- for (final PayloadType pt : lc.getAudioCodecs()) {
- if (pt.getMime().equals(mime) && pt.getRate() == rate)
- return lc.isPayloadTypeEnabled(pt);
- }
- return false;
- }
-
- private void disableAllEnabledAudioCodecs() {
- goToAudioCodecsSettings();
-
- if (isAudioCodecEnabled("opus", 48000)) {
- solo.clickOnText("opus");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("speex", 16000)) {
- solo.clickOnText("speex");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("speex", 8000)) {
- solo.clickOnText("speex", 1);
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("PCMU", 8000)) {
- solo.clickOnText("PCMU");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("PCMA", 8000)) {
- solo.clickOnText("PCMA");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("iLBC", 8000)) {
- solo.clickOnText("iLBC");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("AMR", 8000)) {
- solo.clickOnText("AMR");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("AMRWB", 8000)) {
- solo.clickOnText("AMRWB");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("G729", 8000)) {
- solo.clickOnText("G729");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("GSM", 8000)) {
- solo.clickOnText("GSM");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("G722", 8000)) {
- solo.clickOnText("G722");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("SILK", 24000)) {
- solo.clickOnText("SILK");
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("SILK", 16000)) {
- solo.clickOnText("SILK", 1);
- solo.sleep(500);
- }
-
- if (isAudioCodecEnabled("SILK", 8000)) {
- solo.clickOnText("SILK", 2);
- solo.sleep(500);
- }
-
-
- }
-
- private boolean isVideoCodecEnabled(String mime) {
- LinphoneCore lc = LinphoneTestManager.getLc();
- for (final PayloadType pt : lc.getVideoCodecs()) {
- if (pt.getMime().equals(mime))
- return lc.isPayloadTypeEnabled(pt);
- }
- return false;
- }
-
- private void disableAllEnabledVideoCodecs() {
- goToVideoCodecsSettings();
-
- if (isVideoCodecEnabled("VP8")) {
- solo.clickOnText(aContext.getString(R.string.pref_video_codec_vp8_title));
- solo.sleep(500);
- }
-
- if (isVideoCodecEnabled("H264")) {
- solo.clickOnText(aContext.getString(R.string.pref_video_codec_h264_title));
- solo.sleep(500);
- }
-
- if (isVideoCodecEnabled("MP4V-ES")) {
- solo.clickOnText(aContext.getString(R.string.pref_video_codec_mpeg4_title));
- solo.sleep(500);
- }
- }
-
-// private void forceH264Codec() {
-// goToVideoCodecsSettings();
-//
-// if (isVideoCodecEnabled("VP8")) {
-// solo.clickOnText(aContext.getString(R.string.pref_video_codec_vp8_title));
-// solo.sleep(500);
-// }
-//
-// if (!isVideoCodecEnabled("H264")) {
-// solo.clickOnText(aContext.getString(R.string.pref_video_codec_h264_title));
-// solo.sleep(500);
-// }
-//
-// if (isVideoCodecEnabled("MP4V-ES")) {
-// solo.clickOnText(aContext.getString(R.string.pref_video_codec_mpeg4_title));
-// solo.sleep(500);
-// }
-// }
-
-// private void enableAllDisabledVideoCodecs() {
-// goToVideoCodecsSettings();
-//
-// if (!isVideoCodecEnabled("VP8")) {
-// solo.clickOnText(aContext.getString(R.string.pref_video_codec_vp8_title));
-// solo.sleep(500);
-// }
-//
-// if (!isVideoCodecEnabled("H264")) {
-// solo.clickOnText(aContext.getString(R.string.pref_video_codec_h264_title));
-// solo.sleep(500);
-// }
-//
-// if (!isVideoCodecEnabled("MP4V-ES")) {
-// solo.clickOnText(aContext.getString(R.string.pref_video_codec_mpeg4_title));
-// solo.sleep(500);
-// }
-// }
-
- private void goBackToDialerAfterCodecChanges()
- {
- solo.goBack();
- solo.goBack();
-
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
-// private void callPlayerTest() throws InterruptedException {
-// LinphoneCall call = LinphoneTestManager.getLc().getCurrentCall();
-// Assert.assertNotNull(call);
-// if(call == null) return;
-// LinphonePlayer player = call.getPlayer();
-// Assert.assertNotNull(player);
-// if(player == null) return;
-// EofListenerImpl eof = new EofListenerImpl();
-// int openResult = player.open("/storage/sdcard0/Movies/test.mkv", eof);
-// Assert.assertEquals(openResult, 0);
-// if(openResult == 0) {
-// Assert.assertEquals(player.start(), 0);
-// try {
-// Assert.assertTrue(eof.waitForEof(20000));
-// } catch (InterruptedException e) {
-// throw e;
-// } finally {
-// player.close();
-// }
-// }
-// }
-//
-// private class EofListenerImpl implements LinphonePlayer.Listener {
-// private boolean mEof = false;
-//
-// @Override
-// public void endOfFile(LinphonePlayer player) {
-// mEof = true;
-// }
-//
-// public boolean waitForEof(int timeout) throws InterruptedException {
-// final int refreshTime = 100;
-// int time = 0;
-// while(time < timeout && !mEof) {
-// Thread.sleep(refreshTime);
-// time += refreshTime;
-// }
-// return time < timeout;
-// }
-// }
-}
diff --git a/src/androidTest/org/linphone/Chat.java b/src/androidTest/org/linphone/Chat.java
deleted file mode 100644
index 19065fdae..000000000
--- a/src/androidTest/org/linphone/Chat.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package org.linphone;
-
-/*
-Chat.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.core.LinphoneChatMessage;
-import org.linphone.core.LinphoneChatMessage.State;
-import org.linphone.core.LinphoneChatRoom;
-
-import com.robotium.solo.Solo;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.widget.EditText;
-
-public class Chat extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testAEmptyChatHistory() {
- goToChat();
-
- LinphoneChatRoom[] chats = LinphoneTestManager.getInstance().getLc().getChatRooms();
- for (LinphoneChatRoom chatroom : chats) {
- chatroom.markAsRead();
- chatroom.deleteHistory();
- }
-
- Assert.assertEquals(0, LinphoneActivity.instance().getUnreadMessageCount());
- }
-
- @LargeTest
- public void testBDisplayEmptyChatHistory() {
- goToChat();
-
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.no_chat_history)));
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testCSendTextMessage() {
- goToChat();
-
- solo.clickOnView(solo.getView(R.id.new_discussion));
- solo.enterText((EditText)solo.getView(R.id.search_contact_field), "sip:" + iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
-
- solo.enterText((EditText)solo.getView(R.id.message), iContext.getString(R.string.chat_test_text_sent));
- solo.clickOnView(solo.getView(R.id.send_message));
-
- solo.sleep(1000);
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.chat_test_text_sent)));
- Assert.assertEquals(iContext.getString(R.string.chat_test_text_sent), LinphoneTestManager.getInstance().lastMessageReceived);
- }
-
-
- @LargeTest
- public void testDIsNotEmptyChatHistory() {
- goToChat();
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.account_test_calls_login)));
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testEReceiveTextMessage() {
- goToChat();
- solo.clickOnText(iContext.getString(R.string.account_test_calls_login));
-
- LinphoneChatRoom chatRoom = LinphoneTestManager.getLc().getOrCreateChatRoom("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- LinphoneChatMessage msg = chatRoom.createLinphoneChatMessage(iContext.getString(R.string.chat_test_text_received));
- chatRoom.sendChatMessage(msg);
-
- solo.sleep(1000);
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.chat_test_text_received)));
- }
-
- @MediumTest
- @LargeTest
- public void testFDeleteMessage() {
- goToChat();
- solo.clickOnText(iContext.getString(R.string.account_test_calls_login));
-
- solo.clickLongOnText(iContext.getString(R.string.chat_test_text_received));
- solo.clickOnText(aContext.getString(R.string.delete));
-
- solo.sleep(1000);
- Assert.assertFalse(solo.searchText(iContext.getString(R.string.chat_test_text_received)));
- }
-
- @MediumTest
- @LargeTest
- public void testGChatLandscape() {
- goToChat();
-
- solo.clickOnText(iContext.getString(R.string.account_test_calls_login));
-
- solo.sleep(1000);
- solo.setActivityOrientation(Solo.LANDSCAPE);
- solo.sleep(1000);
-
- solo.enterText((EditText) solo.getView(R.id.message), iContext.getString(R.string.chat_test_text_sent));
- solo.clickOnView(solo.getView(R.id.send_message));
-
- solo.sleep(1000);
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.chat_test_text_sent)));
- Assert.assertEquals(iContext.getString(R.string.chat_test_text_sent), LinphoneTestManager.getInstance().lastMessageReceived);
-
- solo.clickOnView(solo.getView(R.id.back));
-
- solo.sleep(1000);
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.account_test_calls_login)));
- }
-
- @MediumTest
- @LargeTest
- public void testHDeleteConversation() {
- goToChat();
-
- /*solo.clickOnText(aContext.getString(R.string.button_edit));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.delete));
- solo.clickOnText(aContext.getString(R.string.button_ok));
-
- solo.sleep(1000);
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.no_chat_history)));*/
- }
-
- private void goToChat() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.clickOnView(solo.getView(R.id.chat));
- }
-
-}
diff --git a/src/androidTest/org/linphone/ConferenceAndMultiCall.java b/src/androidTest/org/linphone/ConferenceAndMultiCall.java
deleted file mode 100644
index cf57a8062..000000000
--- a/src/androidTest/org/linphone/ConferenceAndMultiCall.java
+++ /dev/null
@@ -1,307 +0,0 @@
-package org.linphone;
-
-/*
-ConferenceAndMultiCall.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-
-import org.linphone.call.CallActivity;
-import org.linphone.call.CallIncomingActivity;
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.core.LinphoneCall;
-import org.linphone.core.LinphoneCoreException;
-import org.linphone.mediastream.Log;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.Gravity;
-
-import static android.test.TouchUtils.dragViewToX;
-
-public class ConferenceAndMultiCall extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testAInit() {
- LinphoneTestManager.createAndStart(aContext, iContext, 2);
-
- solo.sleep(2000);
- waitForRegistration(LinphoneTestManager.getLc(2).getProxyConfigList()[0]);
-
- //Disable video
- goToSettings();
-
- selectItemInListOnUIThread(3);
- solo.clickOnText(aContext.getString(R.string.pref_video_title));
- solo.clickOnText(aContext.getString(R.string.pref_video_enable_title));
- solo.sleep(500);
-
- solo.goBack();
- solo.sleep(1000);
- Assert.assertFalse(LinphoneManager.getLc().isVideoEnabled());
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testBSimpleConference() {
- LinphoneTestManager.getInstance().declineCall = false; // Just in case
- startConference();
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testCRemoveOneFromConference() {
- startConference();
-
- solo.clickOnView(solo.getView(R.id.conference_pause));
-
- Assert.assertEquals(1, LinphoneTestManager.getLc(1).getCallsNb());
- Assert.assertEquals(1, LinphoneTestManager.getLc(2).getCallsNb());
- solo.sleep(1000);
- Assert.assertFalse(LinphoneManager.getLc().isInConference());
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.sleep(1000);
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testDChangePausedCall() {
- startTwoCalls();
-
- solo.sleep(2000);
- LinphoneCall call1 = LinphoneTestManager.getLc(1).getCalls()[0];
- LinphoneCall call2 = LinphoneTestManager.getLc(2).getCalls()[0];
- waitForCallState(call2,LinphoneCall.State.StreamsRunning);
- waitForCallState(call1,LinphoneCall.State.PausedByRemote);
-
- solo.clickOnView(solo.getView(R.id.call_pause));
- solo.sleep(2000);
- waitForCallState(call1,LinphoneCall.State.StreamsRunning);
- waitForCallState(call2,LinphoneCall.State.PausedByRemote);
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testEPauseAllCalls() {
- startTwoCalls();
-
- solo.sleep(2000);
- LinphoneCall call1 = LinphoneTestManager.getLc(1).getCalls()[0];
- LinphoneCall call2 = LinphoneTestManager.getLc(2).getCalls()[0];
- waitForCallState(call2,LinphoneCall.State.StreamsRunning);
- waitForCallState(call1,LinphoneCall.State.PausedByRemote);
-
- solo.clickOnView(solo.getView(R.id.pause));
- solo.sleep(2000);
- waitForCallState(call2,LinphoneCall.State.PausedByRemote);
- waitForCallState(call1,LinphoneCall.State.PausedByRemote);
-
- // All calls are paused, one click on hang_up terminates them all
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testFAddNewCallAndCancelIt() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning(1);
- LinphoneTestManager.getInstance().autoAnswer = false;
-
- solo.clickOnView(solo.getView(R.id.options));
- solo.clickOnView(solo.getView(R.id.add_call));
-
- solo.enterText(0, iContext.getString(R.string.conference_account_login) + "@" + iContext.getString(R.string.conference_account_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.sleep(2000);
- solo.clickOnView(solo.getView(R.id.outgoing_hang_up));
-
- waitForCallState(LinphoneTestManager.getLc(1).getCalls()[0],LinphoneCall.State.PausedByRemote);
- solo.clickOnView(solo.getView(R.id.pause));
- solo.sleep(1000);
- waitForCallState(LinphoneTestManager.getLc(1).getCalls()[0],LinphoneCall.State.StreamsRunning);
-
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- LinphoneTestManager.getInstance().autoAnswer = true;
- }
-
- @LargeTest
- public void testGAddNewCallDeclined() {
- LinphoneTestManager.getInstance().autoAnswer = true; // Just in case
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning(1);
- LinphoneTestManager.getInstance().declineCall = true;
-
- solo.clickOnView(solo.getView(R.id.options));
- solo.clickOnView(solo.getView(R.id.add_call));
-
- solo.enterText(0, iContext.getString(R.string.conference_account_login) + "@" + iContext.getString(R.string.conference_account_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- solo.sleep(2000);
- waitForCallState(LinphoneTestManager.getLc(1).getCalls()[0],LinphoneCall.State.PausedByRemote);
-
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- LinphoneTestManager.getInstance().declineCall = false;
- }
-
- @LargeTest
- public void testHIncomingCallWhileInCallAndDecline() {
- LinphoneTestManager.getInstance().declineCall = false; //Just in case
-
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning(1);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc(2).invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("IncomingCallActivity", 5000);
- solo.assertCurrentActivity("Expected Incoming call Activity", CallIncomingActivity.class);
-
- solo.sleep(1000);
- dragViewToX(this, solo.getView(R.id.accept), Gravity.CENTER_HORIZONTAL, 0);
- getInstrumentation().waitForIdleSync();
-
- assertCallIsCorrectlyRunning(1);
-
- solo.sleep(2000);
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @LargeTest
- public void testIIncomingCallWhileInCallAndAccept() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning(1);
-
- solo.sleep(2000);
- try {
- LinphoneTestManager.getLc(2).invite("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
-
- solo.waitForActivity("IncomingCallActivity", 5000);
- solo.assertCurrentActivity("Expected Incoming call Activity", CallIncomingActivity.class);
-
- solo.sleep(1000);
- dragViewToX(this, solo.getView(R.id.accept), Gravity.CENTER_HORIZONTAL, 0);
- getInstrumentation().waitForIdleSync();
-
- solo.sleep(1000);
- LinphoneCall call1 = LinphoneTestManager.getLc(1).getCalls()[0];
- waitForCallState(call1,LinphoneCall.State.PausedByRemote);
- assertCallIsCorrectlyRunning(2);
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- private void goToSettings() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- solo.clickOnView(solo.getView(R.id.side_menu_button));
- solo.clickOnText(aContext.getString(R.string.menu_settings));
- }
-
- private void startTwoCalls() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(R.id.call));
- assertCallIsCorrectlyRunning(1);
-
- solo.clickOnView(solo.getView(R.id.options));
- solo.clickOnView(solo.getView(R.id.add_call));
-
- solo.enterText(0, iContext.getString(R.string.conference_account_login) + "@" + iContext.getString(R.string.conference_account_domain));
- solo.clickOnView(solo.getView(R.id.call));
- assertCallIsCorrectlyRunning(2);
- }
-
- private void startConference() {
- startTwoCalls();
-
- solo.clickOnView(solo.getView(R.id.options));
- solo.clickOnView(solo.getView(R.id.conference));
- solo.sleep(1000);
-
- assertCallIsCorrectlyRunning(1);
- assertCallIsCorrectlyRunning(2);
- Assert.assertTrue(LinphoneManager.getLc().isInConference());
- }
-
- private void assertCallIsCorrectlyRunning(int lcId) {
- solo.waitForActivity("CallActivity", 5000);
- solo.assertCurrentActivity("Expected InCall Activity", CallActivity.class);
-
- solo.sleep(2000);
- Assert.assertEquals(1, LinphoneTestManager.getLc(lcId).getCallsNb());
- LinphoneCall call = LinphoneTestManager.getLc(lcId).getCalls()[0];
-
- int retry = 0;
- while ((call.getState() == LinphoneCall.State.OutgoingProgress || call.getState() == LinphoneCall.State.IncomingReceived) && retry < 5) {
- solo.sleep(1000);
- retry++;
- Log.w("call in progress but not running, retry = " + retry);
- }
-
- waitForCallState(call, LinphoneCall.State.StreamsRunning);
- }
-}
diff --git a/src/androidTest/org/linphone/Contacts.java b/src/androidTest/org/linphone/Contacts.java
deleted file mode 100644
index 8b5f6e6c0..000000000
--- a/src/androidTest/org/linphone/Contacts.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.linphone;
-
-/*
-Contacts.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import org.linphone.activities.LinphoneActivity;
-
-public class Contacts extends SampleTest {
-
- @MediumTest
- @LargeTest
- public void testAAddContactFromHistoryAndDeleteIt() {
- goToHistory();
-
- solo.clickOnView(solo.getView(R.id.detail));
- solo.clickOnView(solo.getView(R.id.add_contact));
- solo.clickOnView(solo.getView(R.id.newContact));
-
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.account_test_calls_login)));
-
- solo.enterText(0, iContext.getString(R.string.contact_name));
- solo.clickOnView(solo.getView(R.id.ok));
-
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.contact_name)));
-
- solo.clickOnText(iContext.getString(R.string.contact_name));
- solo.clickOnView(solo.getView(R.id.deleteContact));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.delete_button));
-
- Assert.assertFalse(solo.searchText(iContext.getString(R.string.contact_name)));
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testBCreateContactWithPhoneNumber() {
- goToContacts();
-
- solo.clickOnView(solo.getView(R.id.newContact));
- solo.enterText(0, iContext.getString(R.string.contact_name));
- solo.enterText(3, iContext.getString(R.string.contact_number));
- solo.clickOnView(solo.getView(R.id.ok));
- solo.sleep(2000);
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.contact_name)));
- }
-
- @MediumTest
- @LargeTest
- public void testCTestContactFilter1() {
- goToContacts();
-
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.contact_name)));
- solo.clickOnView(solo.getView(R.id.linphone_contacts));
- Assert.assertFalse(solo.searchText(iContext.getString(R.string.contact_name)));
- }
-
- @MediumTest
- @LargeTest
- public void testDEditContactAddSipAddressAndRemoveNumber() {
- goToContacts();
- solo.clickOnView(solo.getView(R.id.all_contacts));
-
- solo.clickOnText(iContext.getString(R.string.contact_name));
- solo.clickOnView(solo.getView(R.id.editContact));
- solo.clickOnView(solo.getView(R.id.delete_field));
- solo.enterText(2, iContext.getString(R.string.contact_sip));
- solo.clickOnView(solo.getView(R.id.ok));
-
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.contact_sip)));
- Assert.assertFalse(solo.searchText(iContext.getString(R.string.contact_number)));
-
- }
-
- @MediumTest
- @LargeTest
- public void testETestContactFilter2() {
- goToContacts();
-
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.contact_name)));
- solo.clickOnView(solo.getView(R.id.linphone_contacts));
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.contact_name)));
- }
-
- @MediumTest
- @LargeTest
- public void testFStartChatFromContact() {
- goToContacts();
-
- solo.clickOnText(iContext.getString(R.string.contact_name));
- solo.clickOnView(solo.getView(R.id.contact_chat));
- //Assert.assertTrue(solo.search(aContext.get(R.string.send_message)));
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testGDeleteContact() {
- goToContacts();
-
- solo.clickOnText(iContext.getString(R.string.contact_name));
- solo.clickOnView(solo.getView(R.id.deleteContact));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.delete_button));
- Assert.assertFalse(solo.searchText(iContext.getString(R.string.contact_name)));
- }
-
- private void goToContacts() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.clickOnView(solo.getView(R.id.contacts));
- }
-
- private void goToHistory() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.clickOnView(solo.getView(R.id.history));
- }
-}
diff --git a/src/androidTest/org/linphone/History.java b/src/androidTest/org/linphone/History.java
deleted file mode 100644
index 1250f416d..000000000
--- a/src/androidTest/org/linphone/History.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.linphone;
-
-/*
-History.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import org.linphone.call.CallActivity;
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.core.LinphoneCall;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-
-public class History extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testACheckForTestCallInHistory() {
- goToHistory();
-
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.today)));
- Assert.assertTrue(solo.searchText(iContext.getString(R.string.account_test_calls_login)));
- }
-
- @MediumTest
- @LargeTest
- public void testBFilterMissedCalls() {
- goToHistory();
-
- solo.clickOnView(solo.getView(R.id.missed_calls));
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.no_missed_call_history)));
- }
-
- public void testCCallBackFromHistory() {
- goToHistory();
-
- solo.clickOnText(iContext.getString(R.string.account_test_calls_login));
-
- solo.waitForActivity("InCallActivity", 5000);
- solo.assertCurrentActivity("Expected InCall Activity", CallActivity.class);
-
- solo.sleep(2000);
- Assert.assertEquals(1, LinphoneTestManager.getLc().getCallsNb());
- waitForCallState(LinphoneTestManager.getLc().getCalls()[0],LinphoneCall.State.StreamsRunning);
-
- solo.clickOnView(solo.getView(R.id.hang_up));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-
- @MediumTest
- @LargeTest
- public void testDDeleteOne() {
- goToHistory();
-
- solo.clickOnView(solo.getView(R.id.edit));
- solo.sleep(500);
- solo.clickOnCheckBox(1);
- solo.clickOnView(solo.getView(R.id.delete));
- solo.sleep(500);
- solo.clickOnView(solo.getView(R.id.delete_button));
- }
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testEDeleteAll() {
- goToHistory();
-
- solo.clickOnView(solo.getView(R.id.edit));
- solo.clickOnView(solo.getView(R.id.select_all));
- solo.clickOnView(solo.getView(R.id.delete));
- solo.sleep(500);
- solo.clickOnView(solo.getView(R.id.delete_button));
-
- Assert.assertTrue(solo.searchText(aContext.getString(R.string.no_call_history)));
- }
-
- private void goToHistory() {
- solo.waitForActivity("LinphoneActivity", 2000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.clickOnView(solo.getView(R.id.history));
- }
-}
diff --git a/src/androidTest/org/linphone/LinphoneTestManager.java b/src/androidTest/org/linphone/LinphoneTestManager.java
deleted file mode 100644
index 81af7be02..000000000
--- a/src/androidTest/org/linphone/LinphoneTestManager.java
+++ /dev/null
@@ -1,526 +0,0 @@
-package org.linphone;
-
-/*
-LinphoneTestManager.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import java.nio.ByteBuffer;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.linphone.LinphoneException;
-import org.linphone.LinphoneManager;
-import org.linphone.LinphoneManager.LinphoneConfigException;
-import org.linphone.LinphoneService;
-import org.linphone.core.LinphoneAddress;
-import org.linphone.core.LinphoneAddress.TransportType;
-import org.linphone.core.LinphoneAuthInfo;
-import org.linphone.core.LinphoneCall;
-import org.linphone.core.LinphoneCall.State;
-import org.linphone.core.LinphoneCallStats;
-import org.linphone.core.LinphoneChatMessage;
-import org.linphone.core.LinphoneChatRoom;
-import org.linphone.core.LinphoneContent;
-import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneCore.AuthMethod;
-import org.linphone.core.LinphoneCore.EcCalibratorStatus;
-import org.linphone.core.LinphoneCore.GlobalState;
-import org.linphone.core.LinphoneCore.MediaEncryption;
-import org.linphone.core.LinphoneCore.RegistrationState;
-import org.linphone.core.LinphoneCore.RemoteProvisioningState;
-import org.linphone.core.LinphoneCore.Transports;
-import org.linphone.core.LinphoneCoreException;
-import org.linphone.core.LinphoneCoreFactory;
-import org.linphone.core.LinphoneCoreListener;
-import org.linphone.core.LinphoneCoreListenerBase;
-import org.linphone.core.LinphoneEvent;
-import org.linphone.core.LinphoneFriend;
-import org.linphone.core.LinphoneFriendList;
-import org.linphone.core.LinphoneInfoMessage;
-import org.linphone.core.LinphoneProxyConfig;
-import org.linphone.core.PayloadType;
-import org.linphone.core.PublishState;
-import org.linphone.core.SubscriptionState;
-import org.linphone.mediastream.Log;
-import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
-import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera;
-
-import android.content.Context;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.telephony.TelephonyManager;
-
-public class LinphoneTestManager implements LinphoneCoreListener{
-
- private static LinphoneTestManager instance;
- private Context mIContext;
- private LinphoneCore mLc1, mLc2;
-
- public String lastMessageReceived;
- public boolean isDTMFReceived = false;
- public boolean autoAnswer = true;
- public boolean declineCall = false;
-
- private final String linphoneRootCaFile;
- private LinphoneCoreListenerBase mListener;
-
- private Timer mTimer1 = new Timer("Linphone scheduler 1");
- private Timer mTimer2 = new Timer("Linphone scheduler 2");
-
- private LinphoneTestManager(Context ac, Context ic) {
- mIContext = ic;
- linphoneRootCaFile = ac.getFilesDir().getAbsolutePath() + "/rootca.pem";
- }
-
- public static LinphoneTestManager createAndStart(Context ac, Context ic, int id) {
- if (instance == null)
- instance = new LinphoneTestManager(ac, ic);
-
- instance.startLibLinphone(ic, id);
- TelephonyManager tm = (TelephonyManager) ac.getSystemService(Context.TELEPHONY_SERVICE);
- boolean gsmIdle = tm.getCallState() == TelephonyManager.CALL_STATE_IDLE;
- setGsmIdle(gsmIdle, id);
-
- return instance;
- }
-
- private synchronized void startLibLinphone(Context c, int id) {
- try {
- LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester");
-
- final LinphoneCore mLc = LinphoneCoreFactory.instance().createLinphoneCore(this, c);
- if (id == 2) {
- mLc2 = mLc;
- } else {
- mLc1 = mLc;
- }
-
- mLc.setContext(c);
- try {
- String versionName = c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionName;
- if (versionName == null) {
- versionName = String.valueOf(c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionCode);
- }
- mLc.setUserAgent(mIContext.getResources().getString(R.string.user_agent), versionName);
- } catch (NameNotFoundException e) {
- Log.e(e, "cannot get version name");
- }
-
- mLc.enableIpv6(false);
- mLc.setRing(null);
- mLc.setRootCA(linphoneRootCaFile);
-
- int availableCores = Runtime.getRuntime().availableProcessors();
- Log.w("MediaStreamer : " + availableCores + " cores detected and configured");
- mLc.setCpuCount(availableCores);
-
- Transports t = mLc.getSignalingTransportPorts();
- t.udp = -1;
- t.tcp = -1;
- mLc.setSignalingTransportPorts(t);
-
- initFromConf(mLc);
-
- TimerTask lTask = new TimerTask() {
- @Override
- public void run() {
- mLc.iterate();
- }
- };
-
- if (id == 2) {
- mTimer2.scheduleAtFixedRate(lTask, 0, 20);
- } else {
- mTimer1.scheduleAtFixedRate(lTask, 0, 20);
- }
-
- resetCameraFromPreferences();
- }
- catch (Exception e) {
- Log.e(e, "Cannot start linphone");
- }
- }
-
- private void resetCameraFromPreferences() {
- boolean useFrontCam = true;
- int camId = 0;
- AndroidCamera[] cameras = AndroidCameraConfiguration.retrieveCameras();
- for (AndroidCamera androidCamera : cameras) {
- if (androidCamera.frontFacing == useFrontCam)
- camId = androidCamera.id;
- }
- LinphoneManager.getLc().setVideoDevice(camId);
- }
-
- public void initFromConf(LinphoneCore mLc) {
- LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester");
-
- initAccounts(mLc);
-
- mLc.setVideoPolicy(true, true);
- mLc.enableVideo(true, true);
-
- mLc.setUseRfc2833ForDtmfs(false);
- mLc.setUseSipInfoForDtmfs(true);
-
- mLc.setNetworkReachable(true);
- }
-
- public boolean detectVideoCodec(String mime, LinphoneCore mLc) {
- for (PayloadType videoCodec : mLc.getVideoCodecs()) {
- if (mime.equals(videoCodec.getMime())) return true;
- }
- return false;
- }
-
- public boolean detectAudioCodec(String mime, LinphoneCore mLc){
- for (PayloadType audioCodec : mLc.getAudioCodecs()) {
- if (mime.equals(audioCodec.getMime())) return true;
- }
- return false;
- }
-
- void initMediaEncryption(LinphoneCore mLc){
- MediaEncryption me = MediaEncryption.None;
- mLc.setMediaEncryption(me);
- }
-
- private void initAccounts(LinphoneCore mLc) throws LinphoneCoreException {
- mLc.clearAuthInfos();
- mLc.clearProxyConfigs();
-
- String username, password, domain;
- if (mLc.equals(mLc1)) {
- username = mIContext.getString(R.string.account_test_calls_login);
- password = mIContext.getString(R.string.account_test_calls_pwd);
- domain = mIContext.getString(R.string.account_test_calls_domain);
- } else {
- username = mIContext.getString(R.string.conference_account_login);
- password = mIContext.getString(R.string.conference_account_password);
- domain = mIContext.getString(R.string.conference_account_domain);
- }
-
- LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(username, password, null, domain);
- mLc.addAuthInfo(lAuthInfo);
- String identity = "sip:" + username +"@" + domain;
- String proxy = "sip:" + domain;
- LinphoneAddress proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxy);
- proxyAddr.setTransport(TransportType.LinphoneTransportTls);
- LinphoneProxyConfig proxycon = mLc.createProxyConfig(identity, proxyAddr.asStringUriOnly(), proxyAddr.asStringUriOnly(), true);
- mLc.addProxyConfig(proxycon);
- mLc.setDefaultProxyConfig(proxycon);
-
- LinphoneProxyConfig lDefaultProxyConfig = mLc.getDefaultProxyConfig();
- if (lDefaultProxyConfig != null) {
- //escape +
- lDefaultProxyConfig.setDialEscapePlus(false);
- } else if (LinphoneService.isReady()) {
- getLc().addListener(this);
- this.registrationState(mLc, lDefaultProxyConfig, RegistrationState.RegistrationNone, null);
- }
- }
-
- public static synchronized final LinphoneTestManager getInstance() {
- return instance;
- }
-
- public static synchronized final LinphoneCore getLc(int i) {
- if (i == 2)
- return getInstance().mLc2;
- return getInstance().mLc1;
- }
-
- public static synchronized final LinphoneCore getLc() {
- return getLc(1);
- }
-
- private int savedMaxCallWhileGsmIncall;
- private synchronized void preventSIPCalls(LinphoneCore mLc) {
- if (savedMaxCallWhileGsmIncall != 0) {
- Log.w("SIP calls are already blocked due to GSM call running");
- return;
- }
- savedMaxCallWhileGsmIncall = mLc.getMaxCalls();
- mLc.setMaxCalls(0);
- }
- private synchronized void allowSIPCalls(LinphoneCore mLc) {
- if (savedMaxCallWhileGsmIncall == 0) {
- Log.w("SIP calls are already allowed as no GSM call knowned to be running");
- return;
- }
- mLc.setMaxCalls(savedMaxCallWhileGsmIncall);
- savedMaxCallWhileGsmIncall = 0;
- }
- public static void setGsmIdle(boolean gsmIdle, int id) {
- LinphoneTestManager mThis = instance;
- if (mThis == null) return;
- if (gsmIdle) {
- mThis.allowSIPCalls(LinphoneTestManager.getLc(id));
- } else {
- mThis.preventSIPCalls(LinphoneTestManager.getLc(id));
- }
- }
-
- private void doDestroy() {
- try {
- mTimer1.cancel();
- mTimer2.cancel();
- mLc1.destroy();
- mLc2.destroy();
- }
- catch (RuntimeException e) {
- e.printStackTrace();
- }
- finally {
- mLc1 = null;
- mLc2 = null;
- instance = null;
- }
- }
-
- public static synchronized void destroy() {
- if (instance == null) return;
- instance.doDestroy();
- }
-
- @Override
- public void globalState(LinphoneCore lc, GlobalState state, String message) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void callState(LinphoneCore lc, LinphoneCall call, State cstate,
- String message) {
- // TODO Auto-generated method stub
- Log.e("Call state = " + cstate.toString());
- if (cstate == LinphoneCall.State.IncomingReceived) {
- if (declineCall) {
- lc.terminateCall(call);
- } else if (autoAnswer) {
- try {
- lc.acceptCall(call);
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- @Override
- public void callStatsUpdated(LinphoneCore lc, LinphoneCall call,
- LinphoneCallStats stats) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void callEncryptionChanged(LinphoneCore lc, LinphoneCall call,
- boolean encrypted, String authenticationToken) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,
- RegistrationState cstate, String smessage) {
- // TODO Auto-generated method stub
- Log.e("Registration state = " + cstate.toString());
- }
-
- @Override
- public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,
- String url) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr,
- LinphoneChatMessage message) {
- // TODO Auto-generated method stub
- Log.e("Message received = " + message.getText());
- lastMessageReceived = message.getText();
- }
-
- @Override
- public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) {
- // TODO Auto-generated method stub
- Log.e("DTMF received = " + dtmf);
- isDTMFReceived = true;
- }
-
- @Override
- public void notifyReceived(LinphoneCore lc, LinphoneCall call,
- LinphoneAddress from, byte[] event) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void show(LinphoneCore lc) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void displayStatus(LinphoneCore lc, String message) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void displayMessage(LinphoneCore lc, String message) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void displayWarning(LinphoneCore lc, String message) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void transferState(LinphoneCore lc, LinphoneCall call,
- State new_call_state) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void infoReceived(LinphoneCore lc, LinphoneCall call,
- LinphoneInfoMessage info) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void subscriptionStateChanged(LinphoneCore lc, LinphoneEvent ev,
- SubscriptionState state) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void notifyReceived(LinphoneCore lc, LinphoneEvent ev,
- String eventName, LinphoneContent content) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void publishStateChanged(LinphoneCore lc, LinphoneEvent ev,
- PublishState state) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void configuringStatus(LinphoneCore lc,
- RemoteProvisioningState state, String message) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void authInfoRequested(LinphoneCore lc, String realm,
- String username, String domain) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void authenticationRequested(LinphoneCore lc,
- LinphoneAuthInfo authInfo, AuthMethod method) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void fileTransferProgressIndication(LinphoneCore lc,
- LinphoneChatMessage message, LinphoneContent content, int progress) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void fileTransferRecv(LinphoneCore lc, LinphoneChatMessage message,
- LinphoneContent content, byte[] buffer, int size) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public int fileTransferSend(LinphoneCore lc, LinphoneChatMessage message,
- LinphoneContent content, ByteBuffer buffer, int size) {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public void uploadProgressIndication(LinphoneCore lc, int offset, int total) {
- // TODO Auto-generated method stub
-
- }
-
-
- @Override
- public void uploadStateChanged(LinphoneCore lc, LinphoneCore.LogCollectionUploadState state,
- String info) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status,
- int delay_ms, Object data) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void friendListCreated(LinphoneCore lc, LinphoneFriendList list) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void friendListRemoved(LinphoneCore lc, LinphoneFriendList list) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void networkReachableChanged(LinphoneCore lc, boolean enable) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void messageReceivedUnableToDecrypted(LinphoneCore lc, LinphoneChatRoom cr,
- LinphoneChatMessage message) {
- // TODO Auto-generated method stub
- }
-}
diff --git a/src/androidTest/org/linphone/SampleTest.java b/src/androidTest/org/linphone/SampleTest.java
deleted file mode 100644
index d60f45a9f..000000000
--- a/src/androidTest/org/linphone/SampleTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.linphone;
-
-/*
-SampleTest.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import org.linphone.activities.LinphoneLauncherActivity;
-import org.linphone.core.LinphoneCall;
-import org.linphone.core.LinphoneCall.State;
-import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneProxyConfig;
-import org.linphone.core.LinphoneCore.RegistrationState;
-
-import android.content.Context;
-import android.test.ActivityInstrumentationTestCase2;
-import android.widget.ListView;
-
-import com.robotium.solo.Condition;
-import com.robotium.solo.Solo;
-
-public abstract class SampleTest extends ActivityInstrumentationTestCase2{
-
- protected final int STRING_LENGTH_MAX = 20;
-
- protected Solo solo;
- protected Context aContext, iContext;
-
- public SampleTest() {
- super(LinphoneLauncherActivity.class);
- }
-
- @Override
- public void setUp() throws Exception {
- solo = new Solo(getInstrumentation());
- aContext = getActivity();
- iContext = aContext;
- }
-
- @Override
- public void tearDown() throws Exception {
- LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
- if (lc != null) {
- lc.terminateAllCalls();
- }
- solo.finishOpenedActivities();
- }
-
- protected void selectItemInListOnUIThread(final int item) {
- solo.sleep(500);
- getActivity().runOnUiThread(new Runnable() {
- public void run() {
- ListView list = (ListView) solo.getView(android.R.id.list);
- list.setSelection(item);
- }
- });
- }
-
- protected void waitForRegistration(final LinphoneProxyConfig lpc) {
- if(lpc == null) return;
- solo.waitForCondition(new Condition() {
- @Override
- public boolean isSatisfied() {
- return RegistrationState.RegistrationOk == lpc.getState();
- }
- }, 30000);
- }
-
- protected void waitForCallPaused(final LinphoneCall call) {
- if(call == null) return;
- solo.waitForCondition(new Condition() {
- @Override
- public boolean isSatisfied() {
- return call.getState().equals(State.Paused) || call.getState().equals(State.Pausing);
- }
- }, 30000);
- }
-
- protected void waitForCallResumed(final LinphoneCall call) {
- if(call == null) return;
- solo.waitForCondition(new Condition() {
- @Override
- public boolean isSatisfied() {
- return call.getState().equals(State.Resuming) || call.getState().equals(State.StreamsRunning);
- }
- }, 30000);
- }
-
- protected void waitForCallState(final LinphoneCall call, final State state) {
- if(call == null) return;
- solo.waitForCondition(new Condition() {
- @Override
- public boolean isSatisfied() {
- return state.equals(call.getState());
- }
- }, 30000);
- }
-}
\ No newline at end of file
diff --git a/src/androidTest/org/linphone/Transfer.java b/src/androidTest/org/linphone/Transfer.java
deleted file mode 100644
index 09f596712..000000000
--- a/src/androidTest/org/linphone/Transfer.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.linphone;
-
-/*
-Transfer.java
-Copyright (C) 2017 Belledonne Communications, Grenoble, France
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-import junit.framework.Assert;
-
-import org.linphone.call.CallActivity;
-import org.linphone.activities.LinphoneActivity;
-import org.linphone.core.LinphoneCall;
-import org.linphone.mediastream.Log;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-
-public class Transfer extends SampleTest {
- @SmallTest
- @MediumTest
- @LargeTest
- public void testACallTransfer() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.call));
-
- assertCallIsCorrectlyRunning();
-
- solo.clickOnView(solo.getView(R.id.options));
- solo.clickOnView(solo.getView(R.id.transfer));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
-
- solo.enterText(0, iContext.getString(R.string.conference_account_login) + "@" + iContext.getString(R.string.conference_account_domain));
- solo.sleep(1000);
- solo.clickOnView(solo.getView(R.id.call)); // Transfer button as the same id, only the image changes
-
- solo.sleep(2000);
- Assert.assertTrue(LinphoneTestManager.getLc(1).getCallsNb() > 0);
- Assert.assertTrue(LinphoneTestManager.getLc(2).getCallsNb() > 0);
- LinphoneTestManager.getLc(1).terminateAllCalls();
- solo.sleep(500);
- Assert.assertTrue(LinphoneTestManager.getLc(1).getCallsNb() == 0);
- Assert.assertTrue(LinphoneTestManager.getLc(2).getCallsNb() == 0);
- }
-
- private void assertCallIsCorrectlyRunning() {
- solo.waitForActivity("InCallActivity", 5000);
- solo.assertCurrentActivity("Expected InCall Activity", CallActivity.class);
-
- solo.sleep(2000);
- LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
-
- int retry = 0;
- while ((call.getState() == LinphoneCall.State.OutgoingProgress || call.getState() == LinphoneCall.State.IncomingReceived) && retry < 5) {
- solo.sleep(1000);
- retry++;
- Log.w("Call in progress but not running, retry = " + retry);
- }
-
- waitForCallState(call,LinphoneCall.State.StreamsRunning);
- }
-}
diff --git a/submodules/bcg729 b/submodules/bcg729
deleted file mode 160000
index fdd4b15cd..000000000
--- a/submodules/bcg729
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit fdd4b15cd773ecdd01c4aeb65a8ec2cbde65637e
diff --git a/submodules/bcmatroska2 b/submodules/bcmatroska2
deleted file mode 160000
index e8a69bdc3..000000000
--- a/submodules/bcmatroska2
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit e8a69bdc3f8828cfd83b0938955132918364b175
diff --git a/submodules/bctoolbox b/submodules/bctoolbox
deleted file mode 160000
index 88ed003be..000000000
--- a/submodules/bctoolbox
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 88ed003beb9a33d9d80bbac8c53287039e1e30b0
diff --git a/submodules/bcunit b/submodules/bcunit
deleted file mode 160000
index 8f5e72c34..000000000
--- a/submodules/bcunit
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 8f5e72c3428ad6ff9bfa59da5a83524ff0764fa5
diff --git a/submodules/belcard b/submodules/belcard
deleted file mode 160000
index ab5416d66..000000000
--- a/submodules/belcard
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit ab5416d66620f32ff6882b6e29dec63203dbca41
diff --git a/submodules/belle-sip b/submodules/belle-sip
deleted file mode 160000
index bb1693f58..000000000
--- a/submodules/belle-sip
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit bb1693f580ca10ab63c8f4efd80d2dfb4237642c
diff --git a/submodules/belr b/submodules/belr
deleted file mode 160000
index cfad8fcc2..000000000
--- a/submodules/belr
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit cfad8fcc28c7cdba69684c8e35846711aaa16775
diff --git a/submodules/bzrtp b/submodules/bzrtp
deleted file mode 160000
index 2dea113f7..000000000
--- a/submodules/bzrtp
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2dea113f7f1596af94d024008f401899b102b2ab
diff --git a/submodules/cmake-builder b/submodules/cmake-builder
deleted file mode 160000
index 25ae2c14f..000000000
--- a/submodules/cmake-builder
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 25ae2c14f95953a47f1ed2fd8e477601763fa268
diff --git a/submodules/externals/build/antlr3/Android.mk b/submodules/externals/build/antlr3/Android.mk
deleted file mode 100644
index 20ff05e06..000000000
--- a/submodules/externals/build/antlr3/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-
-LOCAL_PATH:= $(call my-dir)/../../antlr3/runtime/C/src
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= antlr3
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/../../../../externals/antlr3 \
- $(LOCAL_PATH)/../include
-LOCAL_SRC_FILES := \
- antlr3baserecognizer.c \
- antlr3basetree.c \
- antlr3basetreeadaptor.c \
- antlr3bitset.c \
- antlr3collections.c \
- antlr3commontoken.c \
- antlr3commontree.c \
- antlr3commontreeadaptor.c \
- antlr3commontreenodestream.c \
- antlr3convertutf.c \
- antlr3cyclicdfa.c \
- antlr3debughandlers.c \
- antlr3encodings.c \
- antlr3exception.c \
- antlr3filestream.c \
- antlr3inputstream.c \
- antlr3intstream.c \
- antlr3lexer.c \
- antlr3parser.c \
- antlr3rewritestreams.c \
- antlr3string.c \
- antlr3tokenstream.c \
- antlr3treeparser.c \
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/antlr3/antlr3config.h b/submodules/externals/build/antlr3/antlr3config.h
deleted file mode 100644
index 4b39e1ca5..000000000
--- a/submodules/externals/build/antlr3/antlr3config.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* antlr3config.h. Generated from antlr3config.h.in by configure. */
-/* antlr3config.h.in. Generated from configure.ac by autoheader. */
-
-/* Define if ANTLR debugger not required */
-/* #undef ANTLR3_NODEBUGGER */
-
-/* Define if 64 bit mode required */
-/* #undef ANTLR3_USE_64BIT */
-
-/* Define to 1 if you have the `accept' function. */
-/* #undef HAVE_ACCEPT */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_ARPA_NAMESER_H */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_CTYPE_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if the system has the type `intptr_t'. */
-/* #undef HAVE_INTPTR_T */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_MALLOC_H */
-
-/* Define to 1 if you have the `memmove' function. */
-/* #undef HAVE_MEMMOVE */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `memset' function. */
-/* #undef HAVE_MEMSET */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_NETDB_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_NETINET_TCP_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_RESOLV_H */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_SOCKET_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDARG_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strdup' function. */
-/* #undef HAVE_STRDUP */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_SYS_MALLOC_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if the system has the type `uintptr_t'. */
-/* #undef HAVE_UINTPTR_T */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_UNISTD_H 1
-
-/* Name of package */
-#define PACKAGE "libantlr3c"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "jimi@temporal-wave.com"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "libantlr3c"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libantlr3c 3.4-beta3"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "libantlr3c"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "3.4-beta3"
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Version number of package */
-#define VERSION "3.4-beta3"
-
-/* Define for Solaris 2.5.1 so the uint32_t typedef from ,
- , or is not used. If the typedef were allowed, the
- #define below would cause a syntax error. */
-/* #undef _UINT32_T */
-
-/* Define for Solaris 2.5.1 so the uint64_t typedef from ,
- , or is not used. If the typedef were allowed, the
- #define below would cause a syntax error. */
-/* #undef _UINT64_T */
-
-/* Define for Solaris 2.5.1 so the uint8_t typedef from ,
- , or is not used. If the typedef were allowed, the
- #define below would cause a syntax error. */
-/* #undef _UINT8_T */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to the type of a signed integer type of width exactly 16 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef int16_t */
-
-/* Define to the type of a signed integer type of width exactly 32 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef int32_t */
-
-/* Define to the type of a signed integer type of width exactly 64 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef int64_t */
-
-/* Define to the type of a signed integer type of width exactly 8 bits if such
- a type exists and the standard includes do not define it. */
-/* #undef int8_t */
-
-/* Define to the type of a signed integer type wide enough to hold a pointer,
- if such a type exists, and if the system does not define it. */
-/* #undef intptr_t */
-
-/* Define to `unsigned int' if does not define. */
-/* #undef size_t */
-
-/* Define to the type of an unsigned integer type of width exactly 16 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef uint16_t */
-
-/* Define to the type of an unsigned integer type of width exactly 32 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef uint32_t */
-
-/* Define to the type of an unsigned integer type of width exactly 64 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef uint64_t */
-
-/* Define to the type of an unsigned integer type of width exactly 8 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef uint8_t */
-
-/* Define to the type of an unsigned integer type wide enough to hold a
- pointer, if such a type exists, and if the system does not define it. */
-/* #undef uintptr_t */
diff --git a/submodules/externals/build/codec2/Android.mk b/submodules/externals/build/codec2/Android.mk
deleted file mode 100644
index 18c2a4119..000000000
--- a/submodules/externals/build/codec2/Android.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-LOCAL_PATH:= $(call my-dir)/../../codec2
-
-BUILD_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libcodec2
-
-
-LOCAL_SRC_FILES += \
- src/dump.c \
- src/lpc.c \
- src/nlp.c \
- src/postfilter.c \
- src/sine.c \
- src/codec2.c \
- src/fifo.c \
- src/fdmdv.c \
- src/kiss_fft.c \
- src/interp.c \
- src/lsp.c \
- src/phase.c \
- src/quantise.c \
- src/pack.c \
- src/codebook.c \
- src/codebookd.c \
- src/codebookvq.c \
- src/codebookjnd.c \
- src/codebookjvm.c \
- src/codebookvqanssi.c \
- src/codebookdt.c \
- src/codebookge.c \
- src/golay23.c
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/src
-
-LOCAL_CFLAGS := -ffast-math -include $(BUILD_PATH)/codec2_prefixed_symbols.h
-
-
-LOCAL_ARM_MODE := arm
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/submodules/externals/build/codec2/codec2_prefixed_symbols.h b/submodules/externals/build/codec2/codec2_prefixed_symbols.h
deleted file mode 100644
index d2aefca1a..000000000
--- a/submodules/externals/build/codec2/codec2_prefixed_symbols.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* This file was created extracting exported symbol of codec2 library
- * The purpose is to avoid name collision with other libraries
- * This was done by the following command
- * nm libcodec2.so|grep " T "|sed 's/^.*\ T\ \(.*\)/#define\ \1 codec2_\1/'
- * */
-#define autocorrelate codec2_autocorrelate
-#define de_emp codec2_de_emp
-#define find_aks codec2_find_aks
-#define hanning_window codec2_hanning_window
-#define inverse_filter codec2_inverse_filter
-#define levinson_durbin codec2_levinson_durbin
-#define pre_emp codec2_pre_emp
-#define synthesis_filter codec2_synthesis_filter
-#define weight codec2_weight
-#define nlp codec2_nlp
-#define nlp_create codec2_nlp_create
-#define nlp_destroy codec2_nlp_destroy
-#define post_process_mbe codec2_post_process_mbe
-#define post_process_sub_multiples codec2_post_process_sub_multiples
-#define test_candidate_mbe codec2_test_candidate_mbe
-#define postfilter codec2_postfilter
-#define codec2_rand codec2_codec2_rand
-#define dft_speech codec2_dft_speech
-#define estimate_amplitudes codec2_estimate_amplitudes
-#define est_voicing_mbe codec2_est_voicing_mbe
-#define hpf codec2_hpf
-#define hs_pitch_refinement codec2_hs_pitch_refinement
-#define make_analysis_window codec2_make_analysis_window
-#define make_synthesis_window codec2_make_synthesis_window
-#define synthesise codec2_synthesise
-#define two_stage_pitch_refinement codec2_two_stage_pitch_refinement
-#define analyse_one_frame codec2_analyse_one_frame
-#define codec2_bits_per_frame codec2_codec2_bits_per_frame
-#define codec2_create codec2_codec2_create
-#define codec2_decode codec2_codec2_decode
-#define codec2_decode_1200 codec2_codec2_decode_1200
-#define codec2_decode_1300 codec2_codec2_decode_1300
-#define codec2_decode_1400 codec2_codec2_decode_1400
-#define codec2_decode_1600 codec2_codec2_decode_1600
-#define codec2_decode_2400 codec2_codec2_decode_2400
-#define codec2_decode_3200 codec2_codec2_decode_3200
-#define codec2_decode_ber codec2_codec2_decode_ber
-#define codec2_destroy codec2_codec2_destroy
-#define codec2_encode codec2_codec2_encode
-#define codec2_encode_1200 codec2_codec2_encode_1200
-#define codec2_encode_1300 codec2_codec2_encode_1300
-#define codec2_encode_1400 codec2_codec2_encode_1400
-#define codec2_encode_1600 codec2_codec2_encode_1600
-#define codec2_encode_2400 codec2_codec2_encode_2400
-#define codec2_encode_3200 codec2_codec2_encode_3200
-#define codec2_get_spare_bit_index codec2_codec2_get_spare_bit_index
-#define codec2_rebuild_spare_bit codec2_codec2_rebuild_spare_bit
-#define codec2_samples_per_frame codec2_codec2_samples_per_frame
-#define codec2_set_lpc_post_filter codec2_codec2_set_lpc_post_filter
-#define codec2_set_natural_or_gray codec2_codec2_set_natural_or_gray
-#define synthesise_one_frame codec2_synthesise_one_frame
-#define fifo_create codec2_fifo_create
-#define fifo_destroy codec2_fifo_destroy
-#define fifo_read codec2_fifo_read
-#define fifo_used codec2_fifo_used
-#define fifo_write codec2_fifo_write
-#define bits_to_dqpsk_symbols codec2_bits_to_dqpsk_symbols
-#define calc_snr codec2_calc_snr
-#define fdm_downconvert codec2_fdm_downconvert
-#define fdmdv_48_to_8 codec2_fdmdv_48_to_8
-#define fdmdv_8_to_48 codec2_fdmdv_8_to_48
-#define fdmdv_bits_per_frame codec2_fdmdv_bits_per_frame
-#define fdmdv_create codec2_fdmdv_create
-#define fdmdv_demod codec2_fdmdv_demod
-#define fdmdv_destroy codec2_fdmdv_destroy
-#define fdmdv_dump_osc_mags codec2_fdmdv_dump_osc_mags
-#define fdmdv_error_pattern_size codec2_fdmdv_error_pattern_size
-#define fdmdv_freq_shift codec2_fdmdv_freq_shift
-#define fdmdv_get_demod_stats codec2_fdmdv_get_demod_stats
-#define fdmdv_get_fsep codec2_fdmdv_get_fsep
-#define fdmdv_get_rx_spectrum codec2_fdmdv_get_rx_spectrum
-#define fdmdv_get_test_bits codec2_fdmdv_get_test_bits
-#define fdmdv_mod codec2_fdmdv_mod
-#define fdmdv_put_test_bits codec2_fdmdv_put_test_bits
-#define fdmdv_set_fsep codec2_fdmdv_set_fsep
-#define fdmdv_use_old_qpsk_mapping codec2_fdmdv_use_old_qpsk_mapping
-#define fdm_upconvert codec2_fdm_upconvert
-#define freq_state codec2_freq_state
-#define generate_pilot_fdm codec2_generate_pilot_fdm
-#define generate_pilot_lut codec2_generate_pilot_lut
-#define lpf_peak_pick codec2_lpf_peak_pick
-#define qpsk_to_bits codec2_qpsk_to_bits
-#define rx_est_freq_offset codec2_rx_est_freq_offset
-#define rx_est_timing codec2_rx_est_timing
-#define rx_filter codec2_rx_filter
-#define snr_update codec2_snr_update
-#define tx_filter codec2_tx_filter
-#define kiss_fft codec2_kiss_fft
-#define kiss_fft_alloc codec2_kiss_fft_alloc
-#define kiss_fft_cleanup codec2_kiss_fft_cleanup
-#define kiss_fft_next_fast_size codec2_kiss_fft_next_fast_size
-#define kiss_fft_stride codec2_kiss_fft_stride
-#define interp_energy codec2_interp_energy
-#define interp_energy2 codec2_interp_energy2
-#define interpolate codec2_interpolate
-#define interpolate_lsp codec2_interpolate_lsp
-#define interpolate_lsp_ver2 codec2_interpolate_lsp_ver2
-#define interp_Wo codec2_interp_Wo
-#define interp_Wo2 codec2_interp_Wo2
-#define sample_log_amp codec2_sample_log_amp
-#define lpc_to_lsp codec2_lpc_to_lsp
-#define lsp_to_lpc codec2_lsp_to_lpc
-#define aks_to_H codec2_aks_to_H
-#define phase_synth_zero_order codec2_phase_synth_zero_order
-#define aks_to_M2 codec2_aks_to_M2
-#define apply_lpc_correction codec2_apply_lpc_correction
-#define bw_expand_lsps codec2_bw_expand_lsps
-#define bw_expand_lsps2 codec2_bw_expand_lsps2
-#define check_lsp_order codec2_check_lsp_order
-#define compute_weights codec2_compute_weights
-#define compute_weights2 codec2_compute_weights2
-#define compute_weights_anssi_mode2 codec2_compute_weights_anssi_mode2
-#define decode_energy codec2_decode_energy
-#define decode_lspds_scalar codec2_decode_lspds_scalar
-#define decode_lsps_scalar codec2_decode_lsps_scalar
-#define decode_lsps_vq codec2_decode_lsps_vq
-#define decode_Wo codec2_decode_Wo
-#define decode_Wo_dt codec2_decode_Wo_dt
-#define decode_WoE codec2_decode_WoE
-#define encode_energy codec2_encode_energy
-#define encode_lspds_scalar codec2_encode_lspds_scalar
-#define encode_lsps_scalar codec2_encode_lsps_scalar
-#define encode_lsps_vq codec2_encode_lsps_vq
-#define encode_Wo codec2_encode_Wo
-#define encode_Wo_dt codec2_encode_Wo_dt
-#define encode_WoE codec2_encode_WoE
-#define find_nearest codec2_find_nearest
-#define find_nearest_weighted codec2_find_nearest_weighted
-#define force_min_lsp_dist codec2_force_min_lsp_dist
-#define locate_lsps_jnd_steps codec2_locate_lsps_jnd_steps
-#define lpc_post_filter codec2_lpc_post_filter
-#define lsp_bits codec2_lsp_bits
-#define lspd_bits codec2_lspd_bits
-#define lspjvm_quantise codec2_lspjvm_quantise
-#define lsp_pred_vq_bits codec2_lsp_pred_vq_bits
-#define quantise codec2_quantise
-#define quantise_init codec2_quantise_init
-#define quantise_WoE codec2_quantise_WoE
-#define speech_to_uq_lsps codec2_speech_to_uq_lsps
-#define pack codec2_pack
-#define pack_natural_or_gray codec2_pack_natural_or_gray
-#define unpack codec2_unpack
-#define unpack_natural_or_gray codec2_unpack_natural_or_gray
-#define get_syndrome codec2_get_syndrome
-#define golay23_count_errors codec2_golay23_count_errors
-#define golay23_decode codec2_golay23_decode
-#define golay23_encode codec2_golay23_encode
-#define golay23_init codec2_golay23_init
-#define nextcomb codec2_nextcomb
diff --git a/submodules/externals/build/cpplib/CMakeLists.txt b/submodules/externals/build/cpplib/CMakeLists.txt
deleted file mode 100644
index 3b8f300e6..000000000
--- a/submodules/externals/build/cpplib/CMakeLists.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-############################################################################
-# CMakeLists.txt
-# Copyright (C) 2016 Belledonne Communications, Grenoble France
-#
-############################################################################
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-############################################################################
-
-cmake_minimum_required(VERSION 3.0)
-project(androidcpplib LANGUAGES NONE)
-
-include(GNUInstallDirs)
-
-install(FILES "${ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/${CMAKE_SYSTEM_PROCESSOR}/libc++_shared.so"
- DESTINATION ${CMAKE_INSTALL_LIBDIR}
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
-)
diff --git a/submodules/externals/build/cunit/Android.mk b/submodules/externals/build/cunit/Android.mk
deleted file mode 100644
index bf71ff5bb..000000000
--- a/submodules/externals/build/cunit/Android.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-BUILD_PATH := $(call my-dir)
-LOCAL_PATH := $(call my-dir)/../../cunit
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- CUnit/Sources/Framework/CUError.c \
- CUnit/Sources/Framework/MyMem.c \
- CUnit/Sources/Framework/TestDB.c \
- CUnit/Sources/Framework/TestRun.c \
- CUnit/Sources/Framework/Util.c \
- CUnit/Sources/Basic/Basic.c \
- CUnit/Sources/Automated/Automated.c \
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/CUnit/Headers/ \
-
-LOCAL_CFLAGS := \
- -DHAVE_CU_GET_SUITE \
-
-LOCAL_EXPORT_C_INCLUDES := \
- $(BUILD_PATH) \
-
-LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
-
-LOCAL_MODULE := cunit
-LOCAL_LDLIBS := -llog
-
-include $(BUILD_SHARED_LIBRARY)
-
diff --git a/submodules/externals/build/ffmpeg/CMakeLists.txt b/submodules/externals/build/ffmpeg/CMakeLists.txt
deleted file mode 100644
index dba4f1fc7..000000000
--- a/submodules/externals/build/ffmpeg/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-############################################################################
-# CMakeLists.txt
-# Copyright (C) 2016 Belledonne Communications, Grenoble France
-#
-############################################################################
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-############################################################################
-
-cmake_minimum_required(VERSION 3.0)
-project(ffmpegandroid LANGUAGES C)
-
-include(GNUInstallDirs)
-
-
-find_library(AVCODEC_LIBRARY avcodec)
-find_library(AVUTIL_LIBRARY avutil)
-find_library(SWRESAMPLE_LIBRARY swresample)
-find_library(SWSCALE_LIBRARY swscale)
-
-add_library(ffmpeg-linphone SHARED)
-target_link_libraries(ffmpeg-linphone LINK_PRIVATE "m" "-Wl,-whole-archive" ${AVCODEC_LIBRARY} ${AVUTIL_LIBRARY} ${SWRESAMPLE_LIBRARY} ${SWSCALE_LIBRARY} "-Wl,-no-whole-archive")
-set_target_properties(ffmpeg-linphone PROPERTIES LINKER_LANGUAGE C)
-
-install(TARGETS ffmpeg-linphone
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
-)
diff --git a/submodules/externals/build/gsm/Android.mk b/submodules/externals/build/gsm/Android.mk
deleted file mode 100644
index c7e655ba5..000000000
--- a/submodules/externals/build/gsm/Android.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-
-LOCAL_PATH:= $(call my-dir)/../../gsm
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= libgsm
-
-LOCAL_SRC_FILES := \
- src/add.c \
- src/code.c \
- src/debug.c \
- src/decode.c \
- src/long_term.c \
- src/lpc.c \
- src/preprocess.c \
- src/rpe.c \
- src/gsm_destroy.c \
- src/gsm_decode.c \
- src/gsm_encode.c \
- src/gsm_explode.c \
- src/gsm_implode.c \
- src/gsm_create.c \
- src/gsm_print.c \
- src/gsm_option.c \
- src/short_term.c \
- src/table.c
-
-
-#LOCAL_CFLAGS += \
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/inc
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/libmatroska-c/Android.mk b/submodules/externals/build/libmatroska-c/Android.mk
deleted file mode 100644
index 720bf2535..000000000
--- a/submodules/externals/build/libmatroska-c/Android.mk
+++ /dev/null
@@ -1,70 +0,0 @@
-LOCAL_PATH:=$(call my-dir)/../../libmatroska-c
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- corec/corec/array/array.c \
- corec/corec/helpers/charconvert/charconvert_utf8.c \
- corec/corec/helpers/date/date_libc.c \
- corec/corec/helpers/file/bufstream.c \
- corec/corec/helpers/file/memstream.c \
- corec/corec/helpers/file/streams.c \
- corec/corec/helpers/file/tools.c \
- corec/corec/helpers/file/file_libc.c \
- corec/corec/helpers/file/stream_stdio.c \
- corec/corec/helpers/parser/parser2.c \
- corec/corec/helpers/parser/strtab.c \
- corec/corec/helpers/parser/strtypes.c \
- corec/corec/helpers/parser/dataheap.c \
- corec/corec/helpers/parser/buffer.c \
- corec/corec/helpers/parser/hotkey.c \
- corec/corec/helpers/parser/nodelookup.c \
- corec/corec/helpers/parser/urlpart.c \
- corec/corec/multithread/multithread_pthread.c \
- corec/corec/node/node.c \
- corec/corec/node/nodetree.c \
- corec/corec/str/str.c \
- corec/corec/str/str_linux.c
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH) \
- $(LOCAL_PATH)/corec
-
-LOCAL_SRC_FILES += \
- libebml2/ebmlbinary.c \
- libebml2/ebmlcrc.c \
- libebml2/ebmldate.c \
- libebml2/ebmlelement.c \
- libebml2/ebmlmain.c \
- libebml2/ebmlmaster.c \
- libebml2/ebmlnumber.c \
- libebml2/ebmlstring.c \
- libebml2/ebmlvoid.c
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/libebml2
-
-LOCAL_SRC_FILES += \
- libmatroska2/matroskablock.c \
- libmatroska2/matroskamain.c \
- libmatroska2/matroska_sem.c
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/libmatroska2
-
-LOCAL_CFLAGS := \
- -DCOREC_PARSER \
- -DNDEBUG \
- -DCONFIG_EBML_WRITING \
- -DCONFIG_EBML_UNICODE \
- -DCONFIG_STDIO \
- -DCONFIG_FILEPOS_64
-
-
-LOCAL_MODULE := libmatroska2
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/libmatroska-c/fix_libmatroska2.patch b/submodules/externals/build/libmatroska-c/fix_libmatroska2.patch
deleted file mode 100644
index ab689c6e8..000000000
--- a/submodules/externals/build/libmatroska-c/fix_libmatroska2.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-diff --git a/config.h b/config.h
-index 8b74169..e69de29 100644
---- a/config.h
-+++ b/config.h
-@@ -1,13 +0,0 @@
--#define COREMAKE_STATIC
--#define COREMAKE_UNICODE
--#define CONFIG_EBML_WRITING
--#define CONFIG_EBML_UNICODE
--#define HAVE_EBML2
--#define CONFIG_ZLIB
--#define CONFIG_MATROSKA2
--#define USE_PRECOMPILED_HEADERS
--#define CONFIG_DEBUGCHECKS
--#define CONFIG_STDIO
--#define CONFIG_FILEPOS_64
--#define COREMAKE_CONFIG_HELPER
--//#define CONFIG_DEBUG_LEAKS
-diff --git a/corec/corec/helpers/parser/parser2.c b/corec/corec/helpers/parser/parser2.c
-index 3126ae8..0d8512a 100644
---- a/corec/corec/helpers/parser/parser2.c
-+++ b/corec/corec/helpers/parser/parser2.c
-@@ -2019,7 +2019,7 @@ NOINLINE bool_t ExprIsTokenEx(const tchar_t** p,const tchar_t* Name,...)
-
- NOINLINE bool_t ExprIsToken(const tchar_t** p,const tchar_t* Name)
- {
-- return ExprIsTokenEx(p,Name);
-+ return ExprIsTokenEx(p,Name,"");
- }
-
- uint32_t StringToIP(const tchar_t *Address)
diff --git a/submodules/externals/build/libupnp/Android.mk b/submodules/externals/build/libupnp/Android.mk
deleted file mode 100644
index c5c8caa72..000000000
--- a/submodules/externals/build/libupnp/Android.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-LOCAL_PATH:= $(call my-dir)/../../libupnp
-include $(CLEAR_VARS)
-
-# We need to build this for both the device (as a shared library)
-# and the host (as a static library for tools to use).
-
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/../build/libupnp/inc \
- $(LOCAL_PATH)/upnp/inc \
- $(LOCAL_PATH)/upnp/src/inc \
- $(LOCAL_PATH)/threadutil/inc \
- $(LOCAL_PATH)/ixml/inc \
- $(LOCAL_PATH)/ixml/src/inc \
-
-LOCAL_SRC_FILES := \
- upnp/src/ssdp/ssdp_device.c \
- upnp/src/ssdp/ssdp_server.c \
- upnp/src/ssdp/ssdp_ctrlpt.c \
- upnp/src/genlib/service_table/service_table.c \
- upnp/src/genlib/util/upnp_timeout.c \
- upnp/src/genlib/util/membuffer.c \
- upnp/src/genlib/util/strintmap.c \
- upnp/src/genlib/util/util.c \
- upnp/src/genlib/net/uri/uri.c \
- upnp/src/genlib/net/http/httpreadwrite.c \
- upnp/src/genlib/net/http/statcodes.c \
- upnp/src/genlib/net/http/httpparser.c \
- upnp/src/genlib/net/http/webserver.c \
- upnp/src/genlib/net/http/parsetools.c \
- upnp/src/genlib/net/sock.c \
- upnp/src/genlib/miniserver/miniserver.c \
- upnp/src/genlib/client_table/client_table.c \
- upnp/src/api/upnptools.c \
- upnp/src/api/UpnpString.c \
- upnp/src/api/upnpapi.c \
- upnp/src/api/upnpdebug.c \
- upnp/src/uuid/sysdep.c \
- upnp/src/uuid/uuid.c \
- upnp/src/uuid/md5.c \
- upnp/src/soap/soap_device.c \
- upnp/src/soap/soap_ctrlpt.c \
- upnp/src/soap/soap_common.c \
- upnp/src/win_dll.c \
- upnp/src/inet_pton.c \
- upnp/src/urlconfig/urlconfig.c \
- upnp/src/gena/gena_callback2.c \
- upnp/src/gena/gena_ctrlpt.c \
- upnp/src/gena/gena_device.c \
- threadutil/src/FreeList.c \
- threadutil/src/LinkedList.c \
- threadutil/src/ThreadPool.c \
- threadutil/src/TimerThread.c \
- ixml/src/ixmldebug.c \
- ixml/src/node.c \
- ixml/src/ixmlmembuf.c \
- ixml/src/attr.c \
- ixml/src/ixmlparser.c \
- ixml/src/element.c \
- ixml/src/nodeList.c \
- ixml/src/ixml.c \
- ixml/src/document.c \
- ixml/src/namedNodeMap.c \
-
-LOCAL_C_FLAGS += -DPTHREAD_MUTEX_RECURSIVE=PTHREAD_MUTEX_RECURSIVE
-
-LOCAL_MODULE:= libupnp
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/libupnp/inc/autoconfig.h b/submodules/externals/build/libupnp/inc/autoconfig.h
deleted file mode 100644
index 7fddb66c0..000000000
--- a/submodules/externals/build/libupnp/inc/autoconfig.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/* autoconfig.h. Generated from autoconfig.h.in by configure. */
-/* autoconfig.h.in. Generated from configure.ac by autoheader. */
-
-/* Define to 1 to compile debug code */
-/* #undef DEBUG */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-/* #undef HAVE_DOPRNT */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
-#define HAVE_FSEEKO 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define if you have POSIX threads libraries and header files. */
-#define HAVE_PTHREAD 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRING_H 1
-
-/* Defines if strndup is available on your system */
-#define HAVE_STRNDUP 1
-
-/* Defines if strnlen is available on your system */
-#define HAVE_STRNLEN 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYSLOG_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `vprintf' function. */
-#define HAVE_VPRINTF 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_WS2TCPIP_H */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
-/* Define to 1 to prevent compilation of assert() */
-#define NDEBUG 1
-
-/* Define to 1 to prevent some debug code */
-#define NO_DEBUG 1
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-/* #undef NO_MINUS_C_MINUS_O */
-
-/* Name of package */
-#define PACKAGE "libupnp"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "mroberto@users.sourceforge.net"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "libupnp"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libupnp 1.6.19"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "libupnp"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.6.19"
-
-/* Define to necessary symbol if this constant uses a non-standard name on
- your system. */
-/* #undef PTHREAD_CREATE_JOINABLE */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* see upnpconfig.h */
-#define UPNP_ENABLE_BLOCKING_TCP_CONNECTIONS 1
-
-/* see upnpconfig.h */
-/* #undef UPNP_ENABLE_IPV6 */
-
-/* see upnpconfig.h */
-#define UPNP_ENABLE_NOTIFICATION_REORDERING 1
-
-/* see upnpconfig.h */
-/* #undef UPNP_ENABLE_UNSPECIFIED_SERVER */
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_CLIENT 1
-
-/* see upnpconfig.h */
-/* #undef UPNP_HAVE_DEBUG */
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_DEVICE 1
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_GENA 1
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_OPTSSDP 1
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_SOAP 1
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_SSDP 1
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_TOOLS 1
-
-/* see upnpconfig.h */
-#define UPNP_HAVE_WEBSERVER 1
-
-/* Do not use pthread_rwlock_t */
-/* #undef UPNP_USE_RWLOCK */
-
-/* see upnpconfig.h */
-#define UPNP_VERSION_MAJOR 1
-
-/* see upnpconfig.h */
-#define UPNP_VERSION_MINOR 6
-
-/* see upnpconfig.h */
-#define UPNP_VERSION_PATCH 19
-
-/* see upnpconfig.h */
-#define UPNP_VERSION_STRING "1.6.19"
-
-/* Version number of package */
-#define VERSION "1.6.19"
-
-/* File Offset size */
-#define _FILE_OFFSET_BITS 64
-
-/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
-/* #undef _LARGEFILE_SOURCE */
-
-/* Large files support */
-#define _LARGE_FILE_SOURCE /**/
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `long int' if does not define. */
-/* #undef off_t */
-
-/* Define to `unsigned int' if does not define. */
-/* #undef size_t */
-
-/* Type for storing the length of struct sockaddr */
-/* #undef socklen_t */
diff --git a/submodules/externals/build/libupnp/inc/upnpconfig.h b/submodules/externals/build/libupnp/inc/upnpconfig.h
deleted file mode 100644
index ae8d54b8d..000000000
--- a/submodules/externals/build/libupnp/inc/upnpconfig.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* upnp/inc/upnpconfig.h. Generated from upnpconfig.h.in by configure. */
-/* -*- C -*- */
-/*******************************************************************************
- *
- * Copyright (c) 2006 Rémi Turboult
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither name of Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************/
-
-#ifndef UPNP_CONFIG_H
-#define UPNP_CONFIG_H
-
-
-/***************************************************************************
- * Library version
- ***************************************************************************/
-
-/** The library version (string) e.g. "1.3.0" */
-#define UPNP_VERSION_STRING "1.6.19"
-
-/** Major version of the library */
-#define UPNP_VERSION_MAJOR 1
-
-/** Minor version of the library */
-#define UPNP_VERSION_MINOR 6
-
-/** Patch version of the library */
-#define UPNP_VERSION_PATCH 19
-
-/** The library version (numeric) e.g. 10300 means version 1.3.0 */
-#define UPNP_VERSION \
- ((UPNP_VERSION_MAJOR * 100 + UPNP_VERSION_MINOR) * 100 + UPNP_VERSION_PATCH)
-
-
-
-/***************************************************************************
- * Large file support
- ***************************************************************************/
-
-/** File Offset size */
-#define _FILE_OFFSET_BITS 64
-
-/** Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
-/* #undef _LARGEFILE_SOURCE */
-
-/** Large files support */
-#define _LARGE_FILE_SOURCE /**/
-
-/***************************************************************************
- * Library optional features
- ***************************************************************************/
-
-/*
- * The following defines can be tested in order to know which
- * optional features have been included in the installed library.
- */
-
-
-/** Defined to 1 if the library has been compiled with DEBUG enabled
- * (i.e. configure --enable-debug) : file is available */
-/* #undef UPNP_HAVE_DEBUG */
-
-
-/** Defined to 1 if the library has been compiled with client API enabled
- * (i.e. configure --enable-client) */
-#define UPNP_HAVE_CLIENT 1
-
-
-/** Defined to 1 if the library has been compiled with device API enabled
- * (i.e. configure --enable-device) */
-/* #undef UPNP_HAVE_DEVICE */
-
-
-/** Defined to 1 if the library has been compiled with integrated web server
- * (i.e. configure --enable-webserver --enable-device) */
-/* #undef UPNP_HAVE_WEBSERVER */
-
-
-/** Defined to 1 if the library has been compiled with the SSDP part enabled
- * (i.e. configure --enable-ssdp) */
-#define UPNP_HAVE_SSDP 1
-
-
-/** Defined to 1 if the library has been compiled with optional SSDP headers
- * support (i.e. configure --enable-optssdp) */
-#define UPNP_HAVE_OPTSSDP 1
-
-
-/** Defined to 1 if the library has been compiled with the SOAP part enabled
- * (i.e. configure --enable-soap) */
-#define UPNP_HAVE_SOAP 1
-
-
-/** Defined to 1 if the library has been compiled with the GENA part enabled
- * (i.e. configure --enable-gena) */
-#define UPNP_HAVE_GENA 1
-
-
-/** Defined to 1 if the library has been compiled with helper API
- * (i.e. configure --enable-tools) : file is available */
-#define UPNP_HAVE_TOOLS 1
-
-/** Defined to 1 if the library has been compiled with ipv6 support
- * (i.e. configure --enable-ipv6) */
-/* #undef UPNP_ENABLE_IPV6 */
-
-/** Defined to 1 if the library has been compiled with unspecified SERVER
- * header (i.e. configure --enable-unspecified_server) */
-/* #undef UPNP_ENABLE_UNSPECIFIED_SERVER */
-
-#endif /* UPNP_CONFIG_H */
-
diff --git a/submodules/externals/build/libvpx/Android.mk b/submodules/externals/build/libvpx/Android.mk
deleted file mode 100755
index de63d94ec..000000000
--- a/submodules/externals/build/libvpx/Android.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libvpx
-LOCAL_SRC_FILES := $(TARGET_ARCH)/libvpx.a
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-include $(PREBUILT_STATIC_LIBRARY)
diff --git a/submodules/externals/build/libxml2/Android.mk b/submodules/externals/build/libxml2/Android.mk
deleted file mode 100644
index 864f93a8c..000000000
--- a/submodules/externals/build/libxml2/Android.mk
+++ /dev/null
@@ -1,67 +0,0 @@
-LOCAL_PATH:= $(call my-dir)/../../libxml2
-include $(CLEAR_VARS)
-
-# We need to build this for both the device (as a shared library)
-# and the host (as a static library for tools to use).
-
-common_SRC_FILES := \
- SAX.c \
- entities.c \
- encoding.c \
- error.c \
- parserInternals.c \
- parser.c \
- tree.c \
- hash.c \
- list.c \
- xmlIO.c \
- xmlmemory.c \
- uri.c \
- valid.c \
- xlink.c \
- HTMLparser.c \
- HTMLtree.c \
- debugXML.c \
- xpath.c \
- xpointer.c \
- xinclude.c \
- nanohttp.c \
- nanoftp.c \
- DOCBparser.c \
- catalog.c \
- globals.c \
- threads.c \
- c14n.c \
- xmlstring.c \
- xmlregexp.c \
- xmlschemas.c \
- xmlschemastypes.c \
- xmlunicode.c \
- xmlreader.c \
- relaxng.c \
- dict.c \
- SAX2.c \
- legacy.c \
- chvalid.c \
- pattern.c \
- xmlsave.c \
- xmlmodule.c \
- xmlwriter.c \
- schematron.c
-
-common_C_INCLUDES += \
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/../build/libxml2 \
-
-LOCAL_C_INCLUDES += $(common_C_INCLUDES)
-#LOCAL_CFLAGS += -fvisibility=hidden
-
-LOCAL_SRC_FILES := $(common_SRC_FILES)
-
-LOCAL_MODULE:= liblpxml2
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/libxml2/config.h b/submodules/externals/build/libxml2/config.h
deleted file mode 100644
index c70d020ac..000000000
--- a/submodules/externals/build/libxml2/config.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.in by autoheader. */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_ANSIDECL_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_ARPA_NAMESER_H 1
-
-/* Whether struct sockaddr::__ss_family exists */
-/* #undef HAVE_BROKEN_SS_FAMILY */
-
-/* Define to 1 if you have the `class' function. */
-/* #undef HAVE_CLASS */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_CTYPE_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_DIRENT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_DLFCN_H 1
-
-/* Have dlopen based dso */
-#define HAVE_DLOPEN /**/
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_DL_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the `finite' function. */
-#define HAVE_FINITE 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `fpclass' function. */
-/* #undef HAVE_FPCLASS */
-
-/* Define to 1 if you have the `fprintf' function. */
-#define HAVE_FPRINTF 1
-
-/* Define to 1 if you have the `fp_class' function. */
-/* #undef HAVE_FP_CLASS */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_FP_CLASS_H */
-
-/* Define to 1 if you have the `ftime' function. */
-#define HAVE_FTIME 1
-
-/* Define if getaddrinfo is there */
-/* #undef HAVE_GETADDRINFO */
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_IEEEFP_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_INTTYPES_H_H */
-
-/* Define if isinf is there */
-#define HAVE_ISINF /**/
-
-/* Define if isnan is there */
-#define HAVE_ISNAN /**/
-
-/* Define to 1 if you have the `isnand' function. */
-/* #undef HAVE_ISNAND */
-
-/* Define if history library is there (-lhistory) */
-/* #undef HAVE_LIBHISTORY */
-
-/* Have compression library */
-/* #undef HAVE_LIBLZMA */
-
-/* Define if pthread library is there (-lpthread) */
-/* #undef HAVE_LIBPTHREAD */
-
-/* Define if readline library is there (-lreadline) */
-/* #undef HAVE_LIBREADLINE */
-
-/* Have compression library */
-/* #undef HAVE_LIBZ */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the `localtime' function. */
-#define HAVE_LOCALTIME 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_LZMA_H */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_MALLOC_H 1 Already defined in AndroidConfig.h */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_MATH_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_NAN_H */
-
-/* Define to 1 if you have the header file, and it defines `DIR'. */
-/* #undef HAVE_NDIR_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_POLL_H 1
-
-/* Define to 1 if you have the `printf' function. */
-#define HAVE_PRINTF 1
-
-/* Define if is there */
-/* #undef HAVE_PTHREAD_H */
-
-/* Define to 1 if you have the `rand' function. */
-#define HAVE_RAND 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_RESOLV_H 1
-
-/* Have shl_load based dso */
-/* #undef HAVE_SHLLOAD */
-
-/* Define to 1 if you have the `signal' function. */
-#define HAVE_SIGNAL 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Define to 1 if you have the `sprintf' function. */
-#define HAVE_SPRINTF 1
-
-/* Define to 1 if you have the `srand' function. */
-#define HAVE_SRAND 1
-
-/* Define to 1 if you have the `sscanf' function. */
-#define HAVE_SSCANF 1
-
-/* Define to 1 if you have the `stat' function. */
-#define HAVE_STAT 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDARG_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define to 1 if you have the `strftime' function. */
-#define HAVE_STRFTIME 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strndup' function. */
-#define HAVE_STRNDUP 1
-
-/* Define to 1 if you have the header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_DIR_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_MMAN_H 1
-
-/* Define to 1 if you have the header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_NDIR_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TIMEB_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the `time' function. */
-#define HAVE_TIME 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_TIME_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_UNISTD_H 1
-
-/* Whether va_copy() is available */
-#define HAVE_VA_COPY 1
-
-/* Define to 1 if you have the `vfprintf' function. */
-#define HAVE_VFPRINTF 1
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#define HAVE_VSNPRINTF 1
-
-/* Define to 1 if you have the `vsprintf' function. */
-#define HAVE_VSPRINTF 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_ZLIB_H */
-
-/* Define to 1 if you have the `_stat' function. */
-/* #undef HAVE__STAT */
-
-/* Whether __va_copy() is available */
-/* #undef HAVE___VA_COPY */
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef ICONV_CONST */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
-/* Name of package */
-#define PACKAGE "libxml2"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Define to 1 if the C compiler supports function prototypes. */
-#define PROTOTYPES 1
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Support for IPv6 */
-/* #undef SUPPORT_IP6 */
-
-/* Version number of package */
-#define VERSION "2.7.8"
-
-/* Determine what socket length (socklen_t) data type is */
-#define XML_SOCKLEN_T socklen_t
-
-/* Using the Win32 Socket implementation */
-/* #undef _WINSOCKAPI_ */
-
-/* Define like PROTOTYPES; this can be used by system headers. */
-#define __PROTOTYPES 1
-
-/* Win32 Std C name mangling work-around */
-/* #undef snprintf */
-
-/* ss_family is not defined here, use __ss_family instead */
-/* #undef ss_family */
-
-/* Win32 Std C name mangling work-around */
-/* #undef vsnprintf */
diff --git a/submodules/externals/build/libxml2/libxml/xmlversion.h b/submodules/externals/build/libxml2/libxml/xmlversion.h
deleted file mode 100644
index c44433755..000000000
--- a/submodules/externals/build/libxml2/libxml/xmlversion.h
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Summary: compile-time version informations
- * Description: compile-time version informations for the XML library
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_VERSION_H__
-#define __XML_VERSION_H__
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * use those to be sure nothing nasty will happen if
- * your library and includes mismatch
- */
-#ifndef LIBXML2_COMPILING_MSCCDEF
-XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
-#endif /* LIBXML2_COMPILING_MSCCDEF */
-
-/**
- * LIBXML_DOTTED_VERSION:
- *
- * the version string like "1.2.3"
- */
-#define LIBXML_DOTTED_VERSION "2.8.0"
-
-/**
- * LIBXML_VERSION:
- *
- * the version number: 1.2.3 value is 10203
- */
-#define LIBXML_VERSION 20800
-
-/**
- * LIBXML_VERSION_STRING:
- *
- * the version number string, 1.2.3 value is "10203"
- */
-#define LIBXML_VERSION_STRING "20800"
-
-/**
- * LIBXML_VERSION_EXTRA:
- *
- * extra version information, used to show a CVS compilation
- */
-#define LIBXML_VERSION_EXTRA "-GITv2.8.0"
-
-/**
- * LIBXML_TEST_VERSION:
- *
- * Macro to check that the libxml version in use is compatible with
- * the version the software has been compiled against
- */
-#define LIBXML_TEST_VERSION xmlCheckVersion(20800);
-
-#ifndef VMS
-#if 0
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO
-#else
-/**
- * WITHOUT_TRIO:
- *
- * defined if the trio support should not be configured in
- */
-#define WITHOUT_TRIO
-#endif
-#else /* VMS */
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO 1
-#endif /* VMS */
-
-/**
- * LIBXML_THREAD_ENABLED:
- *
- * Whether the thread support is configured in
- */
-#if 1
-#if defined(_REENTRANT) || defined(__MT__) || \
- (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L))
-#define LIBXML_THREAD_ENABLED
-#endif
-#endif
-
-/**
- * LIBXML_TREE_ENABLED:
- *
- * Whether the DOM like tree manipulation API support is configured in
- */
-#if 1
-#define LIBXML_TREE_ENABLED
-#endif
-
-/**
- * LIBXML_OUTPUT_ENABLED:
- *
- * Whether the serialization/saving support is configured in
- */
-#if 1
-#define LIBXML_OUTPUT_ENABLED
-#endif
-
-/**
- * LIBXML_PUSH_ENABLED:
- *
- * Whether the push parsing interfaces are configured in
- */
-#if 1
-#define LIBXML_PUSH_ENABLED
-#endif
-
-/**
- * LIBXML_READER_ENABLED:
- *
- * Whether the xmlReader parsing interface is configured in
- */
-#if 1
-#define LIBXML_READER_ENABLED
-#endif
-
-/**
- * LIBXML_PATTERN_ENABLED:
- *
- * Whether the xmlPattern node selection interface is configured in
- */
-#if 1
-#define LIBXML_PATTERN_ENABLED
-#endif
-
-/**
- * LIBXML_WRITER_ENABLED:
- *
- * Whether the xmlWriter saving interface is configured in
- */
-#if 1
-#define LIBXML_WRITER_ENABLED
-#endif
-
-/**
- * LIBXML_SAX1_ENABLED:
- *
- * Whether the older SAX1 interface is configured in
- */
-#if 1
-#define LIBXML_SAX1_ENABLED
-#endif
-
-/**
- * LIBXML_FTP_ENABLED:
- *
- * Whether the FTP support is configured in
- */
-#if 1
-#define LIBXML_FTP_ENABLED
-#endif
-
-/**
- * LIBXML_HTTP_ENABLED:
- *
- * Whether the HTTP support is configured in
- */
-#if 1
-#define LIBXML_HTTP_ENABLED
-#endif
-
-/**
- * LIBXML_VALID_ENABLED:
- *
- * Whether the DTD validation support is configured in
- */
-#if 1
-#define LIBXML_VALID_ENABLED
-#endif
-
-/**
- * LIBXML_HTML_ENABLED:
- *
- * Whether the HTML support is configured in
- */
-#if 1
-#define LIBXML_HTML_ENABLED
-#endif
-
-/**
- * LIBXML_LEGACY_ENABLED:
- *
- * Whether the deprecated APIs are compiled in for compatibility
- */
-#if 1
-#define LIBXML_LEGACY_ENABLED
-#endif
-
-/**
- * LIBXML_C14N_ENABLED:
- *
- * Whether the Canonicalization support is configured in
- */
-#if 1
-#define LIBXML_C14N_ENABLED
-#endif
-
-/**
- * LIBXML_CATALOG_ENABLED:
- *
- * Whether the Catalog support is configured in
- */
-#if 1
-#define LIBXML_CATALOG_ENABLED
-#endif
-
-/**
- * LIBXML_DOCB_ENABLED:
- *
- * Whether the SGML Docbook support is configured in
- */
-#if 1
-#define LIBXML_DOCB_ENABLED
-#endif
-
-/**
- * LIBXML_XPATH_ENABLED:
- *
- * Whether XPath is configured in
- */
-#if 1
-#define LIBXML_XPATH_ENABLED
-#endif
-
-/**
- * LIBXML_XPTR_ENABLED:
- *
- * Whether XPointer is configured in
- */
-#if 1
-#define LIBXML_XPTR_ENABLED
-#endif
-
-/**
- * LIBXML_XINCLUDE_ENABLED:
- *
- * Whether XInclude is configured in
- */
-#if 1
-#define LIBXML_XINCLUDE_ENABLED
-#endif
-
-/**
- * LIBXML_ICONV_ENABLED:
- *
- * Whether iconv support is available
- */
-#if 0
-#define LIBXML_ICONV_ENABLED
-#endif
-
-/**
- * LIBXML_ICU_ENABLED:
- *
- * Whether icu support is available
- */
-#if 0
-#define LIBXML_ICU_ENABLED
-#endif
-
-/**
- * LIBXML_ISO8859X_ENABLED:
- *
- * Whether ISO-8859-* support is made available in case iconv is not
- */
-#if 1
-#define LIBXML_ISO8859X_ENABLED
-#endif
-
-/**
- * LIBXML_DEBUG_ENABLED:
- *
- * Whether Debugging module is configured in
- */
-#if 1
-#define LIBXML_DEBUG_ENABLED
-#endif
-
-/**
- * DEBUG_MEMORY_LOCATION:
- *
- * Whether the memory debugging is configured in
- */
-#if 0
-#define DEBUG_MEMORY_LOCATION
-#endif
-
-/**
- * LIBXML_DEBUG_RUNTIME:
- *
- * Whether the runtime debugging is configured in
- */
-#if 0
-#define LIBXML_DEBUG_RUNTIME
-#endif
-
-/**
- * LIBXML_UNICODE_ENABLED:
- *
- * Whether the Unicode related interfaces are compiled in
- */
-#if 1
-#define LIBXML_UNICODE_ENABLED
-#endif
-
-/**
- * LIBXML_REGEXP_ENABLED:
- *
- * Whether the regular expressions interfaces are compiled in
- */
-#if 1
-#define LIBXML_REGEXP_ENABLED
-#endif
-
-/**
- * LIBXML_AUTOMATA_ENABLED:
- *
- * Whether the automata interfaces are compiled in
- */
-#if 1
-#define LIBXML_AUTOMATA_ENABLED
-#endif
-
-/**
- * LIBXML_EXPR_ENABLED:
- *
- * Whether the formal expressions interfaces are compiled in
- */
-#if 1
-#define LIBXML_EXPR_ENABLED
-#endif
-
-/**
- * LIBXML_SCHEMAS_ENABLED:
- *
- * Whether the Schemas validation interfaces are compiled in
- */
-#if 1
-#define LIBXML_SCHEMAS_ENABLED
-#endif
-
-/**
- * LIBXML_SCHEMATRON_ENABLED:
- *
- * Whether the Schematron validation interfaces are compiled in
- */
-#if 1
-#define LIBXML_SCHEMATRON_ENABLED
-#endif
-
-/**
- * LIBXML_MODULES_ENABLED:
- *
- * Whether the module interfaces are compiled in
- */
-#if 1
-#define LIBXML_MODULES_ENABLED
-/**
- * LIBXML_MODULE_EXTENSION:
- *
- * the string suffix used by dynamic modules (usually shared libraries)
- */
-#define LIBXML_MODULE_EXTENSION ".so"
-#endif
-
-/**
- * LIBXML_ZLIB_ENABLED:
- *
- * Whether the Zlib support is compiled in
- */
-#if 1
-#define LIBXML_ZLIB_ENABLED
-#endif
-
-/**
- * LIBXML_LZMA_ENABLED:
- *
- * Whether the Lzma support is compiled in
- */
-#if 0
-#define LIBXML_LZMA_ENABLED
-#endif
-
-#ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include
-#endif
-
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-
-#ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED __attribute__((unused))
-#endif
-
-/**
- * LIBXML_ATTR_ALLOC_SIZE:
- *
- * Macro used to indicate to GCC this is an allocator function
- */
-
-#ifndef LIBXML_ATTR_ALLOC_SIZE
-# if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
-# define LIBXML_ATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
-# else
-# define LIBXML_ATTR_ALLOC_SIZE(x)
-# endif
-#else
-# define LIBXML_ATTR_ALLOC_SIZE(x)
-#endif
-
-/**
- * LIBXML_ATTR_FORMAT:
- *
- * Macro used to indicate to GCC the parameter are printf like
- */
-
-#ifndef LIBXML_ATTR_FORMAT
-# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
-# define LIBXML_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args)))
-# else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-# endif
-#else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-#endif
-
-#else /* ! __GNUC__ */
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-#define ATTRIBUTE_UNUSED
-/**
- * LIBXML_ATTR_ALLOC_SIZE:
- *
- * Macro used to indicate to GCC this is an allocator function
- */
-#define LIBXML_ATTR_ALLOC_SIZE(x)
-/**
- * LIBXML_ATTR_FORMAT:
- *
- * Macro used to indicate to GCC the parameter are printf like
- */
-#define LIBXML_ATTR_FORMAT(fmt,args)
-#endif /* __GNUC__ */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif
-
-
diff --git a/submodules/externals/build/msisac/Android.mk b/submodules/externals/build/msisac/Android.mk
deleted file mode 100755
index 5e978ec38..000000000
--- a/submodules/externals/build/msisac/Android.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libmsisac-linphone
-LOCAL_MODULE_FILENAME := libmsisac-linphone-$(TARGET_ARCH)
-LOCAL_SRC_FILES := $(TARGET_ARCH)/libmsisac-linphone-$(TARGET_ARCH).so
-
-include $(PREBUILT_SHARED_LIBRARY)
diff --git a/submodules/externals/build/opencore-amr/Android.mk b/submodules/externals/build/opencore-amr/Android.mk
deleted file mode 100644
index 461b7834f..000000000
--- a/submodules/externals/build/opencore-amr/Android.mk
+++ /dev/null
@@ -1,285 +0,0 @@
-
-
-LOCAL_PATH:= $(call my-dir)/../../opencore-amr
-
-BUILD_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libopencoreamr
-
-_ADD_COMMON=0
-ifneq ($(BUILD_AMRWB),0)
-_ADD_COMMON=1
-endif
-ifneq ($(BUILD_AMRNB),0)
-_ADD_COMMON=1
-endif
-
-ifeq ($(BUILD_AMRNB),light)
-LOCAL_SRC_FILES += \
- amrnb/wrapper.cpp
-
-LOCAL_SRC_FILES += \
- ../build/opencore-amr/stubs.cpp
-
-#for including config.h:
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/include \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/include \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/common/dec/include \
- $(LOCAL_PATH)/amrnb
-
-#in this mode we try to dynamically link against the opencore-amr provided by android
-LOCAL_CFLAGS += -include ../build/opencore-amr/stubs.h -fPIC
-endif
-
-ifeq ($(BUILD_AMRNB),full)
-#in the other mode (full) we build our own opencore-amr.
-
-#common files
-LOCAL_SRC_FILES += \
- amrnb/wrapper.cpp
-
-LOCAL_SRC_FILES += \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/add.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/az_lsp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/bitno_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/bitreorder_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/c2_9pf_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/div_s.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gains_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gc_pred.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/get_const_tbls.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gmed_n.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/grid_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/gray_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/int_lpc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/inv_sqrt.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/inv_sqrt_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/l_shr_r.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/log2.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/log2_norm.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/log2_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsfwt.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_az.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_lsf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_lsf_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/lsp_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/mult_r.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/norm_l.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/norm_s.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/overflow_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/ph_disp_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/pred_lt.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_5.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_5_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/qua_gain_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/reorder.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/residu.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/round.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/shr.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/shr_r.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l_tbl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/sub.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/syn_filt.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/weight_a.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/common/src/window_tab.cpp
-
-#encoder files
-
-LOCAL_SRC_FILES += \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/amrencode.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/autocorr.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c1035pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c2_11pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c2_9pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c3_14pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c4_17pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/c8_31pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/calc_cor.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/calc_en.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cbsearch.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cl_ltp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cod_amr.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/convolve.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cor_h.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cor_h_x.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/cor_h_x2.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/corrwght_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/div_32.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/dtx_enc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/enc_lag3.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/enc_lag6.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/enc_output_format_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ets_to_if2.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ets_to_wmf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/g_adapt.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/g_code.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/g_pitch.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/gain_q.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/hp_max.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/inter_36.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/inter_36_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_abs.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_comp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_extract.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/l_negate.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/lag_wind.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/lag_wind_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/levinson.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/lpc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ol_ltp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/p_ol_wgh.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pitch_fr.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pitch_ol.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pre_big.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/pre_proc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/prm2bits.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/q_gain_c.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/q_gain_p.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/qgain475.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/qgain795.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/qua_gain.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/s10_8pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/set_sign.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/sid_sync.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/sp_enc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/spreproc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/spstproc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/ton_stab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src/vad1.cpp
-
-#decoder files
-# opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/decoder_gsm_amr.cpp \
-
-
-LOCAL_SRC_FILES += \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/a_refl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/agc.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/amrdecode.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/b_cn_cod.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/bgnscd.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/c_g_aver.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d1035pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d2_11pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d2_9pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d3_14pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d4_17pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d8_31pf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_c.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_p.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_3.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_5.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_amr.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_gain.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_input_format_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_lag3.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_lag6.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dtx_dec.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/ec_gains.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/ex_ctrl.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/if2_to_ets.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/int_lsf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/lsp_avg.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/ph_disp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/post_pro.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/preemph.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/pstfilt.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/qgain475_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/sp_dec.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src/wmf_to_ets.cpp
-
-#for including config.h:
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/include \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/include \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/dec/src \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/enc/src \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/common/dec/include \
- $(LOCAL_PATH)/amrnb
-endif
-
-ifneq ($(BUILD_AMRWB),0)
-LOCAL_SRC_FILES += \
- amrwb/wrapper.cpp
-
-LOCAL_SRC_FILES += \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/agc2_amr_wb.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/band_pass_6k_7k.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_acelp_2p_in_64.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_acelp_4p_in_64.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_alg_codebook.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dec_gain2_amr_wb.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/deemphasis_32.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/dtx_decoder_amr_wb.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/get_amr_wb_bits.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/highpass_400hz_at_12k8.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/highpass_50hz_at_12k8.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/homing_amr_wb_dec.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/interpolate_isp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/isf_extrapolation.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/isp_az.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/isp_isf.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/lagconceal.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/low_pass_filt_7k.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/median5.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/mime_io.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/noise_gen_amrwb.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/oversamp_12k8_to_16k.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/phase_dispersion.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pit_shrp.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pred_lt4.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/preemph_amrwb_dec.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwb_math_op.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/q_gain2_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qisf_ns.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qisf_ns_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qpisf_2s.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/qpisf_2s_tab.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/scale_signal.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/synthesis_amr_wb.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/voice_factor.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/wb_syn_filt.cpp \
- opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/weight_amrwb_lpc.cpp
-
-#decoder files
-# opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/decoder_amr_wb.cpp \
-
-#for including config.h:
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/include \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src \
- $(LOCAL_PATH)/opencore/codecs_v2/audio/gsm_amr/common/dec/include \
- $(LOCAL_PATH)/amrwb
-endif
-
-
-LOCAL_ARM_MODE := arm
-
-#Common
-ifeq ($(_ADD_COMMON),1)
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/oscl
-endif
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w -fPIC
-
-include $(BUILD_STATIC_LIBRARY)
-
-
diff --git a/submodules/externals/build/opencore-amr/stubs.cpp b/submodules/externals/build/opencore-amr/stubs.cpp
deleted file mode 100644
index b44afd085..000000000
--- a/submodules/externals/build/opencore-amr/stubs.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-
-#define AMRNB_WRAPPER_INTERNAL
-#include
-#include
-#include
-#include "interf_dec.h"
-#include "interf_enc.h"
-
-#include
-
-static Word16 (*sym_AMRDecode)(
- void *state_data,
- enum Frame_Type_3GPP frame_type,
- UWord8 *speech_bits_ptr,
- Word16 *raw_pcm_buffer,
- bitstream_format input_format
-);
-
-static void (*sym_GSMDecodeFrameExit)(void **state_data);
-
-static Word16 (*sym_GSMInitDecode)(void **state_data, Word8 *id);
-
-static Word16 (*sym_AMREncodeInit)(
- void **pEncStructure,
- void **pSidSyncStructure,
- Flag dtx_enable);
-
-static void (*sym_AMREncodeExit)(
- void **pEncStructure,
- void **pSidSyncStructure);
-
-static Word16 (*sym_AMREncode)(
- void *pEncState,
- void *pSidSyncState,
- enum Mode mode,
- Word16 *pEncInput,
- UWord8 *pEncOutput,
- enum Frame_Type_3GPP *p3gpp_frame_type,
- Word16 output_format);
-
-extern "C"{
-
-Word16 AMREncodeInit(
- void **pEncStructure,
- void **pSidSyncStructure,
- Flag dtx_enable){
- return sym_AMREncodeInit(pEncStructure,pSidSyncStructure,dtx_enable);
-}
-
-void AMREncodeExit(
- void **pEncStructure,
- void **pSidSyncStructure){
- return sym_AMREncodeExit(pEncStructure,pSidSyncStructure);
-}
-
-Word16 AMREncode(
- void *pEncState,
- void *pSidSyncState,
- enum Mode mode,
- Word16 *pEncInput,
- UWord8 *pEncOutput,
- enum Frame_Type_3GPP *p3gpp_frame_type,
- Word16 output_format){
- int err=sym_AMREncode(pEncState,pSidSyncState,mode,pEncInput,pEncOutput,p3gpp_frame_type,AMR_TX_WMF /*AMR_TX_IETF*/);
- /*IETF format not supported by versions of opencore amr up to android 2.3, thus we ask WMF and fix after*/
- /*both formats seems identical except the first byte.*/
- pEncOutput[0]=(*p3gpp_frame_type)<<3;
- return err;
-}
-
-Word16 AMRDecode(
- void *state_data,
- enum Frame_Type_3GPP frame_type,
- UWord8 *speech_bits_ptr,
- Word16 *raw_pcm_buffer,
- bitstream_format input_format
-){
- return sym_AMRDecode(state_data,frame_type,speech_bits_ptr,raw_pcm_buffer,input_format);
-}
-
-void GSMDecodeFrameExit(void **state_data){
- return sym_GSMDecodeFrameExit(state_data);
-}
-
-Word16 GSMInitDecode(void **state_data, Word8 *id){
- return sym_GSMInitDecode(state_data,id);
-}
-
-#define LOAD_SYMBOL(symbol) \
-{ \
- *((void**)&sym_##symbol)=dlsym(handle,#symbol); \
- if (sym_##symbol==NULL) { \
- *missing=#symbol; \
- return -1; \
- } \
-}
-
-int opencore_amr_wrapper_init(const char **missing){
- void *handle=dlopen("libstagefright.so",RTLD_GLOBAL);
- if (handle==NULL){
- *missing="libstagefright.so";
- return -1;
- }
- LOAD_SYMBOL(AMRDecode);
- LOAD_SYMBOL(GSMDecodeFrameExit)
- LOAD_SYMBOL(GSMInitDecode);
- LOAD_SYMBOL(AMREncodeInit);
- LOAD_SYMBOL(AMREncodeExit);
- LOAD_SYMBOL(AMREncode);
- return 0;
-}
-
-
-}//end of extern "C"
-
-
diff --git a/submodules/externals/build/opencore-amr/stubs.h b/submodules/externals/build/opencore-amr/stubs.h
deleted file mode 100644
index 8f2ef0802..000000000
--- a/submodules/externals/build/opencore-amr/stubs.h
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-#define GSMDecodeFrameExit my_GSMDecodeFrameExit
-#define GSMInitDecode my_GSMInitDecode
-#define AMRDecode my_AMRDecode
-#define AMREncodeInit my_AMREncodeInit
-#define AMREncodeExit my_AMREncodeExit
-#define AMREncode my_AMREncode
-
-
diff --git a/submodules/externals/build/openh264/Android.mk b/submodules/externals/build/openh264/Android.mk
deleted file mode 100644
index 003843eb2..000000000
--- a/submodules/externals/build/openh264/Android.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libopenh264
-LOCAL_SRC_FILES := $(TARGET_ARCH)/libopenh264.a
-
-include $(PREBUILT_STATIC_LIBRARY)
diff --git a/submodules/externals/build/opus/Android.mk b/submodules/externals/build/opus/Android.mk
deleted file mode 100644
index b1033fa8e..000000000
--- a/submodules/externals/build/opus/Android.mk
+++ /dev/null
@@ -1,117 +0,0 @@
-LOCAL_PATH:= $(call my-dir)/../../opus
-
-BUILD_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libopus
-
-
-LOCAL_SRC_FILES += \
- celt/bands.c celt/celt.c celt/cwrs.c \
- celt/entcode.c celt/entdec.c celt/entenc.c celt/kiss_fft.c \
- celt/laplace.c celt/mathops.c celt/mdct.c celt/modes.c \
- celt/pitch.c celt/celt_lpc.c celt/quant_bands.c celt/rate.c \
- celt/vq.c silk/CNG.c silk/code_signs.c silk/init_decoder.c \
- celt/celt_encoder.c celt/celt_decoder.c \
- silk/decode_core.c silk/decode_frame.c \
- silk/decode_parameters.c silk/decode_indices.c \
- silk/decode_pulses.c silk/decoder_set_fs.c silk/dec_API.c \
- silk/enc_API.c silk/encode_indices.c silk/encode_pulses.c \
- silk/gain_quant.c silk/interpolate.c silk/LP_variable_cutoff.c \
- silk/NLSF_decode.c silk/NSQ.c silk/NSQ_del_dec.c silk/PLC.c \
- silk/shell_coder.c silk/tables_gain.c silk/tables_LTP.c \
- silk/tables_NLSF_CB_NB_MB.c silk/tables_NLSF_CB_WB.c \
- silk/tables_other.c silk/tables_pitch_lag.c \
- silk/tables_pulses_per_block.c silk/VAD.c \
- silk/control_audio_bandwidth.c silk/quant_LTP_gains.c \
- silk/VQ_WMat_EC.c silk/HP_variable_cutoff.c silk/NLSF_encode.c \
- silk/NLSF_VQ.c silk/NLSF_unpack.c silk/NLSF_del_dec_quant.c \
- silk/process_NLSFs.c silk/stereo_LR_to_MS.c \
- silk/stereo_MS_to_LR.c silk/check_control_input.c \
- silk/control_SNR.c silk/init_encoder.c silk/control_codec.c \
- silk/A2NLSF.c silk/ana_filt_bank_1.c silk/biquad_alt.c \
- silk/bwexpander_32.c silk/bwexpander.c silk/debug.c \
- silk/decode_pitch.c silk/inner_prod_aligned.c silk/lin2log.c \
- silk/log2lin.c silk/LPC_analysis_filter.c \
- silk/LPC_inv_pred_gain.c silk/table_LSF_cos.c silk/NLSF2A.c \
- silk/NLSF_stabilize.c silk/NLSF_VQ_weights_laroia.c \
- silk/pitch_est_tables.c silk/resampler.c \
- silk/resampler_down2_3.c silk/resampler_down2.c \
- silk/resampler_private_AR2.c silk/resampler_private_down_FIR.c \
- silk/resampler_private_IIR_FIR.c \
- silk/resampler_private_up2_HQ.c silk/resampler_rom.c \
- silk/sigm_Q15.c silk/sort.c silk/sum_sqr_shift.c \
- silk/stereo_decode_pred.c silk/stereo_encode_pred.c \
- silk/stereo_find_predictor.c silk/stereo_quant_pred.c \
- silk/fixed/LTP_analysis_filter_FIX.c \
- silk/fixed/LTP_scale_ctrl_FIX.c silk/fixed/corrMatrix_FIX.c \
- silk/fixed/encode_frame_FIX.c silk/fixed/find_LPC_FIX.c \
- silk/fixed/find_LTP_FIX.c silk/fixed/find_pitch_lags_FIX.c \
- silk/fixed/find_pred_coefs_FIX.c \
- silk/fixed/noise_shape_analysis_FIX.c \
- silk/fixed/prefilter_FIX.c silk/fixed/process_gains_FIX.c \
- silk/fixed/regularize_correlations_FIX.c \
- silk/fixed/residual_energy16_FIX.c \
- silk/fixed/residual_energy_FIX.c silk/fixed/solve_LS_FIX.c \
- silk/fixed/warped_autocorrelation_FIX.c \
- silk/fixed/apply_sine_window_FIX.c silk/fixed/autocorr_FIX.c \
- silk/fixed/burg_modified_FIX.c silk/fixed/k2a_FIX.c \
- silk/fixed/k2a_Q16_FIX.c silk/fixed/pitch_analysis_core_FIX.c \
- silk/fixed/vector_ops_FIX.c silk/fixed/schur64_FIX.c \
- silk/fixed/schur_FIX.c silk/float/apply_sine_window_FLP.c \
- silk/float/corrMatrix_FLP.c silk/float/encode_frame_FLP.c \
- silk/float/find_LPC_FLP.c silk/float/find_LTP_FLP.c \
- silk/float/find_pitch_lags_FLP.c \
- silk/float/find_pred_coefs_FLP.c \
- silk/float/LPC_analysis_filter_FLP.c \
- silk/float/LTP_analysis_filter_FLP.c \
- silk/float/LTP_scale_ctrl_FLP.c \
- silk/float/noise_shape_analysis_FLP.c \
- silk/float/prefilter_FLP.c silk/float/process_gains_FLP.c \
- silk/float/regularize_correlations_FLP.c \
- silk/float/residual_energy_FLP.c silk/float/solve_LS_FLP.c \
- silk/float/warped_autocorrelation_FLP.c \
- silk/float/wrappers_FLP.c silk/float/autocorrelation_FLP.c \
- silk/float/burg_modified_FLP.c silk/float/bwexpander_FLP.c \
- silk/float/energy_FLP.c silk/float/inner_product_FLP.c \
- silk/float/k2a_FLP.c silk/float/levinsondurbin_FLP.c \
- silk/float/LPC_inv_pred_gain_FLP.c \
- silk/float/pitch_analysis_core_FLP.c \
- silk/float/scale_copy_vector_FLP.c \
- silk/float/scale_vector_FLP.c silk/float/schur_FLP.c \
- silk/float/sort_FLP.c src/opus.c src/opus_decoder.c \
- src/opus_encoder.c src/opus_multistream.c src/repacketizer.c \
- src/analysis.c src/mlp.c src/mlp_data.c
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/celt \
- $(LOCAL_PATH)/silk \
- $(LOCAL_PATH)/silk/float
-
-LOCAL_CFLAGS += -include ../build/opus/config.h
-
-ifeq ($(TARGET_ARCH),arm)
- LOCAL_SRC_FILES += celt/arm/arm_celt_map.c \
- celt/arm/armcpu.c
-
-
-# celt/arm/celt_ne10_fft.c
-# celt/arm/celt_ne10_mdct.c
-
- ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
- LOCAL_CFLAGS += -DOPUS_ARM_MAY_HAVE_NEON=1 -DOPUS_ARM_MAY_HAVE_NEON_INTR=1
- # These two files were generated by hand using asm2gnu.pl script of opus.
- LOCAL_SRC_FILES += ../build/opus/celt_pitch_xcorr_arm.S.neon \
- celt/arm/celt_neon_intr.c.neon
- endif
-endif
-
-
-LOCAL_ARM_MODE := arm
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/submodules/externals/build/opus/armopts-gnu.S b/submodules/externals/build/opus/armopts-gnu.S
deleted file mode 100644
index a42ce0831..000000000
--- a/submodules/externals/build/opus/armopts-gnu.S
+++ /dev/null
@@ -1,38 +0,0 @@
- .syntax unified
-/* Copyright (C) 2013 Mozilla Corporation */
-/*
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES@ LOSS OF USE, @ DATA, OR
- PROFITS@ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN .if ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-@ Set the following to 1 if we have EDSP instructions
-@ (LDRD/STRD, etc., ARMv5E and later).
- .set OPUS_ARM_MAY_HAVE_EDSP, 0
-
-@ Set the following to 1 if we have ARMv6 media instructions.
- .set OPUS_ARM_MAY_HAVE_MEDIA, 0
-
-@ Set the following to 1 if we have NEON (some ARMv7)
- .set OPUS_ARM_MAY_HAVE_NEON, 1
-
-@ END:
diff --git a/submodules/externals/build/opus/celt_pitch_xcorr_arm.S b/submodules/externals/build/opus/celt_pitch_xcorr_arm.S
deleted file mode 100644
index 54b4cbbe3..000000000
--- a/submodules/externals/build/opus/celt_pitch_xcorr_arm.S
+++ /dev/null
@@ -1,551 +0,0 @@
- .syntax unified
-@ Copyright (c) 2007-2008 CSIRO
-@ Copyright (c) 2007-2009 Xiph.Org Foundation
-@ Copyright (c) 2013 Parrot
-@ Written by Aurélien Zanelli
-@
-@ Redistribution and use in source and binary forms, with or without
-@ modification, are permitted provided that the following conditions
-@ are met:
-@
-@ - Redistributions of source code must retain the above copyright
-@ notice, this list of conditions and the following disclaimer.
-@
-@ - Redistributions in binary form must reproduce the above copyright
-@ notice, this list of conditions and the following disclaimer in the
-@ documentation and/or other materials provided with the distribution.
-@
-@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-@ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-@ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-@ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-@ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-@ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-@ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-@ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- .text; .p2align 2; .arch armv7-a
- .fpu neon
- .object_arch armv4t
-
- .include "../build/opus/armopts-gnu.S"
-
- .if OPUS_ARM_MAY_HAVE_EDSP
- .global celt_pitch_xcorr_edsp
- .endif
-
- .if OPUS_ARM_MAY_HAVE_NEON
- .global celt_pitch_xcorr_neon
- .endif
-
- .if OPUS_ARM_MAY_HAVE_NEON
-
-@ Compute sum[k]=sum(x[j]*y[j+k],j=0...len-1), k=0...3
-; xcorr_kernel_neon: @ PROC
-xcorr_kernel_neon_start:
- @ input:
- @ r3 = int len
- @ r4 = opus_val16 *x
- @ r5 = opus_val16 *y
- @ q0 = opus_val32 sum[4]
- @ output:
- @ q0 = opus_val32 sum[4]
- @ preserved: r0-r3, r6-r11, d2, q4-q7, q9-q15
- @ internal usage:
- @ r12 = int j
- @ d3 = y_3|y_2|y_1|y_0
- @ q2 = y_B|y_A|y_9|y_8|y_7|y_6|y_5|y_4
- @ q3 = x_7|x_6|x_5|x_4|x_3|x_2|x_1|x_0
- @ q8 = scratch
- @
- @ Load y[0...3]
- @ This requires len>0 to always be valid (which we assert in the C code).
- VLD1.16 {d5}, [r5]!
- SUBS r12, r3, #8
- BLE xcorr_kernel_neon_process4
-@ Process 8 samples at a time.
-@ This loop loads one y value more than we actually need. Therefore we have to
-@ stop as soon as there are 8 or fewer samples left (instead of 7), to avoid
-@ reading past the end of the array.
-xcorr_kernel_neon_process8:
- @ This loop has 19 total instructions (10 cycles to issue, minimum), with
- @ - 2 cycles of ARM insrtuctions,
- @ - 10 cycles of load/store/byte permute instructions, and
- @ - 9 cycles of data processing instructions.
- @ On a Cortex A8, we dual-issue the maximum amount (9 cycles) between the
- @ latter two categories, meaning the whole loop should run in 10 cycles per
- @ iteration, barring cache misses.
- @
- @ Load x[0...7]
- VLD1.16 {d6, d7}, [r4]!
- @ Unlike VMOV, VAND is a data processsing instruction (and doesn't get
- @ assembled to VMOV, like VORR would), so it dual-issues with the prior VLD1.
- VAND d3, d5, d5
- SUBS r12, r12, #8
- @ Load y[4...11]
- VLD1.16 {d4, d5}, [r5]!
- VMLAL.S16 q0, d3, d6[0]
- VEXT.16 d16, d3, d4, #1
- VMLAL.S16 q0, d4, d7[0]
- VEXT.16 d17, d4, d5, #1
- VMLAL.S16 q0, d16, d6[1]
- VEXT.16 d16, d3, d4, #2
- VMLAL.S16 q0, d17, d7[1]
- VEXT.16 d17, d4, d5, #2
- VMLAL.S16 q0, d16, d6[2]
- VEXT.16 d16, d3, d4, #3
- VMLAL.S16 q0, d17, d7[2]
- VEXT.16 d17, d4, d5, #3
- VMLAL.S16 q0, d16, d6[3]
- VMLAL.S16 q0, d17, d7[3]
- BGT xcorr_kernel_neon_process8
-@ Process 4 samples here if we have > 4 left (still reading one extra y value).
-xcorr_kernel_neon_process4:
- ADDS r12, r12, #4
- BLE xcorr_kernel_neon_process2
- @ Load x[0...3]
- VLD1.16 d6, [r4]!
- @ Use VAND since it's a data processing instruction again.
- VAND d4, d5, d5
- SUB r12, r12, #4
- @ Load y[4...7]
- VLD1.16 d5, [r5]!
- VMLAL.S16 q0, d4, d6[0]
- VEXT.16 d16, d4, d5, #1
- VMLAL.S16 q0, d16, d6[1]
- VEXT.16 d16, d4, d5, #2
- VMLAL.S16 q0, d16, d6[2]
- VEXT.16 d16, d4, d5, #3
- VMLAL.S16 q0, d16, d6[3]
-@ Process 2 samples here if we have > 2 left (still reading one extra y value).
-xcorr_kernel_neon_process2:
- ADDS r12, r12, #2
- BLE xcorr_kernel_neon_process1
- @ Load x[0...1]
- VLD2.16 {d6[],d7[]}, [r4]!
- @ Use VAND since it's a data processing instruction again.
- VAND d4, d5, d5
- SUB r12, r12, #2
- @ Load y[4...5]
- VLD1.32 {d5[]}, [r5]!
- VMLAL.S16 q0, d4, d6
- VEXT.16 d16, d4, d5, #1
- @ Replace bottom copy of {y5,y4} in d5 with {y3,y2} from d4, using VSRI
- @ instead of VEXT, since it's a data-processing instruction.
- VSRI.64 d5, d4, #32
- VMLAL.S16 q0, d16, d7
-@ Process 1 sample using the extra y value we loaded above.
-xcorr_kernel_neon_process1:
- @ Load next *x
- VLD1.16 {d6[]}, [r4]!
- ADDS r12, r12, #1
- @ y[0...3] are left in d5 from prior iteration(s) (if any)
- VMLAL.S16 q0, d5, d6
- MOVLE pc, lr
-@ Now process 1 last sample, not reading ahead.
- @ Load last *y
- VLD1.16 {d4[]}, [r5]!
- VSRI.64 d4, d5, #16
- @ Load last *x
- VLD1.16 {d6[]}, [r4]!
- VMLAL.S16 q0, d4, d6
- MOV pc, lr
- .size xcorr_kernel_neon, .-xcorr_kernel_neon @ ENDP
-
-@ opus_val32 celt_pitch_xcorr_neon(opus_val16 *_x, opus_val16 *_y,
-@ opus_val32 *xcorr, int len, int max_pitch)
-; celt_pitch_xcorr_neon: @ PROC
- @ input:
- @ r0 = opus_val16 *_x
- @ r1 = opus_val16 *_y
- @ r2 = opus_val32 *xcorr
- @ r3 = int len
- @ output:
- @ r0 = int maxcorr
- @ internal usage:
- @ r4 = opus_val16 *x (for xcorr_kernel_neon())
- @ r5 = opus_val16 *y (for xcorr_kernel_neon())
- @ r6 = int max_pitch
- @ r12 = int j
- @ q15 = int maxcorr[4] (q15 is not used by xcorr_kernel_neon())
- STMFD sp!, {r4-r6, lr}
- LDR r6, [sp, #16]
- VMOV.S32 q15, #1
- @ if (max_pitch < 4) goto celt_pitch_xcorr_neon_process4_done
- SUBS r6, r6, #4
- BLT celt_pitch_xcorr_neon_process4_done
-celt_pitch_xcorr_neon_process4:
- @ xcorr_kernel_neon parameters:
- @ r3 = len, r4 = _x, r5 = _y, q0 = {0, 0, 0, 0}
- MOV r4, r0
- MOV r5, r1
- VEOR q0, q0, q0
- @ xcorr_kernel_neon only modifies r4, r5, r12, and q0...q3.
- @ So we don't save/restore any other registers.
- BL xcorr_kernel_neon_start
- SUBS r6, r6, #4
- VST1.32 {q0}, [r2]!
- @ _y += 4
- ADD r1, r1, #8
- VMAX.S32 q15, q15, q0
- @ if (max_pitch < 4) goto celt_pitch_xcorr_neon_process4_done
- BGE celt_pitch_xcorr_neon_process4
-@ We have less than 4 sums left to compute.
-celt_pitch_xcorr_neon_process4_done:
- ADDS r6, r6, #4
- @ Reduce maxcorr to a single value
- VMAX.S32 d30, d30, d31
- VPMAX.S32 d30, d30, d30
- @ if (max_pitch <= 0) goto celt_pitch_xcorr_neon_done
- BLE celt_pitch_xcorr_neon_done
-@ Now compute each remaining sum one at a time.
-celt_pitch_xcorr_neon_process_remaining:
- MOV r4, r0
- MOV r5, r1
- VMOV.I32 q0, #0
- SUBS r12, r3, #8
- BLT celt_pitch_xcorr_neon_process_remaining4
-@ Sum terms 8 at a time.
-celt_pitch_xcorr_neon_process_remaining_loop8:
- @ Load x[0...7]
- VLD1.16 {q1}, [r4]!
- @ Load y[0...7]
- VLD1.16 {q2}, [r5]!
- SUBS r12, r12, #8
- VMLAL.S16 q0, d4, d2
- VMLAL.S16 q0, d5, d3
- BGE celt_pitch_xcorr_neon_process_remaining_loop8
-@ Sum terms 4 at a time.
-celt_pitch_xcorr_neon_process_remaining4:
- ADDS r12, r12, #4
- BLT celt_pitch_xcorr_neon_process_remaining4_done
- @ Load x[0...3]
- VLD1.16 {d2}, [r4]!
- @ Load y[0...3]
- VLD1.16 {d3}, [r5]!
- SUB r12, r12, #4
- VMLAL.S16 q0, d3, d2
-celt_pitch_xcorr_neon_process_remaining4_done:
- @ Reduce the sum to a single value.
- VADD.S32 d0, d0, d1
- VPADDL.S32 d0, d0
- ADDS r12, r12, #4
- BLE celt_pitch_xcorr_neon_process_remaining_loop_done
-@ Sum terms 1 at a time.
-celt_pitch_xcorr_neon_process_remaining_loop1:
- VLD1.16 {d2[]}, [r4]!
- VLD1.16 {d3[]}, [r5]!
- SUBS r12, r12, #1
- VMLAL.S16 q0, d2, d3
- BGT celt_pitch_xcorr_neon_process_remaining_loop1
-celt_pitch_xcorr_neon_process_remaining_loop_done:
- VST1.32 {d0[0]}, [r2]!
- VMAX.S32 d30, d30, d0
- SUBS r6, r6, #1
- @ _y++
- ADD r1, r1, #2
- @ if (--max_pitch > 0) goto celt_pitch_xcorr_neon_process_remaining
- BGT celt_pitch_xcorr_neon_process_remaining
-celt_pitch_xcorr_neon_done:
- VMOV.32 r0, d30[0]
- LDMFD sp!, {r4-r6, pc}
- .size celt_pitch_xcorr_neon, .-celt_pitch_xcorr_neon @ ENDP
-
- .endif
-
- .if OPUS_ARM_MAY_HAVE_EDSP
-
-@ This will get used on ARMv7 devices without NEON, so it has been optimized
-@ to take advantage of dual-issuing where possible.
-; xcorr_kernel_edsp: @ PROC
-xcorr_kernel_edsp_start:
- @ input:
- @ r3 = int len
- @ r4 = opus_val16 *_x (must be 32-bit aligned)
- @ r5 = opus_val16 *_y (must be 32-bit aligned)
- @ r6...r9 = opus_val32 sum[4]
- @ output:
- @ r6...r9 = opus_val32 sum[4]
- @ preserved: r0-r5
- @ internal usage
- @ r2 = int j
- @ r12,r14 = opus_val16 x[4]
- @ r10,r11 = opus_val16 y[4]
- STMFD sp!, {r2,r4,r5,lr}
- LDR r10, [r5], #4 @ Load y[0...1]
- SUBS r2, r3, #4 @ j = len-4
- LDR r11, [r5], #4 @ Load y[2...3]
- BLE xcorr_kernel_edsp_process4_done
- LDR r12, [r4], #4 @ Load x[0...1]
- @ Stall
-xcorr_kernel_edsp_process4:
- @ The multiplies must issue from pipeline 0, and can't dual-issue with each
- @ other. Every other instruction here dual-issues with a multiply, and is
- @ thus "free". There should be no stalls in the body of the loop.
- SMLABB r6, r12, r10, r6 @ sum[0] = MAC16_16(sum[0],x_0,y_0)
- LDR r14, [r4], #4 @ Load x[2...3]
- SMLABT r7, r12, r10, r7 @ sum[1] = MAC16_16(sum[1],x_0,y_1)
- SUBS r2, r2, #4 @ j-=4
- SMLABB r8, r12, r11, r8 @ sum[2] = MAC16_16(sum[2],x_0,y_2)
- SMLABT r9, r12, r11, r9 @ sum[3] = MAC16_16(sum[3],x_0,y_3)
- SMLATT r6, r12, r10, r6 @ sum[0] = MAC16_16(sum[0],x_1,y_1)
- LDR r10, [r5], #4 @ Load y[4...5]
- SMLATB r7, r12, r11, r7 @ sum[1] = MAC16_16(sum[1],x_1,y_2)
- SMLATT r8, r12, r11, r8 @ sum[2] = MAC16_16(sum[2],x_1,y_3)
- SMLATB r9, r12, r10, r9 @ sum[3] = MAC16_16(sum[3],x_1,y_4)
- LDRGT r12, [r4], #4 @ Load x[0...1]
- SMLABB r6, r14, r11, r6 @ sum[0] = MAC16_16(sum[0],x_2,y_2)
- SMLABT r7, r14, r11, r7 @ sum[1] = MAC16_16(sum[1],x_2,y_3)
- SMLABB r8, r14, r10, r8 @ sum[2] = MAC16_16(sum[2],x_2,y_4)
- SMLABT r9, r14, r10, r9 @ sum[3] = MAC16_16(sum[3],x_2,y_5)
- SMLATT r6, r14, r11, r6 @ sum[0] = MAC16_16(sum[0],x_3,y_3)
- LDR r11, [r5], #4 @ Load y[6...7]
- SMLATB r7, r14, r10, r7 @ sum[1] = MAC16_16(sum[1],x_3,y_4)
- SMLATT r8, r14, r10, r8 @ sum[2] = MAC16_16(sum[2],x_3,y_5)
- SMLATB r9, r14, r11, r9 @ sum[3] = MAC16_16(sum[3],x_3,y_6)
- BGT xcorr_kernel_edsp_process4
-xcorr_kernel_edsp_process4_done:
- ADDS r2, r2, #4
- BLE xcorr_kernel_edsp_done
- LDRH r12, [r4], #2 @ r12 = *x++
- SUBS r2, r2, #1 @ j--
- @ Stall
- SMLABB r6, r12, r10, r6 @ sum[0] = MAC16_16(sum[0],x,y_0)
- LDRHGT r14, [r4], #2 @ r14 = *x++
- SMLABT r7, r12, r10, r7 @ sum[1] = MAC16_16(sum[1],x,y_1)
- SMLABB r8, r12, r11, r8 @ sum[2] = MAC16_16(sum[2],x,y_2)
- SMLABT r9, r12, r11, r9 @ sum[3] = MAC16_16(sum[3],x,y_3)
- BLE xcorr_kernel_edsp_done
- SMLABT r6, r14, r10, r6 @ sum[0] = MAC16_16(sum[0],x,y_1)
- SUBS r2, r2, #1 @ j--
- SMLABB r7, r14, r11, r7 @ sum[1] = MAC16_16(sum[1],x,y_2)
- LDRH r10, [r5], #2 @ r10 = y_4 = *y++
- SMLABT r8, r14, r11, r8 @ sum[2] = MAC16_16(sum[2],x,y_3)
- LDRHGT r12, [r4], #2 @ r12 = *x++
- SMLABB r9, r14, r10, r9 @ sum[3] = MAC16_16(sum[3],x,y_4)
- BLE xcorr_kernel_edsp_done
- SMLABB r6, r12, r11, r6 @ sum[0] = MAC16_16(sum[0],tmp,y_2)
- CMP r2, #1 @ j--
- SMLABT r7, r12, r11, r7 @ sum[1] = MAC16_16(sum[1],tmp,y_3)
- LDRH r2, [r5], #2 @ r2 = y_5 = *y++
- SMLABB r8, r12, r10, r8 @ sum[2] = MAC16_16(sum[2],tmp,y_4)
- LDRHGT r14, [r4] @ r14 = *x
- SMLABB r9, r12, r2, r9 @ sum[3] = MAC16_16(sum[3],tmp,y_5)
- BLE xcorr_kernel_edsp_done
- SMLABT r6, r14, r11, r6 @ sum[0] = MAC16_16(sum[0],tmp,y_3)
- LDRH r11, [r5] @ r11 = y_6 = *y
- SMLABB r7, r14, r10, r7 @ sum[1] = MAC16_16(sum[1],tmp,y_4)
- SMLABB r8, r14, r2, r8 @ sum[2] = MAC16_16(sum[2],tmp,y_5)
- SMLABB r9, r14, r11, r9 @ sum[3] = MAC16_16(sum[3],tmp,y_6)
-xcorr_kernel_edsp_done:
- LDMFD sp!, {r2,r4,r5,pc}
- .size xcorr_kernel_edsp, .-xcorr_kernel_edsp @ ENDP
-
-; celt_pitch_xcorr_edsp: @ PROC
- @ input:
- @ r0 = opus_val16 *_x (must be 32-bit aligned)
- @ r1 = opus_val16 *_y (only needs to be 16-bit aligned)
- @ r2 = opus_val32 *xcorr
- @ r3 = int len
- @ output:
- @ r0 = maxcorr
- @ internal usage
- @ r4 = opus_val16 *x
- @ r5 = opus_val16 *y
- @ r6 = opus_val32 sum0
- @ r7 = opus_val32 sum1
- @ r8 = opus_val32 sum2
- @ r9 = opus_val32 sum3
- @ r1 = int max_pitch
- @ r12 = int j
- STMFD sp!, {r4-r11, lr}
- MOV r5, r1
- LDR r1, [sp, #36]
- MOV r4, r0
- TST r5, #3
- @ maxcorr = 1
- MOV r0, #1
- BEQ celt_pitch_xcorr_edsp_process1u_done
-@ Compute one sum at the start to make y 32-bit aligned.
- SUBS r12, r3, #4
- @ r14 = sum = 0
- MOV r14, #0
- LDRH r8, [r5], #2
- BLE celt_pitch_xcorr_edsp_process1u_loop4_done
- LDR r6, [r4], #4
- MOV r8, r8, LSL #16
-celt_pitch_xcorr_edsp_process1u_loop4:
- LDR r9, [r5], #4
- SMLABT r14, r6, r8, r14 @ sum = MAC16_16(sum, x_0, y_0)
- LDR r7, [r4], #4
- SMLATB r14, r6, r9, r14 @ sum = MAC16_16(sum, x_1, y_1)
- LDR r8, [r5], #4
- SMLABT r14, r7, r9, r14 @ sum = MAC16_16(sum, x_2, y_2)
- SUBS r12, r12, #4 @ j-=4
- SMLATB r14, r7, r8, r14 @ sum = MAC16_16(sum, x_3, y_3)
- LDRGT r6, [r4], #4
- BGT celt_pitch_xcorr_edsp_process1u_loop4
- MOV r8, r8, LSR #16
-celt_pitch_xcorr_edsp_process1u_loop4_done:
- ADDS r12, r12, #4
-celt_pitch_xcorr_edsp_process1u_loop1:
- LDRHGE r6, [r4], #2
- @ Stall
- SMLABBGE r14, r6, r8, r14 @ sum = MAC16_16(sum, *x, *y)
- SUBSGE r12, r12, #1
- LDRHGT r8, [r5], #2
- BGT celt_pitch_xcorr_edsp_process1u_loop1
- @ Restore _x
- SUB r4, r4, r3, LSL #1
- @ Restore and advance _y
- SUB r5, r5, r3, LSL #1
- @ maxcorr = max(maxcorr, sum)
- CMP r0, r14
- ADD r5, r5, #2
- MOVLT r0, r14
- SUBS r1, r1, #1
- @ xcorr[i] = sum
- STR r14, [r2], #4
- BLE celt_pitch_xcorr_edsp_done
-celt_pitch_xcorr_edsp_process1u_done:
- @ if (max_pitch < 4) goto celt_pitch_xcorr_edsp_process2
- SUBS r1, r1, #4
- BLT celt_pitch_xcorr_edsp_process2
-celt_pitch_xcorr_edsp_process4:
- @ xcorr_kernel_edsp parameters:
- @ r3 = len, r4 = _x, r5 = _y, r6...r9 = sum[4] = {0, 0, 0, 0}
- MOV r6, #0
- MOV r7, #0
- MOV r8, #0
- MOV r9, #0
- BL xcorr_kernel_edsp_start @ xcorr_kernel_edsp(_x, _y+i, xcorr+i, len)
- @ maxcorr = max(maxcorr, sum0, sum1, sum2, sum3)
- CMP r0, r6
- @ _y+=4
- ADD r5, r5, #8
- MOVLT r0, r6
- CMP r0, r7
- MOVLT r0, r7
- CMP r0, r8
- MOVLT r0, r8
- CMP r0, r9
- MOVLT r0, r9
- STMIA r2!, {r6-r9}
- SUBS r1, r1, #4
- BGE celt_pitch_xcorr_edsp_process4
-celt_pitch_xcorr_edsp_process2:
- ADDS r1, r1, #2
- BLT celt_pitch_xcorr_edsp_process1a
- SUBS r12, r3, #4
- @ {r10, r11} = {sum0, sum1} = {0, 0}
- MOV r10, #0
- MOV r11, #0
- LDR r8, [r5], #4
- BLE celt_pitch_xcorr_edsp_process2_loop_done
- LDR r6, [r4], #4
- LDR r9, [r5], #4
-celt_pitch_xcorr_edsp_process2_loop4:
- SMLABB r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_0)
- LDR r7, [r4], #4
- SMLABT r11, r6, r8, r11 @ sum1 = MAC16_16(sum1, x_0, y_1)
- SUBS r12, r12, #4 @ j-=4
- SMLATT r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_1, y_1)
- LDR r8, [r5], #4
- SMLATB r11, r6, r9, r11 @ sum1 = MAC16_16(sum1, x_1, y_2)
- LDRGT r6, [r4], #4
- SMLABB r10, r7, r9, r10 @ sum0 = MAC16_16(sum0, x_2, y_2)
- SMLABT r11, r7, r9, r11 @ sum1 = MAC16_16(sum1, x_2, y_3)
- SMLATT r10, r7, r9, r10 @ sum0 = MAC16_16(sum0, x_3, y_3)
- LDRGT r9, [r5], #4
- SMLATB r11, r7, r8, r11 @ sum1 = MAC16_16(sum1, x_3, y_4)
- BGT celt_pitch_xcorr_edsp_process2_loop4
-celt_pitch_xcorr_edsp_process2_loop_done:
- ADDS r12, r12, #2
- BLE celt_pitch_xcorr_edsp_process2_1
- LDR r6, [r4], #4
- @ Stall
- SMLABB r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_0)
- LDR r9, [r5], #4
- SMLABT r11, r6, r8, r11 @ sum1 = MAC16_16(sum1, x_0, y_1)
- SUB r12, r12, #2
- SMLATT r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_1, y_1)
- MOV r8, r9
- SMLATB r11, r6, r9, r11 @ sum1 = MAC16_16(sum1, x_1, y_2)
-celt_pitch_xcorr_edsp_process2_1:
- LDRH r6, [r4], #2
- ADDS r12, r12, #1
- @ Stall
- SMLABB r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_0)
- LDRHGT r7, [r4], #2
- SMLABT r11, r6, r8, r11 @ sum1 = MAC16_16(sum1, x_0, y_1)
- BLE celt_pitch_xcorr_edsp_process2_done
- LDRH r9, [r5], #2
- SMLABT r10, r7, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_1)
- SMLABB r11, r7, r9, r11 @ sum1 = MAC16_16(sum1, x_0, y_2)
-celt_pitch_xcorr_edsp_process2_done:
- @ Restore _x
- SUB r4, r4, r3, LSL #1
- @ Restore and advance _y
- SUB r5, r5, r3, LSL #1
- @ maxcorr = max(maxcorr, sum0)
- CMP r0, r10
- ADD r5, r5, #2
- MOVLT r0, r10
- SUB r1, r1, #2
- @ maxcorr = max(maxcorr, sum1)
- CMP r0, r11
- @ xcorr[i] = sum
- STR r10, [r2], #4
- MOVLT r0, r11
- STR r11, [r2], #4
-celt_pitch_xcorr_edsp_process1a:
- ADDS r1, r1, #1
- BLT celt_pitch_xcorr_edsp_done
- SUBS r12, r3, #4
- @ r14 = sum = 0
- MOV r14, #0
- BLT celt_pitch_xcorr_edsp_process1a_loop_done
- LDR r6, [r4], #4
- LDR r8, [r5], #4
- LDR r7, [r4], #4
- LDR r9, [r5], #4
-celt_pitch_xcorr_edsp_process1a_loop4:
- SMLABB r14, r6, r8, r14 @ sum = MAC16_16(sum, x_0, y_0)
- SUBS r12, r12, #4 @ j-=4
- SMLATT r14, r6, r8, r14 @ sum = MAC16_16(sum, x_1, y_1)
- LDRGE r6, [r4], #4
- SMLABB r14, r7, r9, r14 @ sum = MAC16_16(sum, x_2, y_2)
- LDRGE r8, [r5], #4
- SMLATT r14, r7, r9, r14 @ sum = MAC16_16(sum, x_3, y_3)
- LDRGE r7, [r4], #4
- LDRGE r9, [r5], #4
- BGE celt_pitch_xcorr_edsp_process1a_loop4
-celt_pitch_xcorr_edsp_process1a_loop_done:
- ADDS r12, r12, #2
- LDRGE r6, [r4], #4
- LDRGE r8, [r5], #4
- @ Stall
- SMLABBGE r14, r6, r8, r14 @ sum = MAC16_16(sum, x_0, y_0)
- SUBGE r12, r12, #2
- SMLATTGE r14, r6, r8, r14 @ sum = MAC16_16(sum, x_1, y_1)
- ADDS r12, r12, #1
- LDRHGE r6, [r4], #2
- LDRHGE r8, [r5], #2
- @ Stall
- SMLABBGE r14, r6, r8, r14 @ sum = MAC16_16(sum, *x, *y)
- @ maxcorr = max(maxcorr, sum)
- CMP r0, r14
- @ xcorr[i] = sum
- STR r14, [r2], #4
- MOVLT r0, r14
-celt_pitch_xcorr_edsp_done:
- LDMFD sp!, {r4-r11, pc}
- .size celt_pitch_xcorr_edsp, .-celt_pitch_xcorr_edsp @ ENDP
-
- .endif
-
-@ END:
- .section .note.GNU-stack,"",%progbits
diff --git a/submodules/externals/build/opus/config.h b/submodules/externals/build/opus/config.h
deleted file mode 100644
index 3044bdee0..000000000
--- a/submodules/externals/build/opus/config.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* Custom modes */
-/* #undef CUSTOM_MODES */
-
-/* Assertions */
-/* #undef ENABLE_ASSERTIONS */
-
-/* Debug fixed-point implementation */
-/* #undef FIXED_DEBUG */
-
-/* Compile as fixed-point (for machines without a fast enough FPU) */
-/* #undef FIXED_POINT */
-
-/* Float approximations */
-/* #undef FLOAT_APPROX */
-
-/* Fuzzing */
-/* #undef FUZZING */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_ALLOCA_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_GETOPT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `lrint' function. */
-#define HAVE_LRINT 1
-
-/* Define to 1 if you have the `lrintf' function. */
-#define HAVE_LRINTF 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `__malloc_hook' function. */
-#define HAVE___MALLOC_HOOK 1
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-/* #undef NO_MINUS_C_MINUS_O */
-
-/* This is a build of OPUS */
-#define OPUS_BUILD /**/
-
-/* Opus library version string */
-#define OPUS_VERSION "1.0.2-2-g48e62c5"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 8
-
-/* The size of `long long', as computed by sizeof. */
-#define SIZEOF_LONG_LONG 8
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Make use of alloca */
-/* #undef USE_ALLOCA */
-
-/* Use C99 variable-size arrays */
-#define VAR_ARRAYS /**/
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to the equivalent of the C99 'restrict' keyword, or to
- nothing if this is not supported. Do not define if restrict is
- supported directly. */
-#define restrict __restrict
-/* Work around a bug in Sun C++: it does not support _Restrict or
- __restrict__, even though the corresponding Sun C compiler ends up with
- "#define restrict _Restrict" or "#define restrict __restrict__" in the
- previous line. Perhaps some future version of Sun C++ will work with
- restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-# define __restrict__
-#endif
-
-
-
-
diff --git a/submodules/externals/build/polarssl/Android.mk b/submodules/externals/build/polarssl/Android.mk
deleted file mode 100644
index 873ddc56c..000000000
--- a/submodules/externals/build/polarssl/Android.mk
+++ /dev/null
@@ -1,84 +0,0 @@
-
-LOCAL_PATH:= $(call my-dir)/../../polarssl/library
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= libpolarssl
-
-LOCAL_SRC_FILES := \
- aes.c \
- aesni.c \
- arc4.c \
- asn1parse.c \
- asn1write.c \
- base64.c \
- bignum.c \
- blowfish.c \
- camellia.c \
- certs.c \
- cipher.c \
- cipher_wrap.c \
- ctr_drbg.c \
- debug.c \
- des.c \
- dhm.c \
- ecdh.c \
- ecdsa.c \
- ecp.c \
- ecp_curves.c \
- entropy.c \
- entropy_poll.c \
- error.c \
- gcm.c \
- havege.c \
- md2.c \
- md4.c \
- md5.c \
- md.c \
- md_wrap.c \
- memory_buffer_alloc.c \
- net.c \
- oid.c \
- padlock.c \
- pbkdf2.c \
- pem.c \
- pk.c \
- pkcs11.c \
- pkcs12.c \
- pkcs5.c \
- pkparse.c \
- pk_wrap.c \
- pkwrite.c \
- ripemd160.c \
- rsa.c \
- sha1.c \
- sha256.c \
- sha512.c \
- ssl_cache.c \
- ssl_ciphersuites.c \
- ssl_cli.c \
- ssl_srv.c \
- ssl_tls.c \
- threading.c \
- timing.c \
- version.c \
- x509.c \
- x509_create.c \
- x509_crl.c \
- x509_crt.c \
- x509_csr.c \
- x509write_crt.c \
- x509write_csr.c \
- xtea.c \
- ccm.c \
- ssl_cookie.c \
- hmac_drbg.c
-
-
-
-LOCAL_CFLAGS += -Wno-maybe-uninitialized
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/../include
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/speex/Android.mk b/submodules/externals/build/speex/Android.mk
deleted file mode 100644
index fa3c0a649..000000000
--- a/submodules/externals/build/speex/Android.mk
+++ /dev/null
@@ -1,111 +0,0 @@
-
-LOCAL_PATH:= $(call my-dir)/../../speex
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= libspeex
-
-# Need some non-thumb arm instructions
-LOCAL_ARM_MODE := arm
-
-libspeex_SRC_FILES := \
- libspeex/cb_search.c \
- libspeex/exc_10_32_table.c \
- libspeex/exc_8_128_table.c \
- libspeex/filters.c \
- libspeex/gain_table.c \
- libspeex/hexc_table.c \
- libspeex/high_lsp_tables.c \
- libspeex/lsp.c \
- libspeex/ltp.c \
- libspeex/speex.c \
- libspeex/stereo.c \
- libspeex/vbr.c \
- libspeex/vq.c \
- libspeex/bits.c \
- libspeex/exc_10_16_table.c \
- libspeex/exc_20_32_table.c \
- libspeex/exc_5_256_table.c \
- libspeex/exc_5_64_table.c \
- libspeex/gain_table_lbr.c \
- libspeex/hexc_10_32_table.c \
- libspeex/lpc.c \
- libspeex/lsp_tables_nb.c \
- libspeex/modes.c \
- libspeex/modes_wb.c \
- libspeex/nb_celp.c \
- libspeex/quant_lsp.c \
- libspeex/sb_celp.c \
- libspeex/speex_callbacks.c \
- libspeex/speex_header.c \
- libspeex/window.c
-
-# Default FFT is FFTW3
-fft_SRC_FILES =
-
-# Un-comment for KISS_FFT and SMALL_FFT
-fft_SRC_FILES += libspeex/smallft.c
-
-# Un-comment for KISS_FFT
-fft_SRC_FILES += \
- libspeex/kiss_fft.c \
- libspeex/kiss_fftr.c
-
-libspeexdsp_SRC_FILES := \
- libspeex/preprocess.c \
- libspeex/jitter.c \
- libspeex/mdf.c \
- libspeex/fftwrap.c \
- libspeex/filterbank.c \
- libspeex/resample.c \
- libspeex/buffer.c \
- libspeex/scal.c \
- libspeex/speexdsp.c \
- $(fft_SRC_FILES)
-
-LOCAL_SRC_FILES := \
- $(libspeex_SRC_FILES) \
- $(libspeexdsp_SRC_FILES)
-
-# -DARM4_ASM
-
-
-USE_FLOAT=0
-
-FIXED_POINT_FLAGS=\
- -DARM5E_ASM\
- -DDISABLE_FLOAT_API \
- -DFIXED_POINT=1
-
-ifeq ($(TARGET_ARCH),arm)
- ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
- LOCAL_CFLAGS += -DARMV7NEON_ASM
- # add NEON support
- LOCAL_SRC_FILES += libspeex/resample_neon.c.neon
- ifeq ($(USE_FLOAT),1)
- LOCAL_CFLAGS += -DFLOATING_POINT=1
- else
- LOCAL_CFLAGS += $(FIXED_POINT_FLAGS)
- endif
- else
- LOCAL_CFLAGS += $(FIXED_POINT_FLAGS)
- endif
-else
-LOCAL_CFLAGS += \
- -DFLOATING_POINT=1
-endif
-
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w
-
-LOCAL_CFLAGS += \
- -UHAVE_CONFIG_H \
- -include $(LOCAL_PATH)/../build/speex/speex_AndroidConfig.h \
- '-DEXPORT=__attribute__((visibility("default")))'
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/../build/speex \
- $(LOCAL_PATH)/include
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/speex/speex/speex_config_types.h b/submodules/externals/build/speex/speex/speex_config_types.h
deleted file mode 100644
index 0c9eed695..000000000
--- a/submodules/externals/build/speex/speex/speex_config_types.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __SPEEX_TYPES_H__
-#define __SPEEX_TYPES_H__
-
-/* these are filled in by configure */
-typedef short spx_int16_t;
-typedef unsigned short spx_uint16_t;
-typedef int spx_int32_t;
-typedef unsigned int spx_uint32_t;
-
-extern float ff_scalarproduct_float_neon (const float *v1, const float *v2, int len);
-
-#ifndef FIXED_POINT
-extern float interpolate_product_single(const float *a, const float *b, unsigned int len, const spx_uint32_t oversample, float *frac);
-#else
-extern int interpolate_product_single_int(const spx_int16_t *a, const spx_int16_t *b, unsigned int len, const spx_uint32_t oversample, spx_int16_t *frac);
-#endif
-
-#endif
-
diff --git a/submodules/externals/build/speex/speex_AndroidConfig.h b/submodules/externals/build/speex/speex_AndroidConfig.h
deleted file mode 100644
index 1a737a4fc..000000000
--- a/submodules/externals/build/speex/speex_AndroidConfig.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Manually modified for Android integration (as speex_AndroidConfig.h) */
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* Make use of ARM4 assembly optimizations */
-/* #undef ARM4_ASM */
-
-/* Make use of ARM5E assembly optimizations */
-/*#define ARM5E_ASM*/
-
-/* Make use of Blackfin assembly optimizations */
-/* #undef BFIN_ASM */
-
-/* Disable all parts of the API that are using floats */
-/*#define DISABLE_FLOAT_API*/
-
-/* Disable VBR and VAD from the codec */
-/* #undef DISABLE_VBR */
-
-/* Enable valgrind extra checks */
-/* #undef ENABLE_VALGRIND */
-
-/* Symbol visibility prefix */
-#define EXPORT __attribute__((visibility("default")))
-
-/* Debug fixed-point implementation */
-/* #undef FIXED_DEBUG */
-
-/* Compile as fixed-point */
-/*#define FIXED_POINT 1*/
-
-/* Compile as floating-point */
-/* #undef FLOATING_POINT */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_ALLOCA_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_GETOPT_H 1
-
-/* Define to 1 if you have the `getopt_long' function. */
-#define HAVE_GETOPT_LONG 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `m' library (-lm). */
-#define HAVE_LIBM 1
-
-/* Define to 1 if you have the `winmm' library (-lwinmm). */
-/* #undef HAVE_LIBWINMM */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_SYS_AUDIOIO_H */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_SYS_SOUNDCARD_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 4
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* Version extra */
-#define SPEEX_EXTRA_VERSION ""
-
-/* Version major */
-#define SPEEX_MAJOR_VERSION 1
-
-/* Version micro */
-#define SPEEX_MICRO_VERSION 16
-
-/* Version minor */
-#define SPEEX_MINOR_VERSION 1
-
-/* Complete version string */
-#define SPEEX_VERSION "1.2rc1"
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Enable support for TI C55X DSP */
-/* #undef TI_C55X */
-
-/* Make use of alloca */
-/* #undef USE_ALLOCA */
-
-/* Use FFTW3 for FFT */
-/* #undef USE_GPL_FFTW3 */
-
-/* Use Intel Math Kernel Library for FFT */
-/* #undef USE_INTEL_MKL */
-
-/* Use KISS Fast Fourier Transform */
-#define USE_KISS_FFT
-
-/* Use FFT from OggVorbis */
-/*#undefine USE_SMALLFT*/
-
-/* Use C99 variable-size arrays */
-#define VAR_ARRAYS
-
-/* Define to 1 if your processor stores words with the most significant byte
- first (like Motorola and SPARC, unlike Intel and VAX). */
-/* #undef WORDS_BIGENDIAN */
-
-/* Enable SSE support */
-/* #undef _USE_SSE */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to equivalent of C99 restrict keyword, or to nothing if this is not
- supported. Do not define if restrict is supported directly. */
-#define restrict __restrict
diff --git a/submodules/externals/build/sqlite/Android.mk b/submodules/externals/build/sqlite/Android.mk
deleted file mode 100644
index 09cd26583..000000000
--- a/submodules/externals/build/sqlite/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-LOCAL_PATH:= $(call my-dir)/../../sqlite3
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- sqlite3.c
-
-# Android does not provide a way to create temporary files which are needed
-# for transactions... so we work in memory only
-# see http://www.sqlite.org/compile.html#temp_store
-LOCAL_CFLAGS += -DSQLITE_TEMP_STORE=3
-
-LOCAL_MODULE:= liblinsqlite
-
-include $(BUILD_STATIC_LIBRARY)
-
diff --git a/submodules/externals/build/srtp/Android.mk b/submodules/externals/build/srtp/Android.mk
deleted file mode 100644
index 63c340700..000000000
--- a/submodules/externals/build/srtp/Android.mk
+++ /dev/null
@@ -1,56 +0,0 @@
-
-LOCAL_PATH:= $(call my-dir)/../../srtp
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- srtp/srtp.c \
- srtp/ekt.c \
- crypto/ae_xfm/xfm.c \
- crypto/cipher/aes.c \
- crypto/cipher/aes_cbc.c \
- crypto/cipher/aes_icm.c \
- crypto/cipher/cipher.c \
- crypto/cipher/null_cipher.c \
- crypto/hash/auth.c \
- crypto/hash/hmac.c \
- crypto/hash/null_auth.c \
- crypto/hash/sha1.c \
- crypto/kernel/alloc.c \
- crypto/kernel/err.c \
- crypto/kernel/key.c \
- crypto/kernel/crypto_kernel.c \
- crypto/math/gf2_8.c \
- crypto/math/stat.c \
- crypto/replay/rdb.c \
- crypto/replay/rdbx.c \
- crypto/replay/ut_sim.c \
- crypto/rng/ctr_prng.c \
- crypto/rng/prng.c
-
-LOCAL_CFLAGS := -Wall -O4 -fexpensive-optimizations -funroll-loops -DCPU_CISC -include config.h
-
-ifeq ($(SRTP_USES_LINUX_KERNEL), 1)
-LOCAL_SRC_FILES += \
- crypto/rng/rand_linux_kernel.c
-LOCAL_CFLAGS += -DSRTP_KERNEL -DSRTP_KERNEL_LINUX
-else
-LOCAL_SRC_FILES += \
- crypto/rng/rand_source.c
-endif
-
-
-ifeq ($(SRTP_USES_MATH),1)
-LOCAL_SRC_FILES += crypto/math/math.c
-else
-LOCAL_SRC_FILES += crypto/math/datatypes.c
-endif
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/include \
- $(LOCAL_PATH)/crypto/include
-
-
-LOCAL_MODULE := libsrtp
-LOCAL_MODULE_FILENAME := libsrtp-$(TARGET_ARCH_ABI)
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/submodules/externals/build/srtp/config.h b/submodules/externals/build/srtp/config.h
deleted file mode 100644
index 52e6cd654..000000000
--- a/submodules/externals/build/srtp/config.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/* crypto/include/config.h. Generated by configure. */
-/* config_in.h. Generated from configure.in by autoheader. */
-
-/* Define if building for a CISC machine (e.g. Intel). */
-#define CPU_CISC 1
-
-/* Define if building for a RISC machine (assume slow byte access). */
-/* #undef CPU_RISC */
-
-/* Path to random device */
-/* #undef DEV_URANDOM */
-
-/* Define to compile in dynamic debugging system. */
-#define ENABLE_DEBUGGING 0
-
-/* Report errors to this file. */
-/* #undef ERR_REPORTING_FILE */
-
-/* Define to use logging to stdout. */
-#define ERR_REPORTING_STDOUT 1
-
-/* Define this to use ISMAcryp code. */
-/* #undef GENERIC_AESICM */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_BYTESWAP_H */
-
-/* Define to 1 if you have the `inet_aton' function. */
-#define HAVE_INET_ATON 1
-
-/* Define to 1 if the system has the type `int16_t'. */
-#define HAVE_INT16_T 1
-
-/* Define to 1 if the system has the type `int32_t'. */
-#define HAVE_INT32_T 1
-
-/* Define to 1 if the system has the type `int8_t'. */
-#define HAVE_INT8_T 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `socket' library (-lsocket). */
-/* #undef HAVE_LIBSOCKET */
-
-/* Define to 1 if you have the header file. */
-/*#define HAVE_MACHINE_TYPES_H 1*/
-
-/* Define to 1 if you have the header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the `socket' function. */
-#define HAVE_SOCKET 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYSLOG_H 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_SYS_INT_TYPES_H */
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_SYS_UIO_H 1
-
-/* Define to 1 if the system has the type `uint16_t'. */
-#define HAVE_UINT16_T 1
-
-/* Define to 1 if the system has the type `uint32_t'. */
-#define HAVE_UINT32_T 1
-
-/* Define to 1 if the system has the type `uint64_t'. */
-#define HAVE_UINT64_T 1
-
-/* Define to 1 if the system has the type `uint8_t'. */
-#define HAVE_UINT8_T 1
-
-/* Define to 1 if you have the header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `usleep' function. */
-#define HAVE_USLEEP 1
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_WINDOWS_H */
-
-/* Define to 1 if you have the header file. */
-/* #undef HAVE_WINSOCK2_H */
-
-/* Define to use X86 inlined assembly code */
-/* #undef HAVE_X86 */
-
-/* Define to the address where bug reports for this package should be sent. */
-/*#define PACKAGE_BUGREPORT ""*/
-
-/* Define to the full name of this package. */
-/*#define PACKAGE_NAME ""*/
-
-/* Define to the full name and version of this package. */
-/*#define PACKAGE_STRING ""*/
-
-/* Define to the one symbol short name of this package. */
-/*#define PACKAGE_TARNAME ""*/
-
-/* Define to the version of this package. */
-/*#define PACKAGE_VERSION ""*/
-
-/* The size of a `unsigned long', as computed by sizeof. */
-#define SIZEOF_UNSIGNED_LONG 4
-
-/* The size of a `unsigned long long', as computed by sizeof. */
-#define SIZEOF_UNSIGNED_LONG_LONG 8
-
-/* Define to use GDOI. */
-/* #undef SRTP_GDOI */
-
-/* Define to compile for kernel contexts. */
-/* #undef SRTP_KERNEL */
-
-/* Define to compile for Linux kernel context. */
-/* #undef SRTP_KERNEL_LINUX */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Write errors to this file */
-/* #undef USE_ERR_REPORTING_FILE */
-
-/* Define to use syslog logging. */
-/* #undef USE_SYSLOG */
-
-/* Define to 1 if your processor stores words with the most significant byte
- first (like Motorola and SPARC, unlike Intel and VAX). */
-/* #undef WORDS_BIGENDIAN */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to `unsigned' if does not define. */
-/* #undef size_t */
diff --git a/submodules/externals/build/vo-amrwbenc/Android.mk b/submodules/externals/build/vo-amrwbenc/Android.mk
deleted file mode 100644
index f31de4b2c..000000000
--- a/submodules/externals/build/vo-amrwbenc/Android.mk
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-LOCAL_PATH:= $(call my-dir)/../../vo-amrwbenc
-
-BUILD_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libvoamrwbenc
-
-LOCAL_SRC_FILES += \
- wrapper.c \
- common/cmnMemory.c \
- amrwbenc/src/autocorr.c \
- amrwbenc/src/az_isp.c \
- amrwbenc/src/bits.c \
- amrwbenc/src/c2t64fx.c \
- amrwbenc/src/c4t64fx.c \
- amrwbenc/src/convolve.c \
- amrwbenc/src/cor_h_x.c \
- amrwbenc/src/decim54.c \
- amrwbenc/src/deemph.c \
- amrwbenc/src/dtx.c \
- amrwbenc/src/g_pitch.c \
- amrwbenc/src/gpclip.c \
- amrwbenc/src/homing.c \
- amrwbenc/src/hp400.c \
- amrwbenc/src/hp50.c \
- amrwbenc/src/hp6k.c \
- amrwbenc/src/hp_wsp.c \
- amrwbenc/src/int_lpc.c \
- amrwbenc/src/isp_az.c \
- amrwbenc/src/isp_isf.c \
- amrwbenc/src/lag_wind.c \
- amrwbenc/src/levinson.c \
- amrwbenc/src/log2.c \
- amrwbenc/src/lp_dec2.c \
- amrwbenc/src/math_op.c \
- amrwbenc/src/mem_align.c \
- amrwbenc/src/oper_32b.c \
- amrwbenc/src/p_med_ol.c \
- amrwbenc/src/pit_shrp.c \
- amrwbenc/src/pitch_f4.c \
- amrwbenc/src/pred_lt4.c \
- amrwbenc/src/preemph.c \
- amrwbenc/src/q_gain2.c \
- amrwbenc/src/q_pulse.c \
- amrwbenc/src/qisf_ns.c \
- amrwbenc/src/qpisf_2s.c \
- amrwbenc/src/random.c \
- amrwbenc/src/residu.c \
- amrwbenc/src/scale.c \
- amrwbenc/src/stream.c \
- amrwbenc/src/syn_filt.c \
- amrwbenc/src/updt_tar.c \
- amrwbenc/src/util.c \
- amrwbenc/src/voAMRWBEnc.c \
- amrwbenc/src/voicefac.c \
- amrwbenc/src/wb_vad.c \
- amrwbenc/src/weight_a.c
-
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-LOCAL_SRC_FILES += \
- amrwbenc/src/asm/ARMV7/convolve_neon.s.neon \
- amrwbenc/src/asm/ARMV7/cor_h_vec_neon.s.neon \
- amrwbenc/src/asm/ARMV7/Deemph_32_neon.s.neon \
- amrwbenc/src/asm/ARMV7/Dot_p_neon.s.neon \
- amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s.neon \
- amrwbenc/src/asm/ARMV7/Norm_Corr_neon.s.neon \
- amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s.neon \
- amrwbenc/src/asm/ARMV7/residu_asm_neon.s.neon \
- amrwbenc/src/asm/ARMV7/scale_sig_neon.s.neon \
- amrwbenc/src/asm/ARMV7/Syn_filt_32_neon.s.neon \
- amrwbenc/src/asm/ARMV7/syn_filt_neon.s.neon
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV5E
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV7
-
-LOCAL_CFLAGS += -DARM -DARMV7 -DASM_OPT
-
-else
-ifeq ($(TARGET_ARCH_ABI),armeabi-v5)
-LOCAL_SRC_FILES += \
- amrwbenc/src/asm/ARMV5E/convolve_opt.s \
- amrwbenc/src/asm/ARMV5E/cor_h_vec_opt.s \
- amrwbenc/src/asm/ARMV5E/Deemph_32_opt.s \
- amrwbenc/src/asm/ARMV5E/Dot_p_opt.s \
- amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s \
- amrwbenc/src/asm/ARMV5E/Norm_Corr_opt.s \
- amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s \
- amrwbenc/src/asm/ARMV5E/residu_asm_opt.s \
- amrwbenc/src/asm/ARMV5E/scale_sig_opt.s \
- amrwbenc/src/asm/ARMV5E/Syn_filt_32_opt.s \
- amrwbenc/src/asm/ARMV5E/syn_filt_opt.s
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV5E
-
-LOCAL_CFLAGS += += -DARM -DASM_OPT
-endif
-endif
-
-LOCAL_ARM_MODE := arm
-
-#for including config.h:
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/amrwbenc/inc/ \
- $(LOCAL_PATH)/common/include/
-
-#turn off warnings since we cannot fix them
-LOCAL_CFLAGS += -w -fPIC
-
-include $(BUILD_STATIC_LIBRARY)
-
-
diff --git a/submodules/externals/build/x264/Android.mk b/submodules/externals/build/x264/Android.mk
deleted file mode 100644
index 780179357..000000000
--- a/submodules/externals/build/x264/Android.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libx264
-LOCAL_SRC_FILES := $(TARGET_ARCH)/libx264.a
-
-include $(PREBUILT_STATIC_LIBRARY)
diff --git a/submodules/externals/build/x264/config.h b/submodules/externals/build/x264/config.h
deleted file mode 100644
index 9e532298c..000000000
--- a/submodules/externals/build/x264/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#define HAVE_MALLOC_H 1
-#define HAVE_ARMV6 1
-#define HAVE_ARMV6T2 1
-#define HAVE_NEON 1
-#define ARCH_ARM 1
-#define SYS_LINUX 1
-#define HAVE_LOG2F 0
-#define fseek fseeko
-#define ftell ftello
-#define BIT_DEPTH 8
-#define HAVE_GPL 1
-#define HAVE_ALTIVEC 0
-#define HAVE_ALTIVEC_H 0
-#define HAVE_MMX 0
-#define HAVE_PTHREAD 0
-#define HAVE_VISUALIZE 0
-#define HAVE_SWSCALE 0
-#define HAVE_LAVF 0
-#define HAVE_FFMS 0
-#define HAVE_GPAC 0
-#define HAVE_GF_MALLOC 0
-#define HAVE_AVS 0
-#define X264_VERSION " r1804 e89c4cf"
-#define X264_POINTVER "0.110.1804 e89c4cf"
diff --git a/submodules/externals/bv16-floatingpoint b/submodules/externals/bv16-floatingpoint
deleted file mode 160000
index 6899f2759..000000000
--- a/submodules/externals/bv16-floatingpoint
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 6899f2759c7b19d5402335d3a937c53020abfeca
diff --git a/submodules/externals/codec2 b/submodules/externals/codec2
deleted file mode 160000
index 4e154e6bb..000000000
--- a/submodules/externals/codec2
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 4e154e6bbbe92cc76e333a0b4acb365b5c042ec6
diff --git a/submodules/externals/ffmpeg b/submodules/externals/ffmpeg
deleted file mode 160000
index 644296e73..000000000
--- a/submodules/externals/ffmpeg
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 644296e736ee219cd02f7b7d7b7b4c7c5a464217
diff --git a/submodules/externals/gsm b/submodules/externals/gsm
deleted file mode 160000
index 0f8822b53..000000000
--- a/submodules/externals/gsm
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0f8822b5326c76bb9dc4c6b552631f51792c3982
diff --git a/submodules/externals/libjpeg-turbo b/submodules/externals/libjpeg-turbo
deleted file mode 160000
index 0e99446a2..000000000
--- a/submodules/externals/libjpeg-turbo
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0e99446a237bef6704d45f74d504ae8aafa45f9a
diff --git a/submodules/externals/libupnp b/submodules/externals/libupnp
deleted file mode 160000
index 3fc0f9ad1..000000000
--- a/submodules/externals/libupnp
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 3fc0f9ad1dc124bdd7fc2aa5aeb6a684f79191f2
diff --git a/submodules/externals/libvpx b/submodules/externals/libvpx
deleted file mode 160000
index e30f71938..000000000
--- a/submodules/externals/libvpx
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit e30f719387857056a45a6722bf4f3a55203d812b
diff --git a/submodules/externals/libxml2 b/submodules/externals/libxml2
deleted file mode 160000
index bc5a5d658..000000000
--- a/submodules/externals/libxml2
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit bc5a5d658320c37e206fe4e7b525b4a24466d0c6
diff --git a/submodules/externals/libxsd b/submodules/externals/libxsd
deleted file mode 160000
index 34af5de2e..000000000
--- a/submodules/externals/libxsd
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 34af5de2ee71dde72a010fde336d2efa9c386abd
diff --git a/submodules/externals/mbedtls b/submodules/externals/mbedtls
deleted file mode 160000
index 83d21d543..000000000
--- a/submodules/externals/mbedtls
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 83d21d543c26a31943b2bd08c66b029f2ef742be
diff --git a/submodules/externals/opencore-amr b/submodules/externals/opencore-amr
deleted file mode 160000
index 3b67218fb..000000000
--- a/submodules/externals/opencore-amr
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 3b67218fb8efb776bcd79e7445774e02d778321d
diff --git a/submodules/externals/openh264 b/submodules/externals/openh264
deleted file mode 160000
index 852d23c72..000000000
--- a/submodules/externals/openh264
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 852d23c72acd537b75e4b95af93b866925d31bda
diff --git a/submodules/externals/opus b/submodules/externals/opus
deleted file mode 160000
index 35b371a85..000000000
--- a/submodules/externals/opus
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 35b371a85bf2cf21ab4b12b5475c76a2775b25d1
diff --git a/submodules/externals/soci b/submodules/externals/soci
deleted file mode 160000
index d1fc622b2..000000000
--- a/submodules/externals/soci
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit d1fc622b2cbe5fe9b55959b32af054c7ae75e1a1
diff --git a/submodules/externals/speex b/submodules/externals/speex
deleted file mode 160000
index 0aafdb594..000000000
--- a/submodules/externals/speex
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0aafdb5941457e8aa96cc835f9f221f8cd7afb10
diff --git a/submodules/externals/sqlite3/CMakeLists.txt b/submodules/externals/sqlite3/CMakeLists.txt
deleted file mode 100644
index 28a7b381c..000000000
--- a/submodules/externals/sqlite3/CMakeLists.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-############################################################################
-# CMakeLists.txt
-# Copyright (C) 2014 Belledonne Communications, Grenoble France
-#
-############################################################################
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-############################################################################
-
-cmake_minimum_required(VERSION 2.6)
-project(SQLITE3 C)
-
-
-option(ENABLE_STATIC "Build static library (default is shared library)." OFF)
-
-
-set(SOURCE_FILES sqlite3.c)
-if(WIN32)
- list(APPEND SOURCE_FILES sqlite3.def)
-endif()
-
-if(CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" OR CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
- add_definitions(
- -DSQLITE_OS_WINRT=1
- -DSQLITE_WIN32_FILEMAPPING_API=1
- -DSQLITE_OMIT_LOAD_EXTENSION
- )
-endif()
-
-if(ENABLE_STATIC)
- add_library(sqlite3 STATIC ${SOURCE_FILES})
-else()
- add_library(sqlite3 SHARED ${SOURCE_FILES})
- if(MSVC)
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Debug/sqlite3.pdb
- DESTINATION bin
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
- )
- endif()
- endif()
-endif()
-
-install(TARGETS sqlite3
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
-)
-
-
-file(GLOB HEADER_FILES "*.h")
-
-install(FILES ${HEADER_FILES}
- DESTINATION include
- PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
-)
diff --git a/submodules/externals/sqlite3/shell.c b/submodules/externals/sqlite3/shell.c
deleted file mode 100644
index 3ab3472e6..000000000
--- a/submodules/externals/sqlite3/shell.c
+++ /dev/null
@@ -1,16130 +0,0 @@
-/* DO NOT EDIT!
-** This file is automatically generated by the script in the canonical
-** SQLite source tree at tool/mkshellc.tcl. That script combines source
-** code from various constituent source files of SQLite into this single
-** "shell.c" file used to implement the SQLite command-line shell.
-**
-** Most of the code found below comes from the "src/shell.c.in" file in
-** the canonical SQLite source tree. That main file contains "INCLUDE"
-** lines that specify other files in the canonical source tree that are
-** inserted to getnerate this complete program source file.
-**
-** The code from multiple files is combined into this single "shell.c"
-** source file to help make the command-line program easier to compile.
-**
-** To modify this program, get a copy of the canonical SQLite source tree,
-** edit the src/shell.c.in" and/or some of the other files that are included
-** by "src/shell.c.in", then rerun the tool/mkshellc.tcl script.
-*/
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code to implement the "sqlite" command line
-** utility for accessing SQLite databases.
-*/
-#if (defined(_WIN32) || defined(WIN32)) && !defined(_CRT_SECURE_NO_WARNINGS)
-/* This needs to come before any includes for MSVC compiler */
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-
-/*
-** Warning pragmas copied from msvc.h in the core.
-*/
-#if defined(_MSC_VER)
-#pragma warning(disable : 4054)
-#pragma warning(disable : 4055)
-#pragma warning(disable : 4100)
-#pragma warning(disable : 4127)
-#pragma warning(disable : 4130)
-#pragma warning(disable : 4152)
-#pragma warning(disable : 4189)
-#pragma warning(disable : 4206)
-#pragma warning(disable : 4210)
-#pragma warning(disable : 4232)
-#pragma warning(disable : 4244)
-#pragma warning(disable : 4305)
-#pragma warning(disable : 4306)
-#pragma warning(disable : 4702)
-#pragma warning(disable : 4706)
-#endif /* defined(_MSC_VER) */
-
-/*
-** No support for loadable extensions in VxWorks.
-*/
-#if (defined(__RTP__) || defined(_WRS_KERNEL)) && !SQLITE_OMIT_LOAD_EXTENSION
-# define SQLITE_OMIT_LOAD_EXTENSION 1
-#endif
-
-/*
-** Enable large-file support for fopen() and friends on unix.
-*/
-#ifndef SQLITE_DISABLE_LFS
-# define _LARGE_FILE 1
-# ifndef _FILE_OFFSET_BITS
-# define _FILE_OFFSET_BITS 64
-# endif
-# define _LARGEFILE_SOURCE 1
-#endif
-
-#include
-#include
-#include
-#include
-#include "sqlite3.h"
-typedef sqlite3_int64 i64;
-typedef sqlite3_uint64 u64;
-typedef unsigned char u8;
-#if SQLITE_USER_AUTHENTICATION
-# include "sqlite3userauth.h"
-#endif
-#include
-#include
-
-#if !defined(_WIN32) && !defined(WIN32)
-# include
-# if !defined(__RTP__) && !defined(_WRS_KERNEL)
-# include
-# endif
-#endif
-#if (!defined(_WIN32) && !defined(WIN32)) || defined(__MINGW32__)
-# include
-# include
-# if defined(__MINGW32__)
-# define DIRENT dirent
-# ifndef S_ISLNK
-# define S_ISLNK(mode) (0)
-# endif
-# endif
-#endif
-#include
-#include
-
-#if HAVE_READLINE
-# include
-# include
-#endif
-
-#if HAVE_EDITLINE
-# include
-#endif
-
-#if HAVE_EDITLINE || HAVE_READLINE
-
-# define shell_add_history(X) add_history(X)
-# define shell_read_history(X) read_history(X)
-# define shell_write_history(X) write_history(X)
-# define shell_stifle_history(X) stifle_history(X)
-# define shell_readline(X) readline(X)
-
-#elif HAVE_LINENOISE
-
-# include "linenoise.h"
-# define shell_add_history(X) linenoiseHistoryAdd(X)
-# define shell_read_history(X) linenoiseHistoryLoad(X)
-# define shell_write_history(X) linenoiseHistorySave(X)
-# define shell_stifle_history(X) linenoiseHistorySetMaxLen(X)
-# define shell_readline(X) linenoise(X)
-
-#else
-
-# define shell_read_history(X)
-# define shell_write_history(X)
-# define shell_stifle_history(X)
-
-# define SHELL_USE_LOCAL_GETLINE 1
-#endif
-
-
-#if defined(_WIN32) || defined(WIN32)
-# include
-# include
-# define isatty(h) _isatty(h)
-# ifndef access
-# define access(f,m) _access((f),(m))
-# endif
-# ifndef unlink
-# define unlink _unlink
-# endif
-# undef popen
-# define popen _popen
-# undef pclose
-# define pclose _pclose
-#else
- /* Make sure isatty() has a prototype. */
- extern int isatty(int);
-
-# if !defined(__RTP__) && !defined(_WRS_KERNEL)
- /* popen and pclose are not C89 functions and so are
- ** sometimes omitted from the header */
- extern FILE *popen(const char*,const char*);
- extern int pclose(FILE*);
-# else
-# define SQLITE_OMIT_POPEN 1
-# endif
-#endif
-
-#if defined(_WIN32_WCE)
-/* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty()
- * thus we always assume that we have a console. That can be
- * overridden with the -batch command line option.
- */
-#define isatty(x) 1
-#endif
-
-/* ctype macros that work with signed characters */
-#define IsSpace(X) isspace((unsigned char)X)
-#define IsDigit(X) isdigit((unsigned char)X)
-#define ToLower(X) (char)tolower((unsigned char)X)
-
-#if defined(_WIN32) || defined(WIN32)
-#include
-
-/* string conversion routines only needed on Win32 */
-extern char *sqlite3_win32_unicode_to_utf8(LPCWSTR);
-extern char *sqlite3_win32_mbcs_to_utf8_v2(const char *, int);
-extern char *sqlite3_win32_utf8_to_mbcs_v2(const char *, int);
-extern LPWSTR sqlite3_win32_utf8_to_unicode(const char *zText);
-#endif
-
-/* On Windows, we normally run with output mode of TEXT so that \n characters
-** are automatically translated into \r\n. However, this behavior needs
-** to be disabled in some cases (ex: when generating CSV output and when
-** rendering quoted strings that contain \n characters). The following
-** routines take care of that.
-*/
-#if defined(_WIN32) || defined(WIN32)
-static void setBinaryMode(FILE *file, int isOutput){
- if( isOutput ) fflush(file);
- _setmode(_fileno(file), _O_BINARY);
-}
-static void setTextMode(FILE *file, int isOutput){
- if( isOutput ) fflush(file);
- _setmode(_fileno(file), _O_TEXT);
-}
-#else
-# define setBinaryMode(X,Y)
-# define setTextMode(X,Y)
-#endif
-
-
-/* True if the timer is enabled */
-static int enableTimer = 0;
-
-/* Return the current wall-clock time */
-static sqlite3_int64 timeOfDay(void){
- static sqlite3_vfs *clockVfs = 0;
- sqlite3_int64 t;
- if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0);
- if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){
- clockVfs->xCurrentTimeInt64(clockVfs, &t);
- }else{
- double r;
- clockVfs->xCurrentTime(clockVfs, &r);
- t = (sqlite3_int64)(r*86400000.0);
- }
- return t;
-}
-
-#if !defined(_WIN32) && !defined(WIN32) && !defined(__minux)
-#include
-#include
-
-/* VxWorks does not support getrusage() as far as we can determine */
-#if defined(_WRS_KERNEL) || defined(__RTP__)
-struct rusage {
- struct timeval ru_utime; /* user CPU time used */
- struct timeval ru_stime; /* system CPU time used */
-};
-#define getrusage(A,B) memset(B,0,sizeof(*B))
-#endif
-
-/* Saved resource information for the beginning of an operation */
-static struct rusage sBegin; /* CPU time at start */
-static sqlite3_int64 iBegin; /* Wall-clock time at start */
-
-/*
-** Begin timing an operation
-*/
-static void beginTimer(void){
- if( enableTimer ){
- getrusage(RUSAGE_SELF, &sBegin);
- iBegin = timeOfDay();
- }
-}
-
-/* Return the difference of two time_structs in seconds */
-static double timeDiff(struct timeval *pStart, struct timeval *pEnd){
- return (pEnd->tv_usec - pStart->tv_usec)*0.000001 +
- (double)(pEnd->tv_sec - pStart->tv_sec);
-}
-
-/*
-** Print the timing results.
-*/
-static void endTimer(void){
- if( enableTimer ){
- sqlite3_int64 iEnd = timeOfDay();
- struct rusage sEnd;
- getrusage(RUSAGE_SELF, &sEnd);
- printf("Run Time: real %.3f user %f sys %f\n",
- (iEnd - iBegin)*0.001,
- timeDiff(&sBegin.ru_utime, &sEnd.ru_utime),
- timeDiff(&sBegin.ru_stime, &sEnd.ru_stime));
- }
-}
-
-#define BEGIN_TIMER beginTimer()
-#define END_TIMER endTimer()
-#define HAS_TIMER 1
-
-#elif (defined(_WIN32) || defined(WIN32))
-
-/* Saved resource information for the beginning of an operation */
-static HANDLE hProcess;
-static FILETIME ftKernelBegin;
-static FILETIME ftUserBegin;
-static sqlite3_int64 ftWallBegin;
-typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME,
- LPFILETIME, LPFILETIME);
-static GETPROCTIMES getProcessTimesAddr = NULL;
-
-/*
-** Check to see if we have timer support. Return 1 if necessary
-** support found (or found previously).
-*/
-static int hasTimer(void){
- if( getProcessTimesAddr ){
- return 1;
- } else {
- /* GetProcessTimes() isn't supported in WIN95 and some other Windows
- ** versions. See if the version we are running on has it, and if it
- ** does, save off a pointer to it and the current process handle.
- */
- hProcess = GetCurrentProcess();
- if( hProcess ){
- HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll"));
- if( NULL != hinstLib ){
- getProcessTimesAddr =
- (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes");
- if( NULL != getProcessTimesAddr ){
- return 1;
- }
- FreeLibrary(hinstLib);
- }
- }
- }
- return 0;
-}
-
-/*
-** Begin timing an operation
-*/
-static void beginTimer(void){
- if( enableTimer && getProcessTimesAddr ){
- FILETIME ftCreation, ftExit;
- getProcessTimesAddr(hProcess,&ftCreation,&ftExit,
- &ftKernelBegin,&ftUserBegin);
- ftWallBegin = timeOfDay();
- }
-}
-
-/* Return the difference of two FILETIME structs in seconds */
-static double timeDiff(FILETIME *pStart, FILETIME *pEnd){
- sqlite_int64 i64Start = *((sqlite_int64 *) pStart);
- sqlite_int64 i64End = *((sqlite_int64 *) pEnd);
- return (double) ((i64End - i64Start) / 10000000.0);
-}
-
-/*
-** Print the timing results.
-*/
-static void endTimer(void){
- if( enableTimer && getProcessTimesAddr){
- FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd;
- sqlite3_int64 ftWallEnd = timeOfDay();
- getProcessTimesAddr(hProcess,&ftCreation,&ftExit,&ftKernelEnd,&ftUserEnd);
- printf("Run Time: real %.3f user %f sys %f\n",
- (ftWallEnd - ftWallBegin)*0.001,
- timeDiff(&ftUserBegin, &ftUserEnd),
- timeDiff(&ftKernelBegin, &ftKernelEnd));
- }
-}
-
-#define BEGIN_TIMER beginTimer()
-#define END_TIMER endTimer()
-#define HAS_TIMER hasTimer()
-
-#else
-#define BEGIN_TIMER
-#define END_TIMER
-#define HAS_TIMER 0
-#endif
-
-/*
-** Used to prevent warnings about unused parameters
-*/
-#define UNUSED_PARAMETER(x) (void)(x)
-
-/*
-** Number of elements in an array
-*/
-#define ArraySize(X) (int)(sizeof(X)/sizeof(X[0]))
-
-/*
-** If the following flag is set, then command execution stops
-** at an error if we are not interactive.
-*/
-static int bail_on_error = 0;
-
-/*
-** Threat stdin as an interactive input if the following variable
-** is true. Otherwise, assume stdin is connected to a file or pipe.
-*/
-static int stdin_is_interactive = 1;
-
-/*
-** On Windows systems we have to know if standard output is a console
-** in order to translate UTF-8 into MBCS. The following variable is
-** true if translation is required.
-*/
-static int stdout_is_console = 1;
-
-/*
-** The following is the open SQLite database. We make a pointer
-** to this database a static variable so that it can be accessed
-** by the SIGINT handler to interrupt database processing.
-*/
-static sqlite3 *globalDb = 0;
-
-/*
-** True if an interrupt (Control-C) has been received.
-*/
-static volatile int seenInterrupt = 0;
-
-/*
-** This is the name of our program. It is set in main(), used
-** in a number of other places, mostly for error messages.
-*/
-static char *Argv0;
-
-/*
-** Prompt strings. Initialized in main. Settable with
-** .prompt main continue
-*/
-static char mainPrompt[20]; /* First line prompt. default: "sqlite> "*/
-static char continuePrompt[20]; /* Continuation prompt. default: " ...> " */
-
-/*
-** Render output like fprintf(). Except, if the output is going to the
-** console and if this is running on a Windows machine, translate the
-** output from UTF-8 into MBCS.
-*/
-#if defined(_WIN32) || defined(WIN32)
-void utf8_printf(FILE *out, const char *zFormat, ...){
- va_list ap;
- va_start(ap, zFormat);
- if( stdout_is_console && (out==stdout || out==stderr) ){
- char *z1 = sqlite3_vmprintf(zFormat, ap);
- char *z2 = sqlite3_win32_utf8_to_mbcs_v2(z1, 0);
- sqlite3_free(z1);
- fputs(z2, out);
- sqlite3_free(z2);
- }else{
- vfprintf(out, zFormat, ap);
- }
- va_end(ap);
-}
-#elif !defined(utf8_printf)
-# define utf8_printf fprintf
-#endif
-
-/*
-** Render output like fprintf(). This should not be used on anything that
-** includes string formatting (e.g. "%s").
-*/
-#if !defined(raw_printf)
-# define raw_printf fprintf
-#endif
-
-/*
-** Write I/O traces to the following stream.
-*/
-#ifdef SQLITE_ENABLE_IOTRACE
-static FILE *iotrace = 0;
-#endif
-
-/*
-** This routine works like printf in that its first argument is a
-** format string and subsequent arguments are values to be substituted
-** in place of % fields. The result of formatting this string
-** is written to iotrace.
-*/
-#ifdef SQLITE_ENABLE_IOTRACE
-static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){
- va_list ap;
- char *z;
- if( iotrace==0 ) return;
- va_start(ap, zFormat);
- z = sqlite3_vmprintf(zFormat, ap);
- va_end(ap);
- utf8_printf(iotrace, "%s", z);
- sqlite3_free(z);
-}
-#endif
-
-/*
-** Output string zUtf to stream pOut as w characters. If w is negative,
-** then right-justify the text. W is the width in UTF-8 characters, not
-** in bytes. This is different from the %*.*s specification in printf
-** since with %*.*s the width is measured in bytes, not characters.
-*/
-static void utf8_width_print(FILE *pOut, int w, const char *zUtf){
- int i;
- int n;
- int aw = w<0 ? -w : w;
- char zBuf[1000];
- if( aw>(int)sizeof(zBuf)/3 ) aw = (int)sizeof(zBuf)/3;
- for(i=n=0; zUtf[i]; i++){
- if( (zUtf[i]&0xc0)!=0x80 ){
- n++;
- if( n==aw ){
- do{ i++; }while( (zUtf[i]&0xc0)==0x80 );
- break;
- }
- }
- }
- if( n>=aw ){
- utf8_printf(pOut, "%.*s", i, zUtf);
- }else if( w<0 ){
- utf8_printf(pOut, "%*s%s", aw-n, "", zUtf);
- }else{
- utf8_printf(pOut, "%s%*s", zUtf, aw-n, "");
- }
-}
-
-
-/*
-** Determines if a string is a number of not.
-*/
-static int isNumber(const char *z, int *realnum){
- if( *z=='-' || *z=='+' ) z++;
- if( !IsDigit(*z) ){
- return 0;
- }
- z++;
- if( realnum ) *realnum = 0;
- while( IsDigit(*z) ){ z++; }
- if( *z=='.' ){
- z++;
- if( !IsDigit(*z) ) return 0;
- while( IsDigit(*z) ){ z++; }
- if( realnum ) *realnum = 1;
- }
- if( *z=='e' || *z=='E' ){
- z++;
- if( *z=='+' || *z=='-' ) z++;
- if( !IsDigit(*z) ) return 0;
- while( IsDigit(*z) ){ z++; }
- if( realnum ) *realnum = 1;
- }
- return *z==0;
-}
-
-/*
-** Compute a string length that is limited to what can be stored in
-** lower 30 bits of a 32-bit signed integer.
-*/
-static int strlen30(const char *z){
- const char *z2 = z;
- while( *z2 ){ z2++; }
- return 0x3fffffff & (int)(z2 - z);
-}
-
-/*
-** Return the length of a string in characters. Multibyte UTF8 characters
-** count as a single character.
-*/
-static int strlenChar(const char *z){
- int n = 0;
- while( *z ){
- if( (0xc0&*(z++))!=0x80 ) n++;
- }
- return n;
-}
-
-/*
-** This routine reads a line of text from FILE in, stores
-** the text in memory obtained from malloc() and returns a pointer
-** to the text. NULL is returned at end of file, or if malloc()
-** fails.
-**
-** If zLine is not NULL then it is a malloced buffer returned from
-** a previous call to this routine that may be reused.
-*/
-static char *local_getline(char *zLine, FILE *in){
- int nLine = zLine==0 ? 0 : 100;
- int n = 0;
-
- while( 1 ){
- if( n+100>nLine ){
- nLine = nLine*2 + 100;
- zLine = realloc(zLine, nLine);
- if( zLine==0 ) return 0;
- }
- if( fgets(&zLine[n], nLine - n, in)==0 ){
- if( n==0 ){
- free(zLine);
- return 0;
- }
- zLine[n] = 0;
- break;
- }
- while( zLine[n] ) n++;
- if( n>0 && zLine[n-1]=='\n' ){
- n--;
- if( n>0 && zLine[n-1]=='\r' ) n--;
- zLine[n] = 0;
- break;
- }
- }
-#if defined(_WIN32) || defined(WIN32)
- /* For interactive input on Windows systems, translate the
- ** multi-byte characterset characters into UTF-8. */
- if( stdin_is_interactive && in==stdin ){
- char *zTrans = sqlite3_win32_mbcs_to_utf8_v2(zLine, 0);
- if( zTrans ){
- int nTrans = strlen30(zTrans)+1;
- if( nTrans>nLine ){
- zLine = realloc(zLine, nTrans);
- if( zLine==0 ){
- sqlite3_free(zTrans);
- return 0;
- }
- }
- memcpy(zLine, zTrans, nTrans);
- sqlite3_free(zTrans);
- }
- }
-#endif /* defined(_WIN32) || defined(WIN32) */
- return zLine;
-}
-
-/*
-** Retrieve a single line of input text.
-**
-** If in==0 then read from standard input and prompt before each line.
-** If isContinuation is true, then a continuation prompt is appropriate.
-** If isContinuation is zero, then the main prompt should be used.
-**
-** If zPrior is not NULL then it is a buffer from a prior call to this
-** routine that can be reused.
-**
-** The result is stored in space obtained from malloc() and must either
-** be freed by the caller or else passed back into this routine via the
-** zPrior argument for reuse.
-*/
-static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
- char *zPrompt;
- char *zResult;
- if( in!=0 ){
- zResult = local_getline(zPrior, in);
- }else{
- zPrompt = isContinuation ? continuePrompt : mainPrompt;
-#if SHELL_USE_LOCAL_GETLINE
- printf("%s", zPrompt);
- fflush(stdout);
- zResult = local_getline(zPrior, stdin);
-#else
- free(zPrior);
- zResult = shell_readline(zPrompt);
- if( zResult && *zResult ) shell_add_history(zResult);
-#endif
- }
- return zResult;
-}
-
-
-/*
-** Return the value of a hexadecimal digit. Return -1 if the input
-** is not a hex digit.
-*/
-static int hexDigitValue(char c){
- if( c>='0' && c<='9' ) return c - '0';
- if( c>='a' && c<='f' ) return c - 'a' + 10;
- if( c>='A' && c<='F' ) return c - 'A' + 10;
- return -1;
-}
-
-/*
-** Interpret zArg as an integer value, possibly with suffixes.
-*/
-static sqlite3_int64 integerValue(const char *zArg){
- sqlite3_int64 v = 0;
- static const struct { char *zSuffix; int iMult; } aMult[] = {
- { "KiB", 1024 },
- { "MiB", 1024*1024 },
- { "GiB", 1024*1024*1024 },
- { "KB", 1000 },
- { "MB", 1000000 },
- { "GB", 1000000000 },
- { "K", 1000 },
- { "M", 1000000 },
- { "G", 1000000000 },
- };
- int i;
- int isNeg = 0;
- if( zArg[0]=='-' ){
- isNeg = 1;
- zArg++;
- }else if( zArg[0]=='+' ){
- zArg++;
- }
- if( zArg[0]=='0' && zArg[1]=='x' ){
- int x;
- zArg += 2;
- while( (x = hexDigitValue(zArg[0]))>=0 ){
- v = (v<<4) + x;
- zArg++;
- }
- }else{
- while( IsDigit(zArg[0]) ){
- v = v*10 + zArg[0] - '0';
- zArg++;
- }
- }
- for(i=0; iz);
- initText(p);
-}
-
-/* zIn is either a pointer to a NULL-terminated string in memory obtained
-** from malloc(), or a NULL pointer. The string pointed to by zAppend is
-** added to zIn, and the result returned in memory obtained from malloc().
-** zIn, if it was not NULL, is freed.
-**
-** If the third argument, quote, is not '\0', then it is used as a
-** quote character for zAppend.
-*/
-static void appendText(ShellText *p, char const *zAppend, char quote){
- int len;
- int i;
- int nAppend = strlen30(zAppend);
-
- len = nAppend+p->n+1;
- if( quote ){
- len += 2;
- for(i=0; in+len>=p->nAlloc ){
- p->nAlloc = p->nAlloc*2 + len + 20;
- p->z = realloc(p->z, p->nAlloc);
- if( p->z==0 ){
- memset(p, 0, sizeof(*p));
- return;
- }
- }
-
- if( quote ){
- char *zCsr = p->z+p->n;
- *zCsr++ = quote;
- for(i=0; in = (int)(zCsr - p->z);
- *zCsr = '\0';
- }else{
- memcpy(p->z+p->n, zAppend, nAppend);
- p->n += nAppend;
- p->z[p->n] = '\0';
- }
-}
-
-/*
-** Attempt to determine if identifier zName needs to be quoted, either
-** because it contains non-alphanumeric characters, or because it is an
-** SQLite keyword. Be conservative in this estimate: When in doubt assume
-** that quoting is required.
-**
-** Return '"' if quoting is required. Return 0 if no quoting is required.
-*/
-static char quoteChar(const char *zName){
- /* All SQLite keywords, in alphabetical order */
- static const char *azKeywords[] = {
- "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS",
- "ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY",
- "CASCADE", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT",
- "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE",
- "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE",
- "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH",
- "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN",
- "FAIL", "FOR", "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF",
- "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED", "INITIALLY", "INNER",
- "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY",
- "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL", "NO", "NOT", "NOTNULL",
- "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN", "PRAGMA",
- "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP",
- "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT",
- "ROLLBACK", "ROW", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP",
- "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER", "UNION", "UNIQUE",
- "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN", "WHERE",
- "WITH", "WITHOUT",
- };
- int i, lwr, upr, mid, c;
- if( !isalpha((unsigned char)zName[0]) && zName[0]!='_' ) return '"';
- for(i=0; zName[i]; i++){
- if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ) return '"';
- }
- lwr = 0;
- upr = sizeof(azKeywords)/sizeof(azKeywords[0]) - 1;
- while( lwr<=upr ){
- mid = (lwr+upr)/2;
- c = sqlite3_stricmp(azKeywords[mid], zName);
- if( c==0 ) return '"';
- if( c<0 ){
- lwr = mid+1;
- }else{
- upr = mid-1;
- }
- }
- return 0;
-}
-
-/*
-** Construct a fake object name and column list to describe the structure
-** of the view, virtual table, or table valued function zSchema.zName.
-*/
-static char *shellFakeSchema(
- sqlite3 *db, /* The database connection containing the vtab */
- const char *zSchema, /* Schema of the database holding the vtab */
- const char *zName /* The name of the virtual table */
-){
- sqlite3_stmt *pStmt = 0;
- char *zSql;
- ShellText s;
- char cQuote;
- char *zDiv = "(";
- int nRow = 0;
-
- zSql = sqlite3_mprintf("PRAGMA \"%w\".table_info=%Q;",
- zSchema ? zSchema : "main", zName);
- sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
- sqlite3_free(zSql);
- initText(&s);
- if( zSchema ){
- cQuote = quoteChar(zSchema);
- if( cQuote && sqlite3_stricmp(zSchema,"temp")==0 ) cQuote = 0;
- appendText(&s, zSchema, cQuote);
- appendText(&s, ".", 0);
- }
- cQuote = quoteChar(zName);
- appendText(&s, zName, cQuote);
- while( sqlite3_step(pStmt)==SQLITE_ROW ){
- const char *zCol = (const char*)sqlite3_column_text(pStmt, 1);
- nRow++;
- appendText(&s, zDiv, 0);
- zDiv = ",";
- cQuote = quoteChar(zCol);
- appendText(&s, zCol, cQuote);
- }
- appendText(&s, ")", 0);
- sqlite3_finalize(pStmt);
- if( nRow==0 ){
- freeText(&s);
- s.z = 0;
- }
- return s.z;
-}
-
-/*
-** SQL function: shell_module_schema(X)
-**
-** Return a fake schema for the table-valued function or eponymous virtual
-** table X.
-*/
-static void shellModuleSchema(
- sqlite3_context *pCtx,
- int nVal,
- sqlite3_value **apVal
-){
- const char *zName = (const char*)sqlite3_value_text(apVal[0]);
- char *zFake = shellFakeSchema(sqlite3_context_db_handle(pCtx), 0, zName);
- UNUSED_PARAMETER(nVal);
- if( zFake ){
- sqlite3_result_text(pCtx, sqlite3_mprintf("/* %s */", zFake),
- -1, sqlite3_free);
- free(zFake);
- }
-}
-
-/*
-** SQL function: shell_add_schema(S,X)
-**
-** Add the schema name X to the CREATE statement in S and return the result.
-** Examples:
-**
-** CREATE TABLE t1(x) -> CREATE TABLE xyz.t1(x);
-**
-** Also works on
-**
-** CREATE INDEX
-** CREATE UNIQUE INDEX
-** CREATE VIEW
-** CREATE TRIGGER
-** CREATE VIRTUAL TABLE
-**
-** This UDF is used by the .schema command to insert the schema name of
-** attached databases into the middle of the sqlite_master.sql field.
-*/
-static void shellAddSchemaName(
- sqlite3_context *pCtx,
- int nVal,
- sqlite3_value **apVal
-){
- static const char *aPrefix[] = {
- "TABLE",
- "INDEX",
- "UNIQUE INDEX",
- "VIEW",
- "TRIGGER",
- "VIRTUAL TABLE"
- };
- int i = 0;
- const char *zIn = (const char*)sqlite3_value_text(apVal[0]);
- const char *zSchema = (const char*)sqlite3_value_text(apVal[1]);
- const char *zName = (const char*)sqlite3_value_text(apVal[2]);
- sqlite3 *db = sqlite3_context_db_handle(pCtx);
- UNUSED_PARAMETER(nVal);
- if( zIn!=0 && strncmp(zIn, "CREATE ", 7)==0 ){
- for(i=0; i<(int)(sizeof(aPrefix)/sizeof(aPrefix[0])); i++){
- int n = strlen30(aPrefix[i]);
- if( strncmp(zIn+7, aPrefix[i], n)==0 && zIn[n+7]==' ' ){
- char *z = 0;
- char *zFake = 0;
- if( zSchema ){
- char cQuote = quoteChar(zSchema);
- if( cQuote && sqlite3_stricmp(zSchema,"temp")!=0 ){
- z = sqlite3_mprintf("%.*s \"%w\".%s", n+7, zIn, zSchema, zIn+n+8);
- }else{
- z = sqlite3_mprintf("%.*s %s.%s", n+7, zIn, zSchema, zIn+n+8);
- }
- }
- if( zName
- && aPrefix[i][0]=='V'
- && (zFake = shellFakeSchema(db, zSchema, zName))!=0
- ){
- if( z==0 ){
- z = sqlite3_mprintf("%s\n/* %s */", zIn, zFake);
- }else{
- z = sqlite3_mprintf("%z\n/* %s */", z, zFake);
- }
- free(zFake);
- }
- if( z ){
- sqlite3_result_text(pCtx, z, -1, sqlite3_free);
- return;
- }
- }
- }
- }
- sqlite3_result_value(pCtx, apVal[0]);
-}
-
-/*
-** The source code for several run-time loadable extensions is inserted
-** below by the ../tool/mkshellc.tcl script. Before processing that included
-** code, we need to override some macros to make the included program code
-** work here in the middle of this regular program.
-*/
-#define SQLITE_EXTENSION_INIT1
-#define SQLITE_EXTENSION_INIT2(X) (void)(X)
-
-#if defined(_WIN32) && defined(_MSC_VER)
-/************************* Begin test_windirent.h ******************/
-/*
-** 2015 November 30
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains declarations for most of the opendir() family of
-** POSIX functions on Win32 using the MSVCRT.
-*/
-
-#if defined(_WIN32) && defined(_MSC_VER) && !defined(SQLITE_WINDIRENT_H)
-#define SQLITE_WINDIRENT_H
-
-/*
-** We need several data types from the Windows SDK header.
-*/
-
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-
-#include "windows.h"
-
-/*
-** We need several support functions from the SQLite core.
-*/
-
-
-/*
-** We need several things from the ANSI and MSVCRT headers.
-*/
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-/*
-** We may need several defines that should have been in "sys/stat.h".
-*/
-
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-#endif
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#endif
-
-#ifndef S_ISLNK
-#define S_ISLNK(mode) (0)
-#endif
-
-/*
-** We may need to provide the "mode_t" type.
-*/
-
-#ifndef MODE_T_DEFINED
- #define MODE_T_DEFINED
- typedef unsigned short mode_t;
-#endif
-
-/*
-** We may need to provide the "ino_t" type.
-*/
-
-#ifndef INO_T_DEFINED
- #define INO_T_DEFINED
- typedef unsigned short ino_t;
-#endif
-
-/*
-** We need to define "NAME_MAX" if it was not present in "limits.h".
-*/
-
-#ifndef NAME_MAX
-# ifdef FILENAME_MAX
-# define NAME_MAX (FILENAME_MAX)
-# else
-# define NAME_MAX (260)
-# endif
-#endif
-
-/*
-** We need to define "NULL_INTPTR_T" and "BAD_INTPTR_T".
-*/
-
-#ifndef NULL_INTPTR_T
-# define NULL_INTPTR_T ((intptr_t)(0))
-#endif
-
-#ifndef BAD_INTPTR_T
-# define BAD_INTPTR_T ((intptr_t)(-1))
-#endif
-
-/*
-** We need to provide the necessary structures and related types.
-*/
-
-#ifndef DIRENT_DEFINED
-#define DIRENT_DEFINED
-typedef struct DIRENT DIRENT;
-typedef DIRENT *LPDIRENT;
-struct DIRENT {
- ino_t d_ino; /* Sequence number, do not use. */
- unsigned d_attributes; /* Win32 file attributes. */
- char d_name[NAME_MAX + 1]; /* Name within the directory. */
-};
-#endif
-
-#ifndef DIR_DEFINED
-#define DIR_DEFINED
-typedef struct DIR DIR;
-typedef DIR *LPDIR;
-struct DIR {
- intptr_t d_handle; /* Value returned by "_findfirst". */
- DIRENT d_first; /* DIRENT constructed based on "_findfirst". */
- DIRENT d_next; /* DIRENT constructed based on "_findnext". */
-};
-#endif
-
-/*
-** Provide a macro, for use by the implementation, to determine if a
-** particular directory entry should be skipped over when searching for
-** the next directory entry that should be returned by the readdir() or
-** readdir_r() functions.
-*/
-
-#ifndef is_filtered
-# define is_filtered(a) ((((a).attrib)&_A_HIDDEN) || (((a).attrib)&_A_SYSTEM))
-#endif
-
-/*
-** Provide the function prototype for the POSIX compatiable getenv()
-** function. This function is not thread-safe.
-*/
-
-extern const char *windirent_getenv(const char *name);
-
-/*
-** Finally, we can provide the function prototypes for the opendir(),
-** readdir(), readdir_r(), and closedir() POSIX functions.
-*/
-
-extern LPDIR opendir(const char *dirname);
-extern LPDIRENT readdir(LPDIR dirp);
-extern INT readdir_r(LPDIR dirp, LPDIRENT entry, LPDIRENT *result);
-extern INT closedir(LPDIR dirp);
-
-#endif /* defined(WIN32) && defined(_MSC_VER) */
-
-/************************* End test_windirent.h ********************/
-/************************* Begin test_windirent.c ******************/
-/*
-** 2015 November 30
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code to implement most of the opendir() family of
-** POSIX functions on Win32 using the MSVCRT.
-*/
-
-#if defined(_WIN32) && defined(_MSC_VER)
-/* #include "test_windirent.h" */
-
-/*
-** Implementation of the POSIX getenv() function using the Win32 API.
-** This function is not thread-safe.
-*/
-const char *windirent_getenv(
- const char *name
-){
- static char value[32768]; /* Maximum length, per MSDN */
- DWORD dwSize = sizeof(value) / sizeof(char); /* Size in chars */
- DWORD dwRet; /* Value returned by GetEnvironmentVariableA() */
-
- memset(value, 0, sizeof(value));
- dwRet = GetEnvironmentVariableA(name, value, dwSize);
- if( dwRet==0 || dwRet>dwSize ){
- /*
- ** The function call to GetEnvironmentVariableA() failed -OR-
- ** the buffer is not large enough. Either way, return NULL.
- */
- return 0;
- }else{
- /*
- ** The function call to GetEnvironmentVariableA() succeeded
- ** -AND- the buffer contains the entire value.
- */
- return value;
- }
-}
-
-/*
-** Implementation of the POSIX opendir() function using the MSVCRT.
-*/
-LPDIR opendir(
- const char *dirname
-){
- struct _finddata_t data;
- LPDIR dirp = (LPDIR)sqlite3_malloc(sizeof(DIR));
- SIZE_T namesize = sizeof(data.name) / sizeof(data.name[0]);
-
- if( dirp==NULL ) return NULL;
- memset(dirp, 0, sizeof(DIR));
-
- /* TODO: Remove this if Unix-style root paths are not used. */
- if( sqlite3_stricmp(dirname, "/")==0 ){
- dirname = windirent_getenv("SystemDrive");
- }
-
- memset(&data, 0, sizeof(struct _finddata_t));
- _snprintf(data.name, namesize, "%s\\*", dirname);
- dirp->d_handle = _findfirst(data.name, &data);
-
- if( dirp->d_handle==BAD_INTPTR_T ){
- closedir(dirp);
- return NULL;
- }
-
- /* TODO: Remove this block to allow hidden and/or system files. */
- if( is_filtered(data) ){
-next:
-
- memset(&data, 0, sizeof(struct _finddata_t));
- if( _findnext(dirp->d_handle, &data)==-1 ){
- closedir(dirp);
- return NULL;
- }
-
- /* TODO: Remove this block to allow hidden and/or system files. */
- if( is_filtered(data) ) goto next;
- }
-
- dirp->d_first.d_attributes = data.attrib;
- strncpy(dirp->d_first.d_name, data.name, NAME_MAX);
- dirp->d_first.d_name[NAME_MAX] = '\0';
-
- return dirp;
-}
-
-/*
-** Implementation of the POSIX readdir() function using the MSVCRT.
-*/
-LPDIRENT readdir(
- LPDIR dirp
-){
- struct _finddata_t data;
-
- if( dirp==NULL ) return NULL;
-
- if( dirp->d_first.d_ino==0 ){
- dirp->d_first.d_ino++;
- dirp->d_next.d_ino++;
-
- return &dirp->d_first;
- }
-
-next:
-
- memset(&data, 0, sizeof(struct _finddata_t));
- if( _findnext(dirp->d_handle, &data)==-1 ) return NULL;
-
- /* TODO: Remove this block to allow hidden and/or system files. */
- if( is_filtered(data) ) goto next;
-
- dirp->d_next.d_ino++;
- dirp->d_next.d_attributes = data.attrib;
- strncpy(dirp->d_next.d_name, data.name, NAME_MAX);
- dirp->d_next.d_name[NAME_MAX] = '\0';
-
- return &dirp->d_next;
-}
-
-/*
-** Implementation of the POSIX readdir_r() function using the MSVCRT.
-*/
-INT readdir_r(
- LPDIR dirp,
- LPDIRENT entry,
- LPDIRENT *result
-){
- struct _finddata_t data;
-
- if( dirp==NULL ) return EBADF;
-
- if( dirp->d_first.d_ino==0 ){
- dirp->d_first.d_ino++;
- dirp->d_next.d_ino++;
-
- entry->d_ino = dirp->d_first.d_ino;
- entry->d_attributes = dirp->d_first.d_attributes;
- strncpy(entry->d_name, dirp->d_first.d_name, NAME_MAX);
- entry->d_name[NAME_MAX] = '\0';
-
- *result = entry;
- return 0;
- }
-
-next:
-
- memset(&data, 0, sizeof(struct _finddata_t));
- if( _findnext(dirp->d_handle, &data)==-1 ){
- *result = NULL;
- return ENOENT;
- }
-
- /* TODO: Remove this block to allow hidden and/or system files. */
- if( is_filtered(data) ) goto next;
-
- entry->d_ino = (ino_t)-1; /* not available */
- entry->d_attributes = data.attrib;
- strncpy(entry->d_name, data.name, NAME_MAX);
- entry->d_name[NAME_MAX] = '\0';
-
- *result = entry;
- return 0;
-}
-
-/*
-** Implementation of the POSIX closedir() function using the MSVCRT.
-*/
-INT closedir(
- LPDIR dirp
-){
- INT result = 0;
-
- if( dirp==NULL ) return EINVAL;
-
- if( dirp->d_handle!=NULL_INTPTR_T && dirp->d_handle!=BAD_INTPTR_T ){
- result = _findclose(dirp->d_handle);
- }
-
- sqlite3_free(dirp);
- return result;
-}
-
-#endif /* defined(WIN32) && defined(_MSC_VER) */
-
-/************************* End test_windirent.c ********************/
-#define dirent DIRENT
-#endif
-/************************* Begin ../ext/misc/shathree.c ******************/
-/*
-** 2017-03-08
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** This SQLite extension implements a functions that compute SHA1 hashes.
-** Two SQL functions are implemented:
-**
-** sha3(X,SIZE)
-** sha3_query(Y,SIZE)
-**
-** The sha3(X) function computes the SHA3 hash of the input X, or NULL if
-** X is NULL.
-**
-** The sha3_query(Y) function evalutes all queries in the SQL statements of Y
-** and returns a hash of their results.
-**
-** The SIZE argument is optional. If omitted, the SHA3-256 hash algorithm
-** is used. If SIZE is included it must be one of the integers 224, 256,
-** 384, or 512, to determine SHA3 hash variant that is computed.
-*/
-SQLITE_EXTENSION_INIT1
-#include
-#include
-#include
-/* typedef sqlite3_uint64 u64; */
-
-/******************************************************************************
-** The Hash Engine
-*/
-/*
-** Macros to determine whether the machine is big or little endian,
-** and whether or not that determination is run-time or compile-time.
-**
-** For best performance, an attempt is made to guess at the byte-order
-** using C-preprocessor macros. If that is unsuccessful, or if
-** -DSHA3_BYTEORDER=0 is set, then byte-order is determined
-** at run-time.
-*/
-#ifndef SHA3_BYTEORDER
-# if defined(i386) || defined(__i386__) || defined(_M_IX86) || \
- defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
- defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
- defined(__arm__)
-# define SHA3_BYTEORDER 1234
-# elif defined(sparc) || defined(__ppc__)
-# define SHA3_BYTEORDER 4321
-# else
-# define SHA3_BYTEORDER 0
-# endif
-#endif
-
-
-/*
-** State structure for a SHA3 hash in progress
-*/
-typedef struct SHA3Context SHA3Context;
-struct SHA3Context {
- union {
- u64 s[25]; /* Keccak state. 5x5 lines of 64 bits each */
- unsigned char x[1600]; /* ... or 1600 bytes */
- } u;
- unsigned nRate; /* Bytes of input accepted per Keccak iteration */
- unsigned nLoaded; /* Input bytes loaded into u.x[] so far this cycle */
- unsigned ixMask; /* Insert next input into u.x[nLoaded^ixMask]. */
-};
-
-/*
-** A single step of the Keccak mixing function for a 1600-bit state
-*/
-static void KeccakF1600Step(SHA3Context *p){
- int i;
- u64 b0, b1, b2, b3, b4;
- u64 c0, c1, c2, c3, c4;
- u64 d0, d1, d2, d3, d4;
- static const u64 RC[] = {
- 0x0000000000000001ULL, 0x0000000000008082ULL,
- 0x800000000000808aULL, 0x8000000080008000ULL,
- 0x000000000000808bULL, 0x0000000080000001ULL,
- 0x8000000080008081ULL, 0x8000000000008009ULL,
- 0x000000000000008aULL, 0x0000000000000088ULL,
- 0x0000000080008009ULL, 0x000000008000000aULL,
- 0x000000008000808bULL, 0x800000000000008bULL,
- 0x8000000000008089ULL, 0x8000000000008003ULL,
- 0x8000000000008002ULL, 0x8000000000000080ULL,
- 0x000000000000800aULL, 0x800000008000000aULL,
- 0x8000000080008081ULL, 0x8000000000008080ULL,
- 0x0000000080000001ULL, 0x8000000080008008ULL
- };
-# define a00 (p->u.s[0])
-# define a01 (p->u.s[1])
-# define a02 (p->u.s[2])
-# define a03 (p->u.s[3])
-# define a04 (p->u.s[4])
-# define a10 (p->u.s[5])
-# define a11 (p->u.s[6])
-# define a12 (p->u.s[7])
-# define a13 (p->u.s[8])
-# define a14 (p->u.s[9])
-# define a20 (p->u.s[10])
-# define a21 (p->u.s[11])
-# define a22 (p->u.s[12])
-# define a23 (p->u.s[13])
-# define a24 (p->u.s[14])
-# define a30 (p->u.s[15])
-# define a31 (p->u.s[16])
-# define a32 (p->u.s[17])
-# define a33 (p->u.s[18])
-# define a34 (p->u.s[19])
-# define a40 (p->u.s[20])
-# define a41 (p->u.s[21])
-# define a42 (p->u.s[22])
-# define a43 (p->u.s[23])
-# define a44 (p->u.s[24])
-# define ROL64(a,x) ((a<>(64-x)))
-
- for(i=0; i<24; i+=4){
- c0 = a00^a10^a20^a30^a40;
- c1 = a01^a11^a21^a31^a41;
- c2 = a02^a12^a22^a32^a42;
- c3 = a03^a13^a23^a33^a43;
- c4 = a04^a14^a24^a34^a44;
- d0 = c4^ROL64(c1, 1);
- d1 = c0^ROL64(c2, 1);
- d2 = c1^ROL64(c3, 1);
- d3 = c2^ROL64(c4, 1);
- d4 = c3^ROL64(c0, 1);
-
- b0 = (a00^d0);
- b1 = ROL64((a11^d1), 44);
- b2 = ROL64((a22^d2), 43);
- b3 = ROL64((a33^d3), 21);
- b4 = ROL64((a44^d4), 14);
- a00 = b0 ^((~b1)& b2 );
- a00 ^= RC[i];
- a11 = b1 ^((~b2)& b3 );
- a22 = b2 ^((~b3)& b4 );
- a33 = b3 ^((~b4)& b0 );
- a44 = b4 ^((~b0)& b1 );
-
- b2 = ROL64((a20^d0), 3);
- b3 = ROL64((a31^d1), 45);
- b4 = ROL64((a42^d2), 61);
- b0 = ROL64((a03^d3), 28);
- b1 = ROL64((a14^d4), 20);
- a20 = b0 ^((~b1)& b2 );
- a31 = b1 ^((~b2)& b3 );
- a42 = b2 ^((~b3)& b4 );
- a03 = b3 ^((~b4)& b0 );
- a14 = b4 ^((~b0)& b1 );
-
- b4 = ROL64((a40^d0), 18);
- b0 = ROL64((a01^d1), 1);
- b1 = ROL64((a12^d2), 6);
- b2 = ROL64((a23^d3), 25);
- b3 = ROL64((a34^d4), 8);
- a40 = b0 ^((~b1)& b2 );
- a01 = b1 ^((~b2)& b3 );
- a12 = b2 ^((~b3)& b4 );
- a23 = b3 ^((~b4)& b0 );
- a34 = b4 ^((~b0)& b1 );
-
- b1 = ROL64((a10^d0), 36);
- b2 = ROL64((a21^d1), 10);
- b3 = ROL64((a32^d2), 15);
- b4 = ROL64((a43^d3), 56);
- b0 = ROL64((a04^d4), 27);
- a10 = b0 ^((~b1)& b2 );
- a21 = b1 ^((~b2)& b3 );
- a32 = b2 ^((~b3)& b4 );
- a43 = b3 ^((~b4)& b0 );
- a04 = b4 ^((~b0)& b1 );
-
- b3 = ROL64((a30^d0), 41);
- b4 = ROL64((a41^d1), 2);
- b0 = ROL64((a02^d2), 62);
- b1 = ROL64((a13^d3), 55);
- b2 = ROL64((a24^d4), 39);
- a30 = b0 ^((~b1)& b2 );
- a41 = b1 ^((~b2)& b3 );
- a02 = b2 ^((~b3)& b4 );
- a13 = b3 ^((~b4)& b0 );
- a24 = b4 ^((~b0)& b1 );
-
- c0 = a00^a20^a40^a10^a30;
- c1 = a11^a31^a01^a21^a41;
- c2 = a22^a42^a12^a32^a02;
- c3 = a33^a03^a23^a43^a13;
- c4 = a44^a14^a34^a04^a24;
- d0 = c4^ROL64(c1, 1);
- d1 = c0^ROL64(c2, 1);
- d2 = c1^ROL64(c3, 1);
- d3 = c2^ROL64(c4, 1);
- d4 = c3^ROL64(c0, 1);
-
- b0 = (a00^d0);
- b1 = ROL64((a31^d1), 44);
- b2 = ROL64((a12^d2), 43);
- b3 = ROL64((a43^d3), 21);
- b4 = ROL64((a24^d4), 14);
- a00 = b0 ^((~b1)& b2 );
- a00 ^= RC[i+1];
- a31 = b1 ^((~b2)& b3 );
- a12 = b2 ^((~b3)& b4 );
- a43 = b3 ^((~b4)& b0 );
- a24 = b4 ^((~b0)& b1 );
-
- b2 = ROL64((a40^d0), 3);
- b3 = ROL64((a21^d1), 45);
- b4 = ROL64((a02^d2), 61);
- b0 = ROL64((a33^d3), 28);
- b1 = ROL64((a14^d4), 20);
- a40 = b0 ^((~b1)& b2 );
- a21 = b1 ^((~b2)& b3 );
- a02 = b2 ^((~b3)& b4 );
- a33 = b3 ^((~b4)& b0 );
- a14 = b4 ^((~b0)& b1 );
-
- b4 = ROL64((a30^d0), 18);
- b0 = ROL64((a11^d1), 1);
- b1 = ROL64((a42^d2), 6);
- b2 = ROL64((a23^d3), 25);
- b3 = ROL64((a04^d4), 8);
- a30 = b0 ^((~b1)& b2 );
- a11 = b1 ^((~b2)& b3 );
- a42 = b2 ^((~b3)& b4 );
- a23 = b3 ^((~b4)& b0 );
- a04 = b4 ^((~b0)& b1 );
-
- b1 = ROL64((a20^d0), 36);
- b2 = ROL64((a01^d1), 10);
- b3 = ROL64((a32^d2), 15);
- b4 = ROL64((a13^d3), 56);
- b0 = ROL64((a44^d4), 27);
- a20 = b0 ^((~b1)& b2 );
- a01 = b1 ^((~b2)& b3 );
- a32 = b2 ^((~b3)& b4 );
- a13 = b3 ^((~b4)& b0 );
- a44 = b4 ^((~b0)& b1 );
-
- b3 = ROL64((a10^d0), 41);
- b4 = ROL64((a41^d1), 2);
- b0 = ROL64((a22^d2), 62);
- b1 = ROL64((a03^d3), 55);
- b2 = ROL64((a34^d4), 39);
- a10 = b0 ^((~b1)& b2 );
- a41 = b1 ^((~b2)& b3 );
- a22 = b2 ^((~b3)& b4 );
- a03 = b3 ^((~b4)& b0 );
- a34 = b4 ^((~b0)& b1 );
-
- c0 = a00^a40^a30^a20^a10;
- c1 = a31^a21^a11^a01^a41;
- c2 = a12^a02^a42^a32^a22;
- c3 = a43^a33^a23^a13^a03;
- c4 = a24^a14^a04^a44^a34;
- d0 = c4^ROL64(c1, 1);
- d1 = c0^ROL64(c2, 1);
- d2 = c1^ROL64(c3, 1);
- d3 = c2^ROL64(c4, 1);
- d4 = c3^ROL64(c0, 1);
-
- b0 = (a00^d0);
- b1 = ROL64((a21^d1), 44);
- b2 = ROL64((a42^d2), 43);
- b3 = ROL64((a13^d3), 21);
- b4 = ROL64((a34^d4), 14);
- a00 = b0 ^((~b1)& b2 );
- a00 ^= RC[i+2];
- a21 = b1 ^((~b2)& b3 );
- a42 = b2 ^((~b3)& b4 );
- a13 = b3 ^((~b4)& b0 );
- a34 = b4 ^((~b0)& b1 );
-
- b2 = ROL64((a30^d0), 3);
- b3 = ROL64((a01^d1), 45);
- b4 = ROL64((a22^d2), 61);
- b0 = ROL64((a43^d3), 28);
- b1 = ROL64((a14^d4), 20);
- a30 = b0 ^((~b1)& b2 );
- a01 = b1 ^((~b2)& b3 );
- a22 = b2 ^((~b3)& b4 );
- a43 = b3 ^((~b4)& b0 );
- a14 = b4 ^((~b0)& b1 );
-
- b4 = ROL64((a10^d0), 18);
- b0 = ROL64((a31^d1), 1);
- b1 = ROL64((a02^d2), 6);
- b2 = ROL64((a23^d3), 25);
- b3 = ROL64((a44^d4), 8);
- a10 = b0 ^((~b1)& b2 );
- a31 = b1 ^((~b2)& b3 );
- a02 = b2 ^((~b3)& b4 );
- a23 = b3 ^((~b4)& b0 );
- a44 = b4 ^((~b0)& b1 );
-
- b1 = ROL64((a40^d0), 36);
- b2 = ROL64((a11^d1), 10);
- b3 = ROL64((a32^d2), 15);
- b4 = ROL64((a03^d3), 56);
- b0 = ROL64((a24^d4), 27);
- a40 = b0 ^((~b1)& b2 );
- a11 = b1 ^((~b2)& b3 );
- a32 = b2 ^((~b3)& b4 );
- a03 = b3 ^((~b4)& b0 );
- a24 = b4 ^((~b0)& b1 );
-
- b3 = ROL64((a20^d0), 41);
- b4 = ROL64((a41^d1), 2);
- b0 = ROL64((a12^d2), 62);
- b1 = ROL64((a33^d3), 55);
- b2 = ROL64((a04^d4), 39);
- a20 = b0 ^((~b1)& b2 );
- a41 = b1 ^((~b2)& b3 );
- a12 = b2 ^((~b3)& b4 );
- a33 = b3 ^((~b4)& b0 );
- a04 = b4 ^((~b0)& b1 );
-
- c0 = a00^a30^a10^a40^a20;
- c1 = a21^a01^a31^a11^a41;
- c2 = a42^a22^a02^a32^a12;
- c3 = a13^a43^a23^a03^a33;
- c4 = a34^a14^a44^a24^a04;
- d0 = c4^ROL64(c1, 1);
- d1 = c0^ROL64(c2, 1);
- d2 = c1^ROL64(c3, 1);
- d3 = c2^ROL64(c4, 1);
- d4 = c3^ROL64(c0, 1);
-
- b0 = (a00^d0);
- b1 = ROL64((a01^d1), 44);
- b2 = ROL64((a02^d2), 43);
- b3 = ROL64((a03^d3), 21);
- b4 = ROL64((a04^d4), 14);
- a00 = b0 ^((~b1)& b2 );
- a00 ^= RC[i+3];
- a01 = b1 ^((~b2)& b3 );
- a02 = b2 ^((~b3)& b4 );
- a03 = b3 ^((~b4)& b0 );
- a04 = b4 ^((~b0)& b1 );
-
- b2 = ROL64((a10^d0), 3);
- b3 = ROL64((a11^d1), 45);
- b4 = ROL64((a12^d2), 61);
- b0 = ROL64((a13^d3), 28);
- b1 = ROL64((a14^d4), 20);
- a10 = b0 ^((~b1)& b2 );
- a11 = b1 ^((~b2)& b3 );
- a12 = b2 ^((~b3)& b4 );
- a13 = b3 ^((~b4)& b0 );
- a14 = b4 ^((~b0)& b1 );
-
- b4 = ROL64((a20^d0), 18);
- b0 = ROL64((a21^d1), 1);
- b1 = ROL64((a22^d2), 6);
- b2 = ROL64((a23^d3), 25);
- b3 = ROL64((a24^d4), 8);
- a20 = b0 ^((~b1)& b2 );
- a21 = b1 ^((~b2)& b3 );
- a22 = b2 ^((~b3)& b4 );
- a23 = b3 ^((~b4)& b0 );
- a24 = b4 ^((~b0)& b1 );
-
- b1 = ROL64((a30^d0), 36);
- b2 = ROL64((a31^d1), 10);
- b3 = ROL64((a32^d2), 15);
- b4 = ROL64((a33^d3), 56);
- b0 = ROL64((a34^d4), 27);
- a30 = b0 ^((~b1)& b2 );
- a31 = b1 ^((~b2)& b3 );
- a32 = b2 ^((~b3)& b4 );
- a33 = b3 ^((~b4)& b0 );
- a34 = b4 ^((~b0)& b1 );
-
- b3 = ROL64((a40^d0), 41);
- b4 = ROL64((a41^d1), 2);
- b0 = ROL64((a42^d2), 62);
- b1 = ROL64((a43^d3), 55);
- b2 = ROL64((a44^d4), 39);
- a40 = b0 ^((~b1)& b2 );
- a41 = b1 ^((~b2)& b3 );
- a42 = b2 ^((~b3)& b4 );
- a43 = b3 ^((~b4)& b0 );
- a44 = b4 ^((~b0)& b1 );
- }
-}
-
-/*
-** Initialize a new hash. iSize determines the size of the hash
-** in bits and should be one of 224, 256, 384, or 512. Or iSize
-** can be zero to use the default hash size of 256 bits.
-*/
-static void SHA3Init(SHA3Context *p, int iSize){
- memset(p, 0, sizeof(*p));
- if( iSize>=128 && iSize<=512 ){
- p->nRate = (1600 - ((iSize + 31)&~31)*2)/8;
- }else{
- p->nRate = (1600 - 2*256)/8;
- }
-#if SHA3_BYTEORDER==1234
- /* Known to be little-endian at compile-time. No-op */
-#elif SHA3_BYTEORDER==4321
- p->ixMask = 7; /* Big-endian */
-#else
- {
- static unsigned int one = 1;
- if( 1==*(unsigned char*)&one ){
- /* Little endian. No byte swapping. */
- p->ixMask = 0;
- }else{
- /* Big endian. Byte swap. */
- p->ixMask = 7;
- }
- }
-#endif
-}
-
-/*
-** Make consecutive calls to the SHA3Update function to add new content
-** to the hash
-*/
-static void SHA3Update(
- SHA3Context *p,
- const unsigned char *aData,
- unsigned int nData
-){
- unsigned int i = 0;
-#if SHA3_BYTEORDER==1234
- if( (p->nLoaded % 8)==0 && ((aData - (const unsigned char*)0)&7)==0 ){
- for(; i+7u.s[p->nLoaded/8] ^= *(u64*)&aData[i];
- p->nLoaded += 8;
- if( p->nLoaded>=p->nRate ){
- KeccakF1600Step(p);
- p->nLoaded = 0;
- }
- }
- }
-#endif
- for(; iu.x[p->nLoaded] ^= aData[i];
-#elif SHA3_BYTEORDER==4321
- p->u.x[p->nLoaded^0x07] ^= aData[i];
-#else
- p->u.x[p->nLoaded^p->ixMask] ^= aData[i];
-#endif
- p->nLoaded++;
- if( p->nLoaded==p->nRate ){
- KeccakF1600Step(p);
- p->nLoaded = 0;
- }
- }
-}
-
-/*
-** After all content has been added, invoke SHA3Final() to compute
-** the final hash. The function returns a pointer to the binary
-** hash value.
-*/
-static unsigned char *SHA3Final(SHA3Context *p){
- unsigned int i;
- if( p->nLoaded==p->nRate-1 ){
- const unsigned char c1 = 0x86;
- SHA3Update(p, &c1, 1);
- }else{
- const unsigned char c2 = 0x06;
- const unsigned char c3 = 0x80;
- SHA3Update(p, &c2, 1);
- p->nLoaded = p->nRate - 1;
- SHA3Update(p, &c3, 1);
- }
- for(i=0; inRate; i++){
- p->u.x[i+p->nRate] = p->u.x[i^p->ixMask];
- }
- return &p->u.x[p->nRate];
-}
-/* End of the hashing logic
-*****************************************************************************/
-
-/*
-** Implementation of the sha3(X,SIZE) function.
-**
-** Return a BLOB which is the SIZE-bit SHA3 hash of X. The default
-** size is 256. If X is a BLOB, it is hashed as is.
-** For all other non-NULL types of input, X is converted into a UTF-8 string
-** and the string is hashed without the trailing 0x00 terminator. The hash
-** of a NULL value is NULL.
-*/
-static void sha3Func(
- sqlite3_context *context,
- int argc,
- sqlite3_value **argv
-){
- SHA3Context cx;
- int eType = sqlite3_value_type(argv[0]);
- int nByte = sqlite3_value_bytes(argv[0]);
- int iSize;
- if( argc==1 ){
- iSize = 256;
- }else{
- iSize = sqlite3_value_int(argv[1]);
- if( iSize!=224 && iSize!=256 && iSize!=384 && iSize!=512 ){
- sqlite3_result_error(context, "SHA3 size should be one of: 224 256 "
- "384 512", -1);
- return;
- }
- }
- if( eType==SQLITE_NULL ) return;
- SHA3Init(&cx, iSize);
- if( eType==SQLITE_BLOB ){
- SHA3Update(&cx, sqlite3_value_blob(argv[0]), nByte);
- }else{
- SHA3Update(&cx, sqlite3_value_text(argv[0]), nByte);
- }
- sqlite3_result_blob(context, SHA3Final(&cx), iSize/8, SQLITE_TRANSIENT);
-}
-
-/* Compute a string using sqlite3_vsnprintf() with a maximum length
-** of 50 bytes and add it to the hash.
-*/
-static void hash_step_vformat(
- SHA3Context *p, /* Add content to this context */
- const char *zFormat,
- ...
-){
- va_list ap;
- int n;
- char zBuf[50];
- va_start(ap, zFormat);
- sqlite3_vsnprintf(sizeof(zBuf),zBuf,zFormat,ap);
- va_end(ap);
- n = (int)strlen(zBuf);
- SHA3Update(p, (unsigned char*)zBuf, n);
-}
-
-/*
-** Implementation of the sha3_query(SQL,SIZE) function.
-**
-** This function compiles and runs the SQL statement(s) given in the
-** argument. The results are hashed using a SIZE-bit SHA3. The default
-** size is 256.
-**
-** The format of the byte stream that is hashed is summarized as follows:
-**
-** S:
-** R
-** N
-** I
-** F
-** B:
-** T:
-**
-** is the original SQL text for each statement run and is
-** the size of that text. The SQL text is UTF-8. A single R character
-** occurs before the start of each row. N means a NULL value.
-** I mean an 8-byte little-endian integer . F is a floating point
-** number with an 8-byte little-endian IEEE floating point value .
-** B means blobs of bytes. T means text rendered as
-** bytes of UTF-8. The and values are expressed as an ASCII
-** text integers.
-**
-** For each SQL statement in the X input, there is one S segment. Each
-** S segment is followed by zero or more R segments, one for each row in the
-** result set. After each R, there are one or more N, I, F, B, or T segments,
-** one for each column in the result set. Segments are concatentated directly
-** with no delimiters of any kind.
-*/
-static void sha3QueryFunc(
- sqlite3_context *context,
- int argc,
- sqlite3_value **argv
-){
- sqlite3 *db = sqlite3_context_db_handle(context);
- const char *zSql = (const char*)sqlite3_value_text(argv[0]);
- sqlite3_stmt *pStmt = 0;
- int nCol; /* Number of columns in the result set */
- int i; /* Loop counter */
- int rc;
- int n;
- const char *z;
- SHA3Context cx;
- int iSize;
-
- if( argc==1 ){
- iSize = 256;
- }else{
- iSize = sqlite3_value_int(argv[1]);
- if( iSize!=224 && iSize!=256 && iSize!=384 && iSize!=512 ){
- sqlite3_result_error(context, "SHA3 size should be one of: 224 256 "
- "384 512", -1);
- return;
- }
- }
- if( zSql==0 ) return;
- SHA3Init(&cx, iSize);
- while( zSql[0] ){
- rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zSql);
- if( rc ){
- char *zMsg = sqlite3_mprintf("error SQL statement [%s]: %s",
- zSql, sqlite3_errmsg(db));
- sqlite3_finalize(pStmt);
- sqlite3_result_error(context, zMsg, -1);
- sqlite3_free(zMsg);
- return;
- }
- if( !sqlite3_stmt_readonly(pStmt) ){
- char *zMsg = sqlite3_mprintf("non-query: [%s]", sqlite3_sql(pStmt));
- sqlite3_finalize(pStmt);
- sqlite3_result_error(context, zMsg, -1);
- sqlite3_free(zMsg);
- return;
- }
- nCol = sqlite3_column_count(pStmt);
- z = sqlite3_sql(pStmt);
- n = (int)strlen(z);
- hash_step_vformat(&cx,"S%d:",n);
- SHA3Update(&cx,(unsigned char*)z,n);
-
- /* Compute a hash over the result of the query */
- while( SQLITE_ROW==sqlite3_step(pStmt) ){
- SHA3Update(&cx,(const unsigned char*)"R",1);
- for(i=0; i=1; j--){
- x[j] = u & 0xff;
- u >>= 8;
- }
- x[0] = 'I';
- SHA3Update(&cx, x, 9);
- break;
- }
- case SQLITE_FLOAT: {
- sqlite3_uint64 u;
- int j;
- unsigned char x[9];
- double r = sqlite3_column_double(pStmt,i);
- memcpy(&u, &r, 8);
- for(j=8; j>=1; j--){
- x[j] = u & 0xff;
- u >>= 8;
- }
- x[0] = 'F';
- SHA3Update(&cx,x,9);
- break;
- }
- case SQLITE_TEXT: {
- int n2 = sqlite3_column_bytes(pStmt, i);
- const unsigned char *z2 = sqlite3_column_text(pStmt, i);
- hash_step_vformat(&cx,"T%d:",n2);
- SHA3Update(&cx, z2, n2);
- break;
- }
- case SQLITE_BLOB: {
- int n2 = sqlite3_column_bytes(pStmt, i);
- const unsigned char *z2 = sqlite3_column_blob(pStmt, i);
- hash_step_vformat(&cx,"B%d:",n2);
- SHA3Update(&cx, z2, n2);
- break;
- }
- }
- }
- }
- sqlite3_finalize(pStmt);
- }
- sqlite3_result_blob(context, SHA3Final(&cx), iSize/8, SQLITE_TRANSIENT);
-}
-
-
-#ifdef _WIN32
-
-#endif
-int sqlite3_shathree_init(
- sqlite3 *db,
- char **pzErrMsg,
- const sqlite3_api_routines *pApi
-){
- int rc = SQLITE_OK;
- SQLITE_EXTENSION_INIT2(pApi);
- (void)pzErrMsg; /* Unused parameter */
- rc = sqlite3_create_function(db, "sha3", 1, SQLITE_UTF8, 0,
- sha3Func, 0, 0);
- if( rc==SQLITE_OK ){
- rc = sqlite3_create_function(db, "sha3", 2, SQLITE_UTF8, 0,
- sha3Func, 0, 0);
- }
- if( rc==SQLITE_OK ){
- rc = sqlite3_create_function(db, "sha3_query", 1, SQLITE_UTF8, 0,
- sha3QueryFunc, 0, 0);
- }
- if( rc==SQLITE_OK ){
- rc = sqlite3_create_function(db, "sha3_query", 2, SQLITE_UTF8, 0,
- sha3QueryFunc, 0, 0);
- }
- return rc;
-}
-
-/************************* End ../ext/misc/shathree.c ********************/
-/************************* Begin ../ext/misc/fileio.c ******************/
-/*
-** 2014-06-13
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** This SQLite extension implements SQL functions readfile() and
-** writefile(), and eponymous virtual type "fsdir".
-**
-** WRITEFILE(FILE, DATA [, MODE [, MTIME]]):
-**
-** If neither of the optional arguments is present, then this UDF
-** function writes blob DATA to file FILE. If successful, the number
-** of bytes written is returned. If an error occurs, NULL is returned.
-**
-** If the first option argument - MODE - is present, then it must
-** be passed an integer value that corresponds to a POSIX mode
-** value (file type + permissions, as returned in the stat.st_mode
-** field by the stat() system call). Three types of files may
-** be written/created:
-**
-** regular files: (mode & 0170000)==0100000
-** symbolic links: (mode & 0170000)==0120000
-** directories: (mode & 0170000)==0040000
-**
-** For a directory, the DATA is ignored. For a symbolic link, it is
-** interpreted as text and used as the target of the link. For a
-** regular file, it is interpreted as a blob and written into the
-** named file. Regardless of the type of file, its permissions are
-** set to (mode & 0777) before returning.
-**
-** If the optional MTIME argument is present, then it is interpreted
-** as an integer - the number of seconds since the unix epoch. The
-** modification-time of the target file is set to this value before
-** returning.
-**
-** If three or more arguments are passed to this function and an
-** error is encountered, an exception is raised.
-**
-** READFILE(FILE):
-**
-** Read and return the contents of file FILE (type blob) from disk.
-**
-** FSDIR:
-**
-** Used as follows:
-**
-** SELECT * FROM fsdir($path [, $dir]);
-**
-** Parameter $path is an absolute or relative pathname. If the file that it
-** refers to does not exist, it is an error. If the path refers to a regular
-** file or symbolic link, it returns a single row. Or, if the path refers
-** to a directory, it returns one row for the directory, and one row for each
-** file within the hierarchy rooted at $path.
-**
-** Each row has the following columns:
-**
-** name: Path to file or directory (text value).
-** mode: Value of stat.st_mode for directory entry (an integer).
-** mtime: Value of stat.st_mtime for directory entry (an integer).
-** data: For a regular file, a blob containing the file data. For a
-** symlink, a text value containing the text of the link. For a
-** directory, NULL.
-**
-** If a non-NULL value is specified for the optional $dir parameter and
-** $path is a relative path, then $path is interpreted relative to $dir.
-** And the paths returned in the "name" column of the table are also
-** relative to directory $dir.
-*/
-SQLITE_EXTENSION_INIT1
-#include
-#include
-#include
-
-#include
-#include
-#include
-#if !defined(_WIN32) && !defined(WIN32)
-# include
-# include
-# include
-# include
-#else
-# include "windows.h"
-# include
-# include
-/* # include "test_windirent.h" */
-# define dirent DIRENT
-# ifndef chmod
-# define chmod _chmod
-# endif
-# ifndef stat
-# define stat _stat
-# endif
-# define mkdir(path,mode) _mkdir(path)
-# define lstat(path,buf) stat(path,buf)
-#endif
-#include
-#include
-
-
-#define FSDIR_SCHEMA "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)"
-
-/*
-** Set the result stored by context ctx to a blob containing the
-** contents of file zName.
-*/
-static void readFileContents(sqlite3_context *ctx, const char *zName){
- FILE *in;
- long nIn;
- void *pBuf;
-
- in = fopen(zName, "rb");
- if( in==0 ) return;
- fseek(in, 0, SEEK_END);
- nIn = ftell(in);
- rewind(in);
- pBuf = sqlite3_malloc( nIn );
- if( pBuf && 1==fread(pBuf, nIn, 1, in) ){
- sqlite3_result_blob(ctx, pBuf, nIn, sqlite3_free);
- }else{
- sqlite3_free(pBuf);
- }
- fclose(in);
-}
-
-/*
-** Implementation of the "readfile(X)" SQL function. The entire content
-** of the file named X is read and returned as a BLOB. NULL is returned
-** if the file does not exist or is unreadable.
-*/
-static void readfileFunc(
- sqlite3_context *context,
- int argc,
- sqlite3_value **argv
-){
- const char *zName;
- (void)(argc); /* Unused parameter */
- zName = (const char*)sqlite3_value_text(argv[0]);
- if( zName==0 ) return;
- readFileContents(context, zName);
-}
-
-/*
-** Set the error message contained in context ctx to the results of
-** vprintf(zFmt, ...).
-*/
-static void ctxErrorMsg(sqlite3_context *ctx, const char *zFmt, ...){
- char *zMsg = 0;
- va_list ap;
- va_start(ap, zFmt);
- zMsg = sqlite3_vmprintf(zFmt, ap);
- sqlite3_result_error(ctx, zMsg, -1);
- sqlite3_free(zMsg);
- va_end(ap);
-}
-
-#if defined(_WIN32)
-/*
-** This function is designed to convert a Win32 FILETIME structure into the
-** number of seconds since the Unix Epoch (1970-01-01 00:00:00 UTC).
-*/
-static sqlite3_uint64 fileTimeToUnixTime(
- LPFILETIME pFileTime
-){
- SYSTEMTIME epochSystemTime;
- ULARGE_INTEGER epochIntervals;
- FILETIME epochFileTime;
- ULARGE_INTEGER fileIntervals;
-
- memset(&epochSystemTime, 0, sizeof(SYSTEMTIME));
- epochSystemTime.wYear = 1970;
- epochSystemTime.wMonth = 1;
- epochSystemTime.wDay = 1;
- SystemTimeToFileTime(&epochSystemTime, &epochFileTime);
- epochIntervals.LowPart = epochFileTime.dwLowDateTime;
- epochIntervals.HighPart = epochFileTime.dwHighDateTime;
-
- fileIntervals.LowPart = pFileTime->dwLowDateTime;
- fileIntervals.HighPart = pFileTime->dwHighDateTime;
-
- return (fileIntervals.QuadPart - epochIntervals.QuadPart) / 10000000;
-}
-
-/*
-** This function attempts to normalize the time values found in the stat()
-** buffer to UTC. This is necessary on Win32, where the runtime library
-** appears to return these values as local times.
-*/
-static void statTimesToUtc(
- const char *zPath,
- struct stat *pStatBuf
-){
- HANDLE hFindFile;
- WIN32_FIND_DATAW fd;
- LPWSTR zUnicodeName;
- extern LPWSTR sqlite3_win32_utf8_to_unicode(const char*);
- zUnicodeName = sqlite3_win32_utf8_to_unicode(zPath);
- if( zUnicodeName ){
- memset(&fd, 0, sizeof(WIN32_FIND_DATA));
- hFindFile = FindFirstFileW(zUnicodeName, &fd);
- if( hFindFile!=NULL ){
- pStatBuf->st_ctime = (time_t)fileTimeToUnixTime(&fd.ftCreationTime);
- pStatBuf->st_atime = (time_t)fileTimeToUnixTime(&fd.ftLastAccessTime);
- pStatBuf->st_mtime = (time_t)fileTimeToUnixTime(&fd.ftLastWriteTime);
- FindClose(hFindFile);
- }
- sqlite3_free(zUnicodeName);
- }
-}
-#endif
-
-/*
-** This function is used in place of stat(). On Windows, special handling
-** is required in order for the included time to be returned as UTC. On all
-** other systems, this function simply calls stat().
-*/
-static int fileStat(
- const char *zPath,
- struct stat *pStatBuf
-){
-#if defined(_WIN32)
- int rc = stat(zPath, pStatBuf);
- if( rc==0 ) statTimesToUtc(zPath, pStatBuf);
- return rc;
-#else
- return stat(zPath, pStatBuf);
-#endif
-}
-
-/*
-** This function is used in place of lstat(). On Windows, special handling
-** is required in order for the included time to be returned as UTC. On all
-** other systems, this function simply calls lstat().
-*/
-static int fileLinkStat(
- const char *zPath,
- struct stat *pStatBuf
-){
-#if defined(_WIN32)
- int rc = lstat(zPath, pStatBuf);
- if( rc==0 ) statTimesToUtc(zPath, pStatBuf);
- return rc;
-#else
- return lstat(zPath, pStatBuf);
-#endif
-}
-
-/*
-** Argument zFile is the name of a file that will be created and/or written
-** by SQL function writefile(). This function ensures that the directory
-** zFile will be written to exists, creating it if required. The permissions
-** for any path components created by this function are set to (mode&0777).
-**
-** If an OOM condition is encountered, SQLITE_NOMEM is returned. Otherwise,
-** SQLITE_OK is returned if the directory is successfully created, or
-** SQLITE_ERROR otherwise.
-*/
-static int makeDirectory(
- const char *zFile,
- mode_t mode
-){
- char *zCopy = sqlite3_mprintf("%s", zFile);
- int rc = SQLITE_OK;
-
- if( zCopy==0 ){
- rc = SQLITE_NOMEM;
- }else{
- int nCopy = (int)strlen(zCopy);
- int i = 1;
-
- while( rc==SQLITE_OK ){
- struct stat sStat;
- int rc2;
-
- for(; zCopy[i]!='/' && i=0 ){
-#if defined(_WIN32)
- /* Windows */
- FILETIME lastAccess;
- FILETIME lastWrite;
- SYSTEMTIME currentTime;
- LONGLONG intervals;
- HANDLE hFile;
- LPWSTR zUnicodeName;
- extern LPWSTR sqlite3_win32_utf8_to_unicode(const char*);
-
- GetSystemTime(¤tTime);
- SystemTimeToFileTime(¤tTime, &lastAccess);
- intervals = Int32x32To64(mtime, 10000000) + 116444736000000000;
- lastWrite.dwLowDateTime = (DWORD)intervals;
- lastWrite.dwHighDateTime = intervals >> 32;
- zUnicodeName = sqlite3_win32_utf8_to_unicode(zFile);
- if( zUnicodeName==0 ){
- return 1;
- }
- hFile = CreateFileW(
- zUnicodeName, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS, NULL
- );
- sqlite3_free(zUnicodeName);
- if( hFile!=INVALID_HANDLE_VALUE ){
- BOOL bResult = SetFileTime(hFile, NULL, &lastAccess, &lastWrite);
- CloseHandle(hFile);
- return !bResult;
- }else{
- return 1;
- }
-#elif defined(AT_FDCWD) && 0 /* utimensat() is not universally available */
- /* Recent unix */
- struct timespec times[2];
- times[0].tv_nsec = times[1].tv_nsec = 0;
- times[0].tv_sec = time(0);
- times[1].tv_sec = mtime;
- if( utimensat(AT_FDCWD, zFile, times, AT_SYMLINK_NOFOLLOW) ){
- return 1;
- }
-#else
- /* Legacy unix */
- struct timeval times[2];
- times[0].tv_usec = times[1].tv_usec = 0;
- times[0].tv_sec = time(0);
- times[1].tv_sec = mtime;
- if( utimes(zFile, times) ){
- return 1;
- }
-#endif
- }
-
- return 0;
-}
-
-/*
-** Implementation of the "writefile(W,X[,Y[,Z]]])" SQL function.
-** Refer to header comments at the top of this file for details.
-*/
-static void writefileFunc(
- sqlite3_context *context,
- int argc,
- sqlite3_value **argv
-){
- const char *zFile;
- mode_t mode = 0;
- int res;
- sqlite3_int64 mtime = -1;
-
- if( argc<2 || argc>4 ){
- sqlite3_result_error(context,
- "wrong number of arguments to function writefile()", -1
- );
- return;
- }
-
- zFile = (const char*)sqlite3_value_text(argv[0]);
- if( zFile==0 ) return;
- if( argc>=3 ){
- mode = (mode_t)sqlite3_value_int(argv[2]);
- }
- if( argc==4 ){
- mtime = sqlite3_value_int64(argv[3]);
- }
-
- res = writeFile(context, zFile, argv[1], mode, mtime);
- if( res==1 && errno==ENOENT ){
- if( makeDirectory(zFile, mode)==SQLITE_OK ){
- res = writeFile(context, zFile, argv[1], mode, mtime);
- }
- }
-
- if( argc>2 && res!=0 ){
- if( S_ISLNK(mode) ){
- ctxErrorMsg(context, "failed to create symlink: %s", zFile);
- }else if( S_ISDIR(mode) ){
- ctxErrorMsg(context, "failed to create directory: %s", zFile);
- }else{
- ctxErrorMsg(context, "failed to write file: %s", zFile);
- }
- }
-}
-
-/*
-** SQL function: lsmode(MODE)
-**
-** Given a numberic st_mode from stat(), convert it into a human-readable
-** text string in the style of "ls -l".
-*/
-static void lsModeFunc(
- sqlite3_context *context,
- int argc,
- sqlite3_value **argv
-){
- int i;
- int iMode = sqlite3_value_int(argv[0]);
- char z[16];
- (void)argc;
- if( S_ISLNK(iMode) ){
- z[0] = 'l';
- }else if( S_ISREG(iMode) ){
- z[0] = '-';
- }else if( S_ISDIR(iMode) ){
- z[0] = 'd';
- }else{
- z[0] = '?';
- }
- for(i=0; i<3; i++){
- int m = (iMode >> ((2-i)*3));
- char *a = &z[1 + i*3];
- a[0] = (m & 0x4) ? 'r' : '-';
- a[1] = (m & 0x2) ? 'w' : '-';
- a[2] = (m & 0x1) ? 'x' : '-';
- }
- z[10] = '\0';
- sqlite3_result_text(context, z, -1, SQLITE_TRANSIENT);
-}
-
-#ifndef SQLITE_OMIT_VIRTUALTABLE
-
-/*
-** Cursor type for recursively iterating through a directory structure.
-*/
-typedef struct fsdir_cursor fsdir_cursor;
-typedef struct FsdirLevel FsdirLevel;
-
-struct FsdirLevel {
- DIR *pDir; /* From opendir() */
- char *zDir; /* Name of directory (nul-terminated) */
-};
-
-struct fsdir_cursor {
- sqlite3_vtab_cursor base; /* Base class - must be first */
-
- int nLvl; /* Number of entries in aLvl[] array */
- int iLvl; /* Index of current entry */
- FsdirLevel *aLvl; /* Hierarchy of directories being traversed */
-
- const char *zBase;
- int nBase;
-
- struct stat sStat; /* Current lstat() results */
- char *zPath; /* Path to current entry */
- sqlite3_int64 iRowid; /* Current rowid */
-};
-
-typedef struct fsdir_tab fsdir_tab;
-struct fsdir_tab {
- sqlite3_vtab base; /* Base class - must be first */
-};
-
-/*
-** Construct a new fsdir virtual table object.
-*/
-static int fsdirConnect(
- sqlite3 *db,
- void *pAux,
- int argc, const char *const*argv,
- sqlite3_vtab **ppVtab,
- char **pzErr
-){
- fsdir_tab *pNew = 0;
- int rc;
- (void)pAux;
- (void)argc;
- (void)argv;
- (void)pzErr;
- rc = sqlite3_declare_vtab(db, "CREATE TABLE x" FSDIR_SCHEMA);
- if( rc==SQLITE_OK ){
- pNew = (fsdir_tab*)sqlite3_malloc( sizeof(*pNew) );
- if( pNew==0 ) return SQLITE_NOMEM;
- memset(pNew, 0, sizeof(*pNew));
- }
- *ppVtab = (sqlite3_vtab*)pNew;
- return rc;
-}
-
-/*
-** This method is the destructor for fsdir vtab objects.
-*/
-static int fsdirDisconnect(sqlite3_vtab *pVtab){
- sqlite3_free(pVtab);
- return SQLITE_OK;
-}
-
-/*
-** Constructor for a new fsdir_cursor object.
-*/
-static int fsdirOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
- fsdir_cursor *pCur;
- (void)p;
- pCur = sqlite3_malloc( sizeof(*pCur) );
- if( pCur==0 ) return SQLITE_NOMEM;
- memset(pCur, 0, sizeof(*pCur));
- pCur->iLvl = -1;
- *ppCursor = &pCur->base;
- return SQLITE_OK;
-}
-
-/*
-** Reset a cursor back to the state it was in when first returned
-** by fsdirOpen().
-*/
-static void fsdirResetCursor(fsdir_cursor *pCur){
- int i;
- for(i=0; i<=pCur->iLvl; i++){
- FsdirLevel *pLvl = &pCur->aLvl[i];
- if( pLvl->pDir ) closedir(pLvl->pDir);
- sqlite3_free(pLvl->zDir);
- }
- sqlite3_free(pCur->zPath);
- sqlite3_free(pCur->aLvl);
- pCur->aLvl = 0;
- pCur->zPath = 0;
- pCur->zBase = 0;
- pCur->nBase = 0;
- pCur->nLvl = 0;
- pCur->iLvl = -1;
- pCur->iRowid = 1;
-}
-
-/*
-** Destructor for an fsdir_cursor.
-*/
-static int fsdirClose(sqlite3_vtab_cursor *cur){
- fsdir_cursor *pCur = (fsdir_cursor*)cur;
-
- fsdirResetCursor(pCur);
- sqlite3_free(pCur);
- return SQLITE_OK;
-}
-
-/*
-** Set the error message for the virtual table associated with cursor
-** pCur to the results of vprintf(zFmt, ...).
-*/
-static void fsdirSetErrmsg(fsdir_cursor *pCur, const char *zFmt, ...){
- va_list ap;
- va_start(ap, zFmt);
- pCur->base.pVtab->zErrMsg = sqlite3_vmprintf(zFmt, ap);
- va_end(ap);
-}
-
-
-/*
-** Advance an fsdir_cursor to its next row of output.
-*/
-static int fsdirNext(sqlite3_vtab_cursor *cur){
- fsdir_cursor *pCur = (fsdir_cursor*)cur;
- mode_t m = pCur->sStat.st_mode;
-
- pCur->iRowid++;
- if( S_ISDIR(m) ){
- /* Descend into this directory */
- int iNew = pCur->iLvl + 1;
- FsdirLevel *pLvl;
- if( iNew>=pCur->nLvl ){
- int nNew = iNew+1;
- int nByte = nNew*sizeof(FsdirLevel);
- FsdirLevel *aNew = (FsdirLevel*)sqlite3_realloc(pCur->aLvl, nByte);
- if( aNew==0 ) return SQLITE_NOMEM;
- memset(&aNew[pCur->nLvl], 0, sizeof(FsdirLevel)*(nNew-pCur->nLvl));
- pCur->aLvl = aNew;
- pCur->nLvl = nNew;
- }
- pCur->iLvl = iNew;
- pLvl = &pCur->aLvl[iNew];
-
- pLvl->zDir = pCur->zPath;
- pCur->zPath = 0;
- pLvl->pDir = opendir(pLvl->zDir);
- if( pLvl->pDir==0 ){
- fsdirSetErrmsg(pCur, "cannot read directory: %s", pCur->zPath);
- return SQLITE_ERROR;
- }
- }
-
- while( pCur->iLvl>=0 ){
- FsdirLevel *pLvl = &pCur->aLvl[pCur->iLvl];
- struct dirent *pEntry = readdir(pLvl->pDir);
- if( pEntry ){
- if( pEntry->d_name[0]=='.' ){
- if( pEntry->d_name[1]=='.' && pEntry->d_name[2]=='\0' ) continue;
- if( pEntry->d_name[1]=='\0' ) continue;
- }
- sqlite3_free(pCur->zPath);
- pCur->zPath = sqlite3_mprintf("%s/%s", pLvl->zDir, pEntry->d_name);
- if( pCur->zPath==0 ) return SQLITE_NOMEM;
- if( fileLinkStat(pCur->zPath, &pCur->sStat) ){
- fsdirSetErrmsg(pCur, "cannot stat file: %s", pCur->zPath);
- return SQLITE_ERROR;
- }
- return SQLITE_OK;
- }
- closedir(pLvl->pDir);
- sqlite3_free(pLvl->zDir);
- pLvl->pDir = 0;
- pLvl->zDir = 0;
- pCur->iLvl--;
- }
-
- /* EOF */
- sqlite3_free(pCur->zPath);
- pCur->zPath = 0;
- return SQLITE_OK;
-}
-
-/*
-** Return values of columns for the row at which the series_cursor
-** is currently pointing.
-*/
-static int fsdirColumn(
- sqlite3_vtab_cursor *cur, /* The cursor */
- sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
- int i /* Which column to return */
-){
- fsdir_cursor *pCur = (fsdir_cursor*)cur;
- switch( i ){
- case 0: { /* name */
- sqlite3_result_text(ctx, &pCur->zPath[pCur->nBase], -1, SQLITE_TRANSIENT);
- break;
- }
-
- case 1: /* mode */
- sqlite3_result_int64(ctx, pCur->sStat.st_mode);
- break;
-
- case 2: /* mtime */
- sqlite3_result_int64(ctx, pCur->sStat.st_mtime);
- break;
-
- case 3: { /* data */
- mode_t m = pCur->sStat.st_mode;
- if( S_ISDIR(m) ){
- sqlite3_result_null(ctx);
-#if !defined(_WIN32) && !defined(WIN32)
- }else if( S_ISLNK(m) ){
- char aStatic[64];
- char *aBuf = aStatic;
- int nBuf = 64;
- int n;
-
- while( 1 ){
- n = readlink(pCur->zPath, aBuf, nBuf);
- if( nzPath);
- }
- }
- }
- return SQLITE_OK;
-}
-
-/*
-** Return the rowid for the current row. In this implementation, the
-** first row returned is assigned rowid value 1, and each subsequent
-** row a value 1 more than that of the previous.
-*/
-static int fsdirRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
- fsdir_cursor *pCur = (fsdir_cursor*)cur;
- *pRowid = pCur->iRowid;
- return SQLITE_OK;
-}
-
-/*
-** Return TRUE if the cursor has been moved off of the last
-** row of output.
-*/
-static int fsdirEof(sqlite3_vtab_cursor *cur){
- fsdir_cursor *pCur = (fsdir_cursor*)cur;
- return (pCur->zPath==0);
-}
-
-/*
-** xFilter callback.
-*/
-static int fsdirFilter(
- sqlite3_vtab_cursor *cur,
- int idxNum, const char *idxStr,
- int argc, sqlite3_value **argv
-){
- const char *zDir = 0;
- fsdir_cursor *pCur = (fsdir_cursor*)cur;
- (void)idxStr;
- fsdirResetCursor(pCur);
-
- if( idxNum==0 ){
- fsdirSetErrmsg(pCur, "table function fsdir requires an argument");
- return SQLITE_ERROR;
- }
-
- assert( argc==idxNum && (argc==1 || argc==2) );
- zDir = (const char*)sqlite3_value_text(argv[0]);
- if( zDir==0 ){
- fsdirSetErrmsg(pCur, "table function fsdir requires a non-NULL argument");
- return SQLITE_ERROR;
- }
- if( argc==2 ){
- pCur->zBase = (const char*)sqlite3_value_text(argv[1]);
- }
- if( pCur->zBase ){
- pCur->nBase = (int)strlen(pCur->zBase)+1;
- pCur->zPath = sqlite3_mprintf("%s/%s", pCur->zBase, zDir);
- }else{
- pCur->zPath = sqlite3_mprintf("%s", zDir);
- }
-
- if( pCur->zPath==0 ){
- return SQLITE_NOMEM;
- }
- if( fileLinkStat(pCur->zPath, &pCur->sStat) ){
- fsdirSetErrmsg(pCur, "cannot stat file: %s", pCur->zPath);
- return SQLITE_ERROR;
- }
-
- return SQLITE_OK;
-}
-
-/*
-** SQLite will invoke this method one or more times while planning a query
-** that uses the generate_series virtual table. This routine needs to create
-** a query plan for each invocation and compute an estimated cost for that
-** plan.
-**
-** In this implementation idxNum is used to represent the
-** query plan. idxStr is unused.
-**
-** The query plan is represented by bits in idxNum:
-**
-** (1) start = $value -- constraint exists
-** (2) stop = $value -- constraint exists
-** (4) step = $value -- constraint exists
-** (8) output in descending order
-*/
-static int fsdirBestIndex(
- sqlite3_vtab *tab,
- sqlite3_index_info *pIdxInfo
-){
- int i; /* Loop over constraints */
- int idx4 = -1;
- int idx5 = -1;
- const struct sqlite3_index_constraint *pConstraint;
-
- (void)tab;
- pConstraint = pIdxInfo->aConstraint;
- for(i=0; inConstraint; i++, pConstraint++){
- if( pConstraint->usable==0 ) continue;
- if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
- if( pConstraint->iColumn==4 ) idx4 = i;
- if( pConstraint->iColumn==5 ) idx5 = i;
- }
-
- if( idx4<0 ){
- pIdxInfo->idxNum = 0;
- pIdxInfo->estimatedCost = (double)(((sqlite3_int64)1) << 50);
- }else{
- pIdxInfo->aConstraintUsage[idx4].omit = 1;
- pIdxInfo->aConstraintUsage[idx4].argvIndex = 1;
- if( idx5>=0 ){
- pIdxInfo->aConstraintUsage[idx5].omit = 1;
- pIdxInfo->aConstraintUsage[idx5].argvIndex = 2;
- pIdxInfo->idxNum = 2;
- pIdxInfo->estimatedCost = 10.0;
- }else{
- pIdxInfo->idxNum = 1;
- pIdxInfo->estimatedCost = 100.0;
- }
- }
-
- return SQLITE_OK;
-}
-
-/*
-** Register the "fsdir" virtual table.
-*/
-static int fsdirRegister(sqlite3 *db){
- static sqlite3_module fsdirModule = {
- 0, /* iVersion */
- 0, /* xCreate */
- fsdirConnect, /* xConnect */
- fsdirBestIndex, /* xBestIndex */
- fsdirDisconnect, /* xDisconnect */
- 0, /* xDestroy */
- fsdirOpen, /* xOpen - open a cursor */
- fsdirClose, /* xClose - close a cursor */
- fsdirFilter, /* xFilter - configure scan constraints */
- fsdirNext, /* xNext - advance a cursor */
- fsdirEof, /* xEof - check for end of scan */
- fsdirColumn, /* xColumn - read data */
- fsdirRowid, /* xRowid - read data */
- 0, /* xUpdate */
- 0, /* xBegin */
- 0, /* xSync */
- 0, /* xCommit */
- 0, /* xRollback */
- 0, /* xFindMethod */
- 0, /* xRename */
- 0, /* xSavepoint */
- 0, /* xRelease */
- 0 /* xRollbackTo */
- };
-
- int rc = sqlite3_create_module(db, "fsdir", &fsdirModule, 0);
- return rc;
-}
-#else /* SQLITE_OMIT_VIRTUALTABLE */
-# define fsdirRegister(x) SQLITE_OK
-#endif
-
-#ifdef _WIN32
-
-#endif
-int sqlite3_fileio_init(
- sqlite3 *db,
- char **pzErrMsg,
- const sqlite3_api_routines *pApi
-){
- int rc = SQLITE_OK;
- SQLITE_EXTENSION_INIT2(pApi);
- (void)pzErrMsg; /* Unused parameter */
- rc = sqlite3_create_function(db, "readfile", 1, SQLITE_UTF8, 0,
- readfileFunc, 0, 0);
- if( rc==SQLITE_OK ){
- rc = sqlite3_create_function(db, "writefile", -1, SQLITE_UTF8, 0,
- writefileFunc, 0, 0);
- }
- if( rc==SQLITE_OK ){
- rc = sqlite3_create_function(db, "lsmode", 1, SQLITE_UTF8, 0,
- lsModeFunc, 0, 0);
- }
- if( rc==SQLITE_OK ){
- rc = fsdirRegister(db);
- }
- return rc;
-}
-
-/************************* End ../ext/misc/fileio.c ********************/
-/************************* Begin ../ext/misc/completion.c ******************/
-/*
-** 2017-07-10
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-**
-** This file implements an eponymous virtual table that returns suggested
-** completions for a partial SQL input.
-**
-** Suggested usage:
-**
-** SELECT DISTINCT candidate COLLATE nocase
-** FROM completion($prefix,$wholeline)
-** ORDER BY 1;
-**
-** The two query parameters are optional. $prefix is the text of the
-** current word being typed and that is to be completed. $wholeline is
-** the complete input line, used for context.
-**
-** The raw completion() table might return the same candidate multiple
-** times, for example if the same column name is used to two or more
-** tables. And the candidates are returned in an arbitrary order. Hence,
-** the DISTINCT and ORDER BY are recommended.
-**
-** This virtual table operates at the speed of human typing, and so there
-** is no attempt to make it fast. Even a slow implementation will be much
-** faster than any human can type.
-**
-*/
-SQLITE_EXTENSION_INIT1
-#include
-#include
-#include
-
-#ifndef SQLITE_OMIT_VIRTUALTABLE
-
-/* completion_vtab is a subclass of sqlite3_vtab which will
-** serve as the underlying representation of a completion virtual table
-*/
-typedef struct completion_vtab completion_vtab;
-struct completion_vtab {
- sqlite3_vtab base; /* Base class - must be first */
- sqlite3 *db; /* Database connection for this completion vtab */
-};
-
-/* completion_cursor is a subclass of sqlite3_vtab_cursor which will
-** serve as the underlying representation of a cursor that scans
-** over rows of the result
-*/
-typedef struct completion_cursor completion_cursor;
-struct completion_cursor {
- sqlite3_vtab_cursor base; /* Base class - must be first */
- sqlite3 *db; /* Database connection for this cursor */
- int nPrefix, nLine; /* Number of bytes in zPrefix and zLine */
- char *zPrefix; /* The prefix for the word we want to complete */
- char *zLine; /* The whole that we want to complete */
- const char *zCurrentRow; /* Current output row */
- sqlite3_stmt *pStmt; /* Current statement */
- sqlite3_int64 iRowid; /* The rowid */
- int ePhase; /* Current phase */
- int j; /* inter-phase counter */
-};
-
-/* Values for ePhase:
-*/
-#define COMPLETION_FIRST_PHASE 1
-#define COMPLETION_KEYWORDS 1
-#define COMPLETION_PRAGMAS 2
-#define COMPLETION_FUNCTIONS 3
-#define COMPLETION_COLLATIONS 4
-#define COMPLETION_INDEXES 5
-#define COMPLETION_TRIGGERS 6
-#define COMPLETION_DATABASES 7
-#define COMPLETION_TABLES 8 /* Also VIEWs and TRIGGERs */
-#define COMPLETION_COLUMNS 9
-#define COMPLETION_MODULES 10
-#define COMPLETION_EOF 11
-
-/*
-** The completionConnect() method is invoked to create a new
-** completion_vtab that describes the completion virtual table.
-**
-** Think of this routine as the constructor for completion_vtab objects.
-**
-** All this routine needs to do is:
-**
-** (1) Allocate the completion_vtab object and initialize all fields.
-**
-** (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the
-** result set of queries against completion will look like.
-*/
-static int completionConnect(
- sqlite3 *db,
- void *pAux,
- int argc, const char *const*argv,
- sqlite3_vtab **ppVtab,
- char **pzErr
-){
- completion_vtab *pNew;
- int rc;
-
- (void)(pAux); /* Unused parameter */
- (void)(argc); /* Unused parameter */
- (void)(argv); /* Unused parameter */
- (void)(pzErr); /* Unused parameter */
-
-/* Column numbers */
-#define COMPLETION_COLUMN_CANDIDATE 0 /* Suggested completion of the input */
-#define COMPLETION_COLUMN_PREFIX 1 /* Prefix of the word to be completed */
-#define COMPLETION_COLUMN_WHOLELINE 2 /* Entire line seen so far */
-#define COMPLETION_COLUMN_PHASE 3 /* ePhase - used for debugging only */
-
- rc = sqlite3_declare_vtab(db,
- "CREATE TABLE x("
- " candidate TEXT,"
- " prefix TEXT HIDDEN,"
- " wholeline TEXT HIDDEN,"
- " phase INT HIDDEN" /* Used for debugging only */
- ")");
- if( rc==SQLITE_OK ){
- pNew = sqlite3_malloc( sizeof(*pNew) );
- *ppVtab = (sqlite3_vtab*)pNew;
- if( pNew==0 ) return SQLITE_NOMEM;
- memset(pNew, 0, sizeof(*pNew));
- pNew->db = db;
- }
- return rc;
-}
-
-/*
-** This method is the destructor for completion_cursor objects.
-*/
-static int completionDisconnect(sqlite3_vtab *pVtab){
- sqlite3_free(pVtab);
- return SQLITE_OK;
-}
-
-/*
-** Constructor for a new completion_cursor object.
-*/
-static int completionOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
- completion_cursor *pCur;
- pCur = sqlite3_malloc( sizeof(*pCur) );
- if( pCur==0 ) return SQLITE_NOMEM;
- memset(pCur, 0, sizeof(*pCur));
- pCur->db = ((completion_vtab*)p)->db;
- *ppCursor = &pCur->base;
- return SQLITE_OK;
-}
-
-/*
-** Reset the completion_cursor.
-*/
-static void completionCursorReset(completion_cursor *pCur){
- sqlite3_free(pCur->zPrefix); pCur->zPrefix = 0; pCur->nPrefix = 0;
- sqlite3_free(pCur->zLine); pCur->zLine = 0; pCur->nLine = 0;
- sqlite3_finalize(pCur->pStmt); pCur->pStmt = 0;
- pCur->j = 0;
-}
-
-/*
-** Destructor for a completion_cursor.
-*/
-static int completionClose(sqlite3_vtab_cursor *cur){
- completionCursorReset((completion_cursor*)cur);
- sqlite3_free(cur);
- return SQLITE_OK;
-}
-
-/*
-** All SQL keywords understood by SQLite
-*/
-static const char *completionKwrds[] = {
- "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS",
- "ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY",
- "CASCADE", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT",
- "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE",
- "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE",
- "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH",
- "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN",
- "FAIL", "FOR", "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF",
- "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED", "INITIALLY", "INNER",
- "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY",
- "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL", "NO", "NOT", "NOTNULL",
- "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN", "PRAGMA",
- "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP",
- "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT",
- "ROLLBACK", "ROW", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP",
- "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER", "UNION", "UNIQUE",
- "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN", "WHERE",
- "WITH", "WITHOUT",
-};
-#define completionKwCount \
- (int)(sizeof(completionKwrds)/sizeof(completionKwrds[0]))
-
-/*
-** Advance a completion_cursor to its next row of output.
-**
-** The ->ePhase, ->j, and ->pStmt fields of the completion_cursor object
-** record the current state of the scan. This routine sets ->zCurrentRow
-** to the current row of output and then returns. If no more rows remain,
-** then ->ePhase is set to COMPLETION_EOF which will signal the virtual
-** table that has reached the end of its scan.
-**
-** The current implementation just lists potential identifiers and
-** keywords and filters them by zPrefix. Future enhancements should
-** take zLine into account to try to restrict the set of identifiers and
-** keywords based on what would be legal at the current point of input.
-*/
-static int completionNext(sqlite3_vtab_cursor *cur){
- completion_cursor *pCur = (completion_cursor*)cur;
- int eNextPhase = 0; /* Next phase to try if current phase reaches end */
- int iCol = -1; /* If >=0, step pCur->pStmt and use the i-th column */
- pCur->iRowid++;
- while( pCur->ePhase!=COMPLETION_EOF ){
- switch( pCur->ePhase ){
- case COMPLETION_KEYWORDS: {
- if( pCur->j >= completionKwCount ){
- pCur->zCurrentRow = 0;
- pCur->ePhase = COMPLETION_DATABASES;
- }else{
- pCur->zCurrentRow = completionKwrds[pCur->j++];
- }
- iCol = -1;
- break;
- }
- case COMPLETION_DATABASES: {
- if( pCur->pStmt==0 ){
- sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1,
- &pCur->pStmt, 0);
- }
- iCol = 1;
- eNextPhase = COMPLETION_TABLES;
- break;
- }
- case COMPLETION_TABLES: {
- if( pCur->pStmt==0 ){
- sqlite3_stmt *pS2;
- char *zSql = 0;
- const char *zSep = "";
- sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1, &pS2, 0);
- while( sqlite3_step(pS2)==SQLITE_ROW ){
- const char *zDb = (const char*)sqlite3_column_text(pS2, 1);
- zSql = sqlite3_mprintf(
- "%z%s"
- "SELECT name FROM \"%w\".sqlite_master",
- zSql, zSep, zDb
- );
- if( zSql==0 ) return SQLITE_NOMEM;
- zSep = " UNION ";
- }
- sqlite3_finalize(pS2);
- sqlite3_prepare_v2(pCur->db, zSql, -1, &pCur->pStmt, 0);
- sqlite3_free(zSql);
- }
- iCol = 0;
- eNextPhase = COMPLETION_COLUMNS;
- break;
- }
- case COMPLETION_COLUMNS: {
- if( pCur->pStmt==0 ){
- sqlite3_stmt *pS2;
- char *zSql = 0;
- const char *zSep = "";
- sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1, &pS2, 0);
- while( sqlite3_step(pS2)==SQLITE_ROW ){
- const char *zDb = (const char*)sqlite3_column_text(pS2, 1);
- zSql = sqlite3_mprintf(
- "%z%s"
- "SELECT pti.name FROM \"%w\".sqlite_master AS sm"
- " JOIN pragma_table_info(sm.name,%Q) AS pti"
- " WHERE sm.type='table'",
- zSql, zSep, zDb, zDb
- );
- if( zSql==0 ) return SQLITE_NOMEM;
- zSep = " UNION ";
- }
- sqlite3_finalize(pS2);
- sqlite3_prepare_v2(pCur->db, zSql, -1, &pCur->pStmt, 0);
- sqlite3_free(zSql);
- }
- iCol = 0;
- eNextPhase = COMPLETION_EOF;
- break;
- }
- }
- if( iCol<0 ){
- /* This case is when the phase presets zCurrentRow */
- if( pCur->zCurrentRow==0 ) continue;
- }else{
- if( sqlite3_step(pCur->pStmt)==SQLITE_ROW ){
- /* Extract the next row of content */
- pCur->zCurrentRow = (const char*)sqlite3_column_text(pCur->pStmt, iCol);
- }else{
- /* When all rows are finished, advance to the next phase */
- sqlite3_finalize(pCur->pStmt);
- pCur->pStmt = 0;
- pCur->ePhase = eNextPhase;
- continue;
- }
- }
- if( pCur->nPrefix==0 ) break;
- if( sqlite3_strnicmp(pCur->zPrefix, pCur->zCurrentRow, pCur->nPrefix)==0 ){
- break;
- }
- }
-
- return SQLITE_OK;
-}
-
-/*
-** Return values of columns for the row at which the completion_cursor
-** is currently pointing.
-*/
-static int completionColumn(
- sqlite3_vtab_cursor *cur, /* The cursor */
- sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
- int i /* Which column to return */
-){
- completion_cursor *pCur = (completion_cursor*)cur;
- switch( i ){
- case COMPLETION_COLUMN_CANDIDATE: {
- sqlite3_result_text(ctx, pCur->zCurrentRow, -1, SQLITE_TRANSIENT);
- break;
- }
- case COMPLETION_COLUMN_PREFIX: {
- sqlite3_result_text(ctx, pCur->zPrefix, -1, SQLITE_TRANSIENT);
- break;
- }
- case COMPLETION_COLUMN_WHOLELINE: {
- sqlite3_result_text(ctx, pCur->zLine, -1, SQLITE_TRANSIENT);
- break;
- }
- case COMPLETION_COLUMN_PHASE: {
- sqlite3_result_int(ctx, pCur->ePhase);
- break;
- }
- }
- return SQLITE_OK;
-}
-
-/*
-** Return the rowid for the current row. In this implementation, the
-** rowid is the same as the output value.
-*/
-static int completionRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
- completion_cursor *pCur = (completion_cursor*)cur;
- *pRowid = pCur->iRowid;
- return SQLITE_OK;
-}
-
-/*
-** Return TRUE if the cursor has been moved off of the last
-** row of output.
-*/
-static int completionEof(sqlite3_vtab_cursor *cur){
- completion_cursor *pCur = (completion_cursor*)cur;
- return pCur->ePhase >= COMPLETION_EOF;
-}
-
-/*
-** This method is called to "rewind" the completion_cursor object back
-** to the first row of output. This method is always called at least
-** once prior to any call to completionColumn() or completionRowid() or
-** completionEof().
-*/
-static int completionFilter(
- sqlite3_vtab_cursor *pVtabCursor,
- int idxNum, const char *idxStr,
- int argc, sqlite3_value **argv
-){
- completion_cursor *pCur = (completion_cursor *)pVtabCursor;
- int iArg = 0;
- (void)(idxStr); /* Unused parameter */
- (void)(argc); /* Unused parameter */
- completionCursorReset(pCur);
- if( idxNum & 1 ){
- pCur->nPrefix = sqlite3_value_bytes(argv[iArg]);
- if( pCur->nPrefix>0 ){
- pCur->zPrefix = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg]));
- if( pCur->zPrefix==0 ) return SQLITE_NOMEM;
- }
- iArg++;
- }
- if( idxNum & 2 ){
- pCur->nLine = sqlite3_value_bytes(argv[iArg]);
- if( pCur->nLine>0 ){
- pCur->zLine = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg]));
- if( pCur->zLine==0 ) return SQLITE_NOMEM;
- }
- iArg++;
- }
- if( pCur->zLine!=0 && pCur->zPrefix==0 ){
- int i = pCur->nLine;
- while( i>0 && (isalnum(pCur->zLine[i-1]) || pCur->zLine[i-1]=='_') ){
- i--;
- }
- pCur->nPrefix = pCur->nLine - i;
- if( pCur->nPrefix>0 ){
- pCur->zPrefix = sqlite3_mprintf("%.*s", pCur->nPrefix, pCur->zLine + i);
- if( pCur->zPrefix==0 ) return SQLITE_NOMEM;
- }
- }
- pCur->iRowid = 0;
- pCur->ePhase = COMPLETION_FIRST_PHASE;
- return completionNext(pVtabCursor);
-}
-
-/*
-** SQLite will invoke this method one or more times while planning a query
-** that uses the completion virtual table. This routine needs to create
-** a query plan for each invocation and compute an estimated cost for that
-** plan.
-**
-** There are two hidden parameters that act as arguments to the table-valued
-** function: "prefix" and "wholeline". Bit 0 of idxNum is set if "prefix"
-** is available and bit 1 is set if "wholeline" is available.
-*/
-static int completionBestIndex(
- sqlite3_vtab *tab,
- sqlite3_index_info *pIdxInfo
-){
- int i; /* Loop over constraints */
- int idxNum = 0; /* The query plan bitmask */
- int prefixIdx = -1; /* Index of the start= constraint, or -1 if none */
- int wholelineIdx = -1; /* Index of the stop= constraint, or -1 if none */
- int nArg = 0; /* Number of arguments that completeFilter() expects */
- const struct sqlite3_index_constraint *pConstraint;
-
- (void)(tab); /* Unused parameter */
- pConstraint = pIdxInfo->aConstraint;
- for(i=0; inConstraint; i++, pConstraint++){
- if( pConstraint->usable==0 ) continue;
- if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
- switch( pConstraint->iColumn ){
- case COMPLETION_COLUMN_PREFIX:
- prefixIdx = i;
- idxNum |= 1;
- break;
- case COMPLETION_COLUMN_WHOLELINE:
- wholelineIdx = i;
- idxNum |= 2;
- break;
- }
- }
- if( prefixIdx>=0 ){
- pIdxInfo->aConstraintUsage[prefixIdx].argvIndex = ++nArg;
- pIdxInfo->aConstraintUsage[prefixIdx].omit = 1;
- }
- if( wholelineIdx>=0 ){
- pIdxInfo->aConstraintUsage[wholelineIdx].argvIndex = ++nArg;
- pIdxInfo->aConstraintUsage[wholelineIdx].omit = 1;
- }
- pIdxInfo->idxNum = idxNum;
- pIdxInfo->estimatedCost = (double)5000 - 1000*nArg;
- pIdxInfo->estimatedRows = 500 - 100*nArg;
- return SQLITE_OK;
-}
-
-/*
-** This following structure defines all the methods for the
-** completion virtual table.
-*/
-static sqlite3_module completionModule = {
- 0, /* iVersion */
- 0, /* xCreate */
- completionConnect, /* xConnect */
- completionBestIndex, /* xBestIndex */
- completionDisconnect, /* xDisconnect */
- 0, /* xDestroy */
- completionOpen, /* xOpen - open a cursor */
- completionClose, /* xClose - close a cursor */
- completionFilter, /* xFilter - configure scan constraints */
- completionNext, /* xNext - advance a cursor */
- completionEof, /* xEof - check for end of scan */
- completionColumn, /* xColumn - read data */
- completionRowid, /* xRowid - read data */
- 0, /* xUpdate */
- 0, /* xBegin */
- 0, /* xSync */
- 0, /* xCommit */
- 0, /* xRollback */
- 0, /* xFindMethod */
- 0, /* xRename */
- 0, /* xSavepoint */
- 0, /* xRelease */
- 0 /* xRollbackTo */
-};
-
-#endif /* SQLITE_OMIT_VIRTUALTABLE */
-
-int sqlite3CompletionVtabInit(sqlite3 *db){
- int rc = SQLITE_OK;
-#ifndef SQLITE_OMIT_VIRTUALTABLE
- rc = sqlite3_create_module(db, "completion", &completionModule, 0);
-#endif
- return rc;
-}
-
-#ifdef _WIN32
-
-#endif
-int sqlite3_completion_init(
- sqlite3 *db,
- char **pzErrMsg,
- const sqlite3_api_routines *pApi
-){
- int rc = SQLITE_OK;
- SQLITE_EXTENSION_INIT2(pApi);
- (void)(pzErrMsg); /* Unused parameter */
-#ifndef SQLITE_OMIT_VIRTUALTABLE
- rc = sqlite3CompletionVtabInit(db);
-#endif
- return rc;
-}
-
-/************************* End ../ext/misc/completion.c ********************/
-/************************* Begin ../ext/misc/appendvfs.c ******************/
-/*
-** 2017-10-20
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** This file implements a VFS shim that allows an SQLite database to be
-** appended onto the end of some other file, such as an executable.
-**
-** A special record must appear at the end of the file that identifies the
-** file as an appended database and provides an offset to page 1. For
-** best performance page 1 should be located at a disk page boundary, though
-** that is not required.
-**
-** When opening a database using this VFS, the connection might treat
-** the file as an ordinary SQLite database, or it might treat is as a
-** database appended onto some other file. Here are the rules:
-**
-** (1) When opening a new empty file, that file is treated as an ordinary
-** database.
-**
-** (2) When opening a file that begins with the standard SQLite prefix
-** string "SQLite format 3", that file is treated as an ordinary
-** database.
-**
-** (3) When opening a file that ends with the appendvfs trailer string
-** "Start-Of-SQLite3-NNNNNNNN" that file is treated as an appended
-** database.
-**
-** (4) If none of the above apply and the SQLITE_OPEN_CREATE flag is
-** set, then a new database is appended to the already existing file.
-**
-** (5) Otherwise, SQLITE_CANTOPEN is returned.
-**
-** To avoid unnecessary complications with the PENDING_BYTE, the size of
-** the file containing the database is limited to 1GB. This VFS will refuse
-** to read or write past the 1GB mark. This restriction might be lifted in
-** future versions. For now, if you need a large database, then keep the
-** database in a separate file.
-**
-** If the file being opened is not an appended database, then this shim is
-** a pass-through into the default underlying VFS.
-**/
-SQLITE_EXTENSION_INIT1
-#include
-#include
-
-/* The append mark at the end of the database is:
-**
-** Start-Of-SQLite3-NNNNNNNN
-** 123456789 123456789 12345
-**
-** The NNNNNNNN represents a 64-bit big-endian unsigned integer which is
-** the offset to page 1.
-*/
-#define APND_MARK_PREFIX "Start-Of-SQLite3-"
-#define APND_MARK_PREFIX_SZ 17
-#define APND_MARK_SIZE 25
-
-/*
-** Maximum size of the combined prefix + database + append-mark. This
-** must be less than 0x40000000 to avoid locking issues on Windows.
-*/
-#define APND_MAX_SIZE (65536*15259)
-
-/*
-** Forward declaration of objects used by this utility
-*/
-typedef struct sqlite3_vfs ApndVfs;
-typedef struct ApndFile ApndFile;
-
-/* Access to a lower-level VFS that (might) implement dynamic loading,
-** access to randomness, etc.
-*/
-#define ORIGVFS(p) ((sqlite3_vfs*)((p)->pAppData))
-#define ORIGFILE(p) ((sqlite3_file*)(((ApndFile*)(p))+1))
-
-/* An open file */
-struct ApndFile {
- sqlite3_file base; /* IO methods */
- sqlite3_int64 iPgOne; /* File offset to page 1 */
- sqlite3_int64 iMark; /* Start of the append-mark */
-};
-
-/*
-** Methods for ApndFile
-*/
-static int apndClose(sqlite3_file*);
-static int apndRead(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
-static int apndWrite(sqlite3_file*,const void*,int iAmt, sqlite3_int64 iOfst);
-static int apndTruncate(sqlite3_file*, sqlite3_int64 size);
-static int apndSync(sqlite3_file*, int flags);
-static int apndFileSize(sqlite3_file*, sqlite3_int64 *pSize);
-static int apndLock(sqlite3_file*, int);
-static int apndUnlock(sqlite3_file*, int);
-static int apndCheckReservedLock(sqlite3_file*, int *pResOut);
-static int apndFileControl(sqlite3_file*, int op, void *pArg);
-static int apndSectorSize(sqlite3_file*);
-static int apndDeviceCharacteristics(sqlite3_file*);
-static int apndShmMap(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
-static int apndShmLock(sqlite3_file*, int offset, int n, int flags);
-static void apndShmBarrier(sqlite3_file*);
-static int apndShmUnmap(sqlite3_file*, int deleteFlag);
-static int apndFetch(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp);
-static int apndUnfetch(sqlite3_file*, sqlite3_int64 iOfst, void *p);
-
-/*
-** Methods for ApndVfs
-*/
-static int apndOpen(sqlite3_vfs*, const char *, sqlite3_file*, int , int *);
-static int apndDelete(sqlite3_vfs*, const char *zName, int syncDir);
-static int apndAccess(sqlite3_vfs*, const char *zName, int flags, int *);
-static int apndFullPathname(sqlite3_vfs*, const char *zName, int, char *zOut);
-static void *apndDlOpen(sqlite3_vfs*, const char *zFilename);
-static void apndDlError(sqlite3_vfs*, int nByte, char *zErrMsg);
-static void (*apndDlSym(sqlite3_vfs *pVfs, void *p, const char*zSym))(void);
-static void apndDlClose(sqlite3_vfs*, void*);
-static int apndRandomness(sqlite3_vfs*, int nByte, char *zOut);
-static int apndSleep(sqlite3_vfs*, int microseconds);
-static int apndCurrentTime(sqlite3_vfs*, double*);
-static int apndGetLastError(sqlite3_vfs*, int, char *);
-static int apndCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*);
-static int apndSetSystemCall(sqlite3_vfs*, const char*,sqlite3_syscall_ptr);
-static sqlite3_syscall_ptr apndGetSystemCall(sqlite3_vfs*, const char *z);
-static const char *apndNextSystemCall(sqlite3_vfs*, const char *zName);
-
-static sqlite3_vfs apnd_vfs = {
- 3, /* iVersion (set when registered) */
- 0, /* szOsFile (set when registered) */
- 1024, /* mxPathname */
- 0, /* pNext */
- "apndvfs", /* zName */
- 0, /* pAppData (set when registered) */
- apndOpen, /* xOpen */
- apndDelete, /* xDelete */
- apndAccess, /* xAccess */
- apndFullPathname, /* xFullPathname */
- apndDlOpen, /* xDlOpen */
- apndDlError, /* xDlError */
- apndDlSym, /* xDlSym */
- apndDlClose, /* xDlClose */
- apndRandomness, /* xRandomness */
- apndSleep, /* xSleep */
- apndCurrentTime, /* xCurrentTime */
- apndGetLastError, /* xGetLastError */
- apndCurrentTimeInt64, /* xCurrentTimeInt64 */
- apndSetSystemCall, /* xSetSystemCall */
- apndGetSystemCall, /* xGetSystemCall */
- apndNextSystemCall /* xNextSystemCall */
-};
-
-static const sqlite3_io_methods apnd_io_methods = {
- 3, /* iVersion */
- apndClose, /* xClose */
- apndRead, /* xRead */
- apndWrite, /* xWrite */
- apndTruncate, /* xTruncate */
- apndSync, /* xSync */
- apndFileSize, /* xFileSize */
- apndLock, /* xLock */
- apndUnlock, /* xUnlock */
- apndCheckReservedLock, /* xCheckReservedLock */
- apndFileControl, /* xFileControl */
- apndSectorSize, /* xSectorSize */
- apndDeviceCharacteristics, /* xDeviceCharacteristics */
- apndShmMap, /* xShmMap */
- apndShmLock, /* xShmLock */
- apndShmBarrier, /* xShmBarrier */
- apndShmUnmap, /* xShmUnmap */
- apndFetch, /* xFetch */
- apndUnfetch /* xUnfetch */
-};
-
-
-
-/*
-** Close an apnd-file.
-*/
-static int apndClose(sqlite3_file *pFile){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xClose(pFile);
-}
-
-/*
-** Read data from an apnd-file.
-*/
-static int apndRead(
- sqlite3_file *pFile,
- void *zBuf,
- int iAmt,
- sqlite_int64 iOfst
-){
- ApndFile *p = (ApndFile *)pFile;
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xRead(pFile, zBuf, iAmt, iOfst+p->iPgOne);
-}
-
-/*
-** Add the append-mark onto the end of the file.
-*/
-static int apndWriteMark(ApndFile *p, sqlite3_file *pFile){
- int i;
- unsigned char a[APND_MARK_SIZE];
- memcpy(a, APND_MARK_PREFIX, APND_MARK_PREFIX_SZ);
- for(i=0; i<8; i++){
- a[APND_MARK_PREFIX_SZ+i] = (p->iPgOne >> (56 - i*8)) & 0xff;
- }
- return pFile->pMethods->xWrite(pFile, a, APND_MARK_SIZE, p->iMark);
-}
-
-/*
-** Write data to an apnd-file.
-*/
-static int apndWrite(
- sqlite3_file *pFile,
- const void *zBuf,
- int iAmt,
- sqlite_int64 iOfst
-){
- int rc;
- ApndFile *p = (ApndFile *)pFile;
- pFile = ORIGFILE(pFile);
- if( iOfst+iAmt>=APND_MAX_SIZE ) return SQLITE_FULL;
- rc = pFile->pMethods->xWrite(pFile, zBuf, iAmt, iOfst+p->iPgOne);
- if( rc==SQLITE_OK && iOfst + iAmt + p->iPgOne > p->iMark ){
- sqlite3_int64 sz = 0;
- rc = pFile->pMethods->xFileSize(pFile, &sz);
- if( rc==SQLITE_OK ){
- p->iMark = sz - APND_MARK_SIZE;
- if( iOfst + iAmt + p->iPgOne > p->iMark ){
- p->iMark = p->iPgOne + iOfst + iAmt;
- rc = apndWriteMark(p, pFile);
- }
- }
- }
- return rc;
-}
-
-/*
-** Truncate an apnd-file.
-*/
-static int apndTruncate(sqlite3_file *pFile, sqlite_int64 size){
- int rc;
- ApndFile *p = (ApndFile *)pFile;
- pFile = ORIGFILE(pFile);
- rc = pFile->pMethods->xTruncate(pFile, size+p->iPgOne+APND_MARK_SIZE);
- if( rc==SQLITE_OK ){
- p->iMark = p->iPgOne+size;
- rc = apndWriteMark(p, pFile);
- }
- return rc;
-}
-
-/*
-** Sync an apnd-file.
-*/
-static int apndSync(sqlite3_file *pFile, int flags){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xSync(pFile, flags);
-}
-
-/*
-** Return the current file-size of an apnd-file.
-*/
-static int apndFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){
- ApndFile *p = (ApndFile *)pFile;
- int rc;
- pFile = ORIGFILE(p);
- rc = pFile->pMethods->xFileSize(pFile, pSize);
- if( rc==SQLITE_OK && p->iPgOne ){
- *pSize -= p->iPgOne + APND_MARK_SIZE;
- }
- return rc;
-}
-
-/*
-** Lock an apnd-file.
-*/
-static int apndLock(sqlite3_file *pFile, int eLock){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xLock(pFile, eLock);
-}
-
-/*
-** Unlock an apnd-file.
-*/
-static int apndUnlock(sqlite3_file *pFile, int eLock){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xUnlock(pFile, eLock);
-}
-
-/*
-** Check if another file-handle holds a RESERVED lock on an apnd-file.
-*/
-static int apndCheckReservedLock(sqlite3_file *pFile, int *pResOut){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xCheckReservedLock(pFile, pResOut);
-}
-
-/*
-** File control method. For custom operations on an apnd-file.
-*/
-static int apndFileControl(sqlite3_file *pFile, int op, void *pArg){
- ApndFile *p = (ApndFile *)pFile;
- int rc;
- pFile = ORIGFILE(pFile);
- rc = pFile->pMethods->xFileControl(pFile, op, pArg);
- if( rc==SQLITE_OK && op==SQLITE_FCNTL_VFSNAME ){
- *(char**)pArg = sqlite3_mprintf("apnd(%lld)/%z", p->iPgOne, *(char**)pArg);
- }
- return rc;
-}
-
-/*
-** Return the sector-size in bytes for an apnd-file.
-*/
-static int apndSectorSize(sqlite3_file *pFile){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xSectorSize(pFile);
-}
-
-/*
-** Return the device characteristic flags supported by an apnd-file.
-*/
-static int apndDeviceCharacteristics(sqlite3_file *pFile){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xDeviceCharacteristics(pFile);
-}
-
-/* Create a shared memory file mapping */
-static int apndShmMap(
- sqlite3_file *pFile,
- int iPg,
- int pgsz,
- int bExtend,
- void volatile **pp
-){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xShmMap(pFile,iPg,pgsz,bExtend,pp);
-}
-
-/* Perform locking on a shared-memory segment */
-static int apndShmLock(sqlite3_file *pFile, int offset, int n, int flags){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xShmLock(pFile,offset,n,flags);
-}
-
-/* Memory barrier operation on shared memory */
-static void apndShmBarrier(sqlite3_file *pFile){
- pFile = ORIGFILE(pFile);
- pFile->pMethods->xShmBarrier(pFile);
-}
-
-/* Unmap a shared memory segment */
-static int apndShmUnmap(sqlite3_file *pFile, int deleteFlag){
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xShmUnmap(pFile,deleteFlag);
-}
-
-/* Fetch a page of a memory-mapped file */
-static int apndFetch(
- sqlite3_file *pFile,
- sqlite3_int64 iOfst,
- int iAmt,
- void **pp
-){
- ApndFile *p = (ApndFile *)pFile;
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xFetch(pFile, iOfst+p->iPgOne, iAmt, pp);
-}
-
-/* Release a memory-mapped page */
-static int apndUnfetch(sqlite3_file *pFile, sqlite3_int64 iOfst, void *pPage){
- ApndFile *p = (ApndFile *)pFile;
- pFile = ORIGFILE(pFile);
- return pFile->pMethods->xUnfetch(pFile, iOfst+p->iPgOne, pPage);
-}
-
-/*
-** Check to see if the file is an ordinary SQLite database file.
-*/
-static int apndIsOrdinaryDatabaseFile(sqlite3_int64 sz, sqlite3_file *pFile){
- int rc;
- char zHdr[16];
- static const char aSqliteHdr[] = "SQLite format 3";
- if( sz<512 ) return 0;
- rc = pFile->pMethods->xRead(pFile, zHdr, sizeof(zHdr), 0);
- if( rc ) return 0;
- return memcmp(zHdr, aSqliteHdr, sizeof(zHdr))==0;
-}
-
-/*
-** Try to read the append-mark off the end of a file. Return the
-** start of the appended database if the append-mark is present. If
-** there is no append-mark, return -1;
-*/
-static sqlite3_int64 apndReadMark(sqlite3_int64 sz, sqlite3_file *pFile){
- int rc, i;
- sqlite3_int64 iMark;
- unsigned char a[APND_MARK_SIZE];
-
- if( sz<=APND_MARK_SIZE ) return -1;
- rc = pFile->pMethods->xRead(pFile, a, APND_MARK_SIZE, sz-APND_MARK_SIZE);
- if( rc ) return -1;
- if( memcmp(a, APND_MARK_PREFIX, APND_MARK_PREFIX_SZ)!=0 ) return -1;
- iMark = ((sqlite3_int64)(a[APND_MARK_PREFIX_SZ]&0x7f))<<56;
- for(i=1; i<8; i++){
- iMark += (sqlite3_int64)a[APND_MARK_PREFIX_SZ+i]<<(56-8*i);
- }
- return iMark;
-}
-
-/*
-** Open an apnd file handle.
-*/
-static int apndOpen(
- sqlite3_vfs *pVfs,
- const char *zName,
- sqlite3_file *pFile,
- int flags,
- int *pOutFlags
-){
- ApndFile *p;
- sqlite3_file *pSubFile;
- sqlite3_vfs *pSubVfs;
- int rc;
- sqlite3_int64 sz;
- pSubVfs = ORIGVFS(pVfs);
- if( (flags & SQLITE_OPEN_MAIN_DB)==0 ){
- return pSubVfs->xOpen(pSubVfs, zName, pFile, flags, pOutFlags);
- }
- p = (ApndFile*)pFile;
- memset(p, 0, sizeof(*p));
- pSubFile = ORIGFILE(pFile);
- p->base.pMethods = &apnd_io_methods;
- rc = pSubVfs->xOpen(pSubVfs, zName, pSubFile, flags, pOutFlags);
- if( rc ) goto apnd_open_done;
- rc = pSubFile->pMethods->xFileSize(pSubFile, &sz);
- if( rc ){
- pSubFile->pMethods->xClose(pSubFile);
- goto apnd_open_done;
- }
- if( apndIsOrdinaryDatabaseFile(sz, pSubFile) ){
- memmove(pFile, pSubFile, pSubVfs->szOsFile);
- return SQLITE_OK;
- }
- p->iMark = 0;
- p->iPgOne = apndReadMark(sz, pFile);
- if( p->iPgOne>0 ){
- return SQLITE_OK;
- }
- if( (flags & SQLITE_OPEN_CREATE)==0 ){
- pSubFile->pMethods->xClose(pSubFile);
- rc = SQLITE_CANTOPEN;
- }
- p->iPgOne = (sz+0xfff) & ~(sqlite3_int64)0xfff;
-apnd_open_done:
- if( rc ) pFile->pMethods = 0;
- return rc;
-}
-
-/*
-** All other VFS methods are pass-thrus.
-*/
-static int apndDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
- return ORIGVFS(pVfs)->xDelete(ORIGVFS(pVfs), zPath, dirSync);
-}
-static int apndAccess(
- sqlite3_vfs *pVfs,
- const char *zPath,
- int flags,
- int *pResOut
-){
- return ORIGVFS(pVfs)->xAccess(ORIGVFS(pVfs), zPath, flags, pResOut);
-}
-static int apndFullPathname(
- sqlite3_vfs *pVfs,
- const char *zPath,
- int nOut,
- char *zOut
-){
- return ORIGVFS(pVfs)->xFullPathname(ORIGVFS(pVfs),zPath,nOut,zOut);
-}
-static void *apndDlOpen(sqlite3_vfs *pVfs, const char *zPath){
- return ORIGVFS(pVfs)->xDlOpen(ORIGVFS(pVfs), zPath);
-}
-static void apndDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg){
- ORIGVFS(pVfs)->xDlError(ORIGVFS(pVfs), nByte, zErrMsg);
-}
-static void (*apndDlSym(sqlite3_vfs *pVfs, void *p, const char *zSym))(void){
- return ORIGVFS(pVfs)->xDlSym(ORIGVFS(pVfs), p, zSym);
-}
-static void apndDlClose(sqlite3_vfs *pVfs, void *pHandle){
- ORIGVFS(pVfs)->xDlClose(ORIGVFS(pVfs), pHandle);
-}
-static int apndRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
- return ORIGVFS(pVfs)->xRandomness(ORIGVFS(pVfs), nByte, zBufOut);
-}
-static int apndSleep(sqlite3_vfs *pVfs, int nMicro){
- return ORIGVFS(pVfs)->xSleep(ORIGVFS(pVfs), nMicro);
-}
-static int apndCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){
- return ORIGVFS(pVfs)->xCurrentTime(ORIGVFS(pVfs), pTimeOut);
-}
-static int apndGetLastError(sqlite3_vfs *pVfs, int a, char *b){
- return ORIGVFS(pVfs)->xGetLastError(ORIGVFS(pVfs), a, b);
-}
-static int apndCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p){
- return ORIGVFS(pVfs)->xCurrentTimeInt64(ORIGVFS(pVfs), p);
-}
-static int apndSetSystemCall(
- sqlite3_vfs *pVfs,
- const char *zName,
- sqlite3_syscall_ptr pCall
-){
- return ORIGVFS(pVfs)->xSetSystemCall(ORIGVFS(pVfs),zName,pCall);
-}
-static sqlite3_syscall_ptr apndGetSystemCall(
- sqlite3_vfs *pVfs,
- const char *zName
-){
- return ORIGVFS(pVfs)->xGetSystemCall(ORIGVFS(pVfs),zName);
-}
-static const char *apndNextSystemCall(sqlite3_vfs *pVfs, const char *zName){
- return ORIGVFS(pVfs)->xNextSystemCall(ORIGVFS(pVfs), zName);
-}
-
-
-#ifdef _WIN32
-
-#endif
-/*
-** This routine is called when the extension is loaded.
-** Register the new VFS.
-*/
-int sqlite3_appendvfs_init(
- sqlite3 *db,
- char **pzErrMsg,
- const sqlite3_api_routines *pApi
-){
- int rc = SQLITE_OK;
- sqlite3_vfs *pOrig;
- SQLITE_EXTENSION_INIT2(pApi);
- (void)pzErrMsg;
- (void)db;
- pOrig = sqlite3_vfs_find(0);
- apnd_vfs.iVersion = pOrig->iVersion;
- apnd_vfs.pAppData = pOrig;
- apnd_vfs.szOsFile = pOrig->szOsFile + sizeof(ApndFile);
- rc = sqlite3_vfs_register(&apnd_vfs, 0);
-#ifdef APPENDVFS_TEST
- if( rc==SQLITE_OK ){
- rc = sqlite3_auto_extension((void(*)(void))apndvfsRegister);
- }
-#endif
- if( rc==SQLITE_OK ) rc = SQLITE_OK_LOAD_PERMANENTLY;
- return rc;
-}
-
-/************************* End ../ext/misc/appendvfs.c ********************/
-#ifdef SQLITE_HAVE_ZLIB
-/************************* Begin ../ext/misc/zipfile.c ******************/
-/*
-** 2017-12-26
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** This file implements a virtual table for reading and writing ZIP archive
-** files.
-**
-** Usage example:
-**
-** SELECT name, sz, datetime(mtime,'unixepoch') FROM zipfile($filename);
-**
-** Current limitations:
-**
-** * No support for encryption
-** * No support for ZIP archives spanning multiple files
-** * No support for zip64 extensions
-** * Only the "inflate/deflate" (zlib) compression method is supported
-*/
-SQLITE_EXTENSION_INIT1
-#include
-#include
-#include
-
-#include
-
-#ifndef SQLITE_OMIT_VIRTUALTABLE
-
-#ifndef SQLITE_AMALGAMATION
-
-/* typedef sqlite3_int64 i64; */
-/* typedef unsigned char u8; */
-typedef unsigned short u16;
-typedef unsigned long u32;
-#define MIN(a,b) ((a)<(b) ? (a) : (b))
-
-#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_MUTATION_TEST)
-# define ALWAYS(X) (1)
-# define NEVER(X) (0)
-#elif !defined(NDEBUG)
-# define ALWAYS(X) ((X)?1:(assert(0),0))
-# define NEVER(X) ((X)?(assert(0),1):0)
-#else
-# define ALWAYS(X) (X)
-# define NEVER(X) (X)
-#endif
-
-#endif /* SQLITE_AMALGAMATION */
-
-/*
-** Definitions for mode bitmasks S_IFDIR, S_IFREG and S_IFLNK.
-**
-** In some ways it would be better to obtain these values from system
-** header files. But, the dependency is undesirable and (a) these
-** have been stable for decades, (b) the values are part of POSIX and
-** are also made explicit in [man stat], and (c) are part of the
-** file format for zip archives.
-*/
-#ifndef S_IFDIR
-# define S_IFDIR 0040000
-#endif
-#ifndef S_IFREG
-# define S_IFREG 0100000
-#endif
-#ifndef S_IFLNK
-# define S_IFLNK 0120000
-#endif
-
-static const char ZIPFILE_SCHEMA[] =
- "CREATE TABLE y("
- "name PRIMARY KEY," /* 0: Name of file in zip archive */
- "mode," /* 1: POSIX mode for file */
- "mtime," /* 2: Last modification time (secs since 1970)*/
- "sz," /* 3: Size of object */
- "rawdata," /* 4: Raw data */
- "data," /* 5: Uncompressed data */
- "method," /* 6: Compression method (integer) */
- "z HIDDEN" /* 7: Name of zip file */
- ") WITHOUT ROWID;";
-
-#define ZIPFILE_F_COLUMN_IDX 7 /* Index of column "file" in the above */
-#define ZIPFILE_BUFFER_SIZE (64*1024)
-
-
-/*
-** Magic numbers used to read and write zip files.
-**
-** ZIPFILE_NEWENTRY_MADEBY:
-** Use this value for the "version-made-by" field in new zip file
-** entries. The upper byte indicates "unix", and the lower byte
-** indicates that the zip file matches pkzip specification 3.0.
-** This is what info-zip seems to do.
-**
-** ZIPFILE_NEWENTRY_REQUIRED:
-** Value for "version-required-to-extract" field of new entries.
-** Version 2.0 is required to support folders and deflate compression.
-**
-** ZIPFILE_NEWENTRY_FLAGS:
-** Value for "general-purpose-bit-flags" field of new entries. Bit
-** 11 means "utf-8 filename and comment".
-**
-** ZIPFILE_SIGNATURE_CDS:
-** First 4 bytes of a valid CDS record.
-**
-** ZIPFILE_SIGNATURE_LFH:
-** First 4 bytes of a valid LFH record.
-**
-** ZIPFILE_SIGNATURE_EOCD
-** First 4 bytes of a valid EOCD record.
-*/
-#define ZIPFILE_EXTRA_TIMESTAMP 0x5455
-#define ZIPFILE_NEWENTRY_MADEBY ((3<<8) + 30)
-#define ZIPFILE_NEWENTRY_REQUIRED 20
-#define ZIPFILE_NEWENTRY_FLAGS 0x800
-#define ZIPFILE_SIGNATURE_CDS 0x02014b50
-#define ZIPFILE_SIGNATURE_LFH 0x04034b50
-#define ZIPFILE_SIGNATURE_EOCD 0x06054b50
-
-/*
-** The sizes of the fixed-size part of each of the three main data
-** structures in a zip archive.
-*/
-#define ZIPFILE_LFH_FIXED_SZ 30
-#define ZIPFILE_EOCD_FIXED_SZ 22
-#define ZIPFILE_CDS_FIXED_SZ 46
-
-/*
-*** 4.3.16 End of central directory record:
-***
-*** end of central dir signature 4 bytes (0x06054b50)
-*** number of this disk 2 bytes
-*** number of the disk with the
-*** start of the central directory 2 bytes
-*** total number of entries in the
-*** central directory on this disk 2 bytes
-*** total number of entries in
-*** the central directory 2 bytes
-*** size of the central directory 4 bytes
-*** offset of start of central
-*** directory with respect to
-*** the starting disk number 4 bytes
-*** .ZIP file comment length 2 bytes
-*** .ZIP file comment (variable size)
-*/
-typedef struct ZipfileEOCD ZipfileEOCD;
-struct ZipfileEOCD {
- u16 iDisk;
- u16 iFirstDisk;
- u16 nEntry;
- u16 nEntryTotal;
- u32 nSize;
- u32 iOffset;
-};
-
-/*
-*** 4.3.12 Central directory structure:
-***
-*** ...
-***
-*** central file header signature 4 bytes (0x02014b50)
-*** version made by 2 bytes
-*** version needed to extract 2 bytes
-*** general purpose bit flag 2 bytes
-*** compression method 2 bytes
-*** last mod file time 2 bytes
-*** last mod file date 2 bytes
-*** crc-32 4 bytes
-*** compressed size 4 bytes
-*** uncompressed size 4 bytes
-*** file name length 2 bytes
-*** extra field length 2 bytes
-*** file comment length 2 bytes
-*** disk number start 2 bytes
-*** internal file attributes 2 bytes
-*** external file attributes 4 bytes
-*** relative offset of local header 4 bytes
-*/
-typedef struct ZipfileCDS ZipfileCDS;
-struct ZipfileCDS {
- u16 iVersionMadeBy;
- u16 iVersionExtract;
- u16 flags;
- u16 iCompression;
- u16 mTime;
- u16 mDate;
- u32 crc32;
- u32 szCompressed;
- u32 szUncompressed;
- u16 nFile;
- u16 nExtra;
- u16 nComment;
- u16 iDiskStart;
- u16 iInternalAttr;
- u32 iExternalAttr;
- u32 iOffset;
- char *zFile; /* Filename (sqlite3_malloc()) */
-};
-
-/*
-*** 4.3.7 Local file header:
-***
-*** local file header signature 4 bytes (0x04034b50)
-*** version needed to extract 2 bytes
-*** general purpose bit flag 2 bytes
-*** compression method 2 bytes
-*** last mod file time 2 bytes
-*** last mod file date 2 bytes
-*** crc-32 4 bytes
-*** compressed size 4 bytes
-*** uncompressed size 4 bytes
-*** file name length 2 bytes
-*** extra field length 2 bytes
-***
-*/
-typedef struct ZipfileLFH ZipfileLFH;
-struct ZipfileLFH {
- u16 iVersionExtract;
- u16 flags;
- u16 iCompression;
- u16 mTime;
- u16 mDate;
- u32 crc32;
- u32 szCompressed;
- u32 szUncompressed;
- u16 nFile;
- u16 nExtra;
-};
-
-typedef struct ZipfileEntry ZipfileEntry;
-struct ZipfileEntry {
- ZipfileCDS cds; /* Parsed CDS record */
- u32 mUnixTime; /* Modification time, in UNIX format */
- u8 *aExtra; /* cds.nExtra+cds.nComment bytes of extra data */
- i64 iDataOff; /* Offset to data in file (if aData==0) */
- u8 *aData; /* cds.szCompressed bytes of compressed data */
- ZipfileEntry *pNext; /* Next element in in-memory CDS */
-};
-
-/*
-** Cursor type for zipfile tables.
-*/
-typedef struct ZipfileCsr ZipfileCsr;
-struct ZipfileCsr {
- sqlite3_vtab_cursor base; /* Base class - must be first */
- i64 iId; /* Cursor ID */
- u8 bEof; /* True when at EOF */
- u8 bNoop; /* If next xNext() call is no-op */
-
- /* Used outside of write transactions */
- FILE *pFile; /* Zip file */
- i64 iNextOff; /* Offset of next record in central directory */
- ZipfileEOCD eocd; /* Parse of central directory record */
-
- ZipfileEntry *pFreeEntry; /* Free this list when cursor is closed or reset */
- ZipfileEntry *pCurrent; /* Current entry */
- ZipfileCsr *pCsrNext; /* Next cursor on same virtual table */
-};
-
-typedef struct ZipfileTab ZipfileTab;
-struct ZipfileTab {
- sqlite3_vtab base; /* Base class - must be first */
- char *zFile; /* Zip file this table accesses (may be NULL) */
- sqlite3 *db; /* Host database connection */
- u8 *aBuffer; /* Temporary buffer used for various tasks */
-
- ZipfileCsr *pCsrList; /* List of cursors */
- i64 iNextCsrid;
-
- /* The following are used by write transactions only */
- ZipfileEntry *pFirstEntry; /* Linked list of all files (if pWriteFd!=0) */
- ZipfileEntry *pLastEntry; /* Last element in pFirstEntry list */
- FILE *pWriteFd; /* File handle open on zip archive */
- i64 szCurrent; /* Current size of zip archive */
- i64 szOrig; /* Size of archive at start of transaction */
-};
-
-/*
-** Set the error message contained in context ctx to the results of
-** vprintf(zFmt, ...).
-*/
-static void zipfileCtxErrorMsg(sqlite3_context *ctx, const char *zFmt, ...){
- char *zMsg = 0;
- va_list ap;
- va_start(ap, zFmt);
- zMsg = sqlite3_vmprintf(zFmt, ap);
- sqlite3_result_error(ctx, zMsg, -1);
- sqlite3_free(zMsg);
- va_end(ap);
-}
-
-/*
-** If string zIn is quoted, dequote it in place. Otherwise, if the string
-** is not quoted, do nothing.
-*/
-static void zipfileDequote(char *zIn){
- char q = zIn[0];
- if( q=='"' || q=='\'' || q=='`' || q=='[' ){
- int iIn = 1;
- int iOut = 0;
- if( q=='[' ) q = ']';
- while( ALWAYS(zIn[iIn]) ){
- char c = zIn[iIn++];
- if( c==q && zIn[iIn++]!=q ) break;
- zIn[iOut++] = c;
- }
- zIn[iOut] = '\0';
- }
-}
-
-/*
-** Construct a new ZipfileTab virtual table object.
-**
-** argv[0] -> module name ("zipfile")
-** argv[1] -> database name
-** argv[2] -> table name
-** argv[...] -> "column name" and other module argument fields.
-*/
-static int zipfileConnect(
- sqlite3 *db,
- void *pAux,
- int argc, const char *const*argv,
- sqlite3_vtab **ppVtab,
- char **pzErr
-){
- int nByte = sizeof(ZipfileTab) + ZIPFILE_BUFFER_SIZE;
- int nFile = 0;
- const char *zFile = 0;
- ZipfileTab *pNew = 0;
- int rc;
-
- /* If the table name is not "zipfile", require that the argument be
- ** specified. This stops zipfile tables from being created as:
- **
- ** CREATE VIRTUAL TABLE zzz USING zipfile();
- **
- ** It does not prevent:
- **
- ** CREATE VIRTUAL TABLE zipfile USING zipfile();
- */
- assert( 0==sqlite3_stricmp(argv[0], "zipfile") );
- if( (0!=sqlite3_stricmp(argv[2], "zipfile") && argc<4) || argc>4 ){
- *pzErr = sqlite3_mprintf("zipfile constructor requires one argument");
- return SQLITE_ERROR;
- }
-
- if( argc>3 ){
- zFile = argv[3];
- nFile = (int)strlen(zFile)+1;
- }
-
- rc = sqlite3_declare_vtab(db, ZIPFILE_SCHEMA);
- if( rc==SQLITE_OK ){
- pNew = (ZipfileTab*)sqlite3_malloc(nByte+nFile);
- if( pNew==0 ) return SQLITE_NOMEM;
- memset(pNew, 0, nByte+nFile);
- pNew->db = db;
- pNew->aBuffer = (u8*)&pNew[1];
- if( zFile ){
- pNew->zFile = (char*)&pNew->aBuffer[ZIPFILE_BUFFER_SIZE];
- memcpy(pNew->zFile, zFile, nFile);
- zipfileDequote(pNew->zFile);
- }
- }
- *ppVtab = (sqlite3_vtab*)pNew;
- return rc;
-}
-
-/*
-** Free the ZipfileEntry structure indicated by the only argument.
-*/
-static void zipfileEntryFree(ZipfileEntry *p){
- if( p ){
- sqlite3_free(p->cds.zFile);
- sqlite3_free(p);
- }
-}
-
-/*
-** Release resources that should be freed at the end of a write
-** transaction.
-*/
-static void zipfileCleanupTransaction(ZipfileTab *pTab){
- ZipfileEntry *pEntry;
- ZipfileEntry *pNext;
-
- if( pTab->pWriteFd ){
- fclose(pTab->pWriteFd);
- pTab->pWriteFd = 0;
- }
- for(pEntry=pTab->pFirstEntry; pEntry; pEntry=pNext){
- pNext = pEntry->pNext;
- zipfileEntryFree(pEntry);
- }
- pTab->pFirstEntry = 0;
- pTab->pLastEntry = 0;
- pTab->szCurrent = 0;
- pTab->szOrig = 0;
-}
-
-/*
-** This method is the destructor for zipfile vtab objects.
-*/
-static int zipfileDisconnect(sqlite3_vtab *pVtab){
- zipfileCleanupTransaction((ZipfileTab*)pVtab);
- sqlite3_free(pVtab);
- return SQLITE_OK;
-}
-
-/*
-** Constructor for a new ZipfileCsr object.
-*/
-static int zipfileOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCsr){
- ZipfileTab *pTab = (ZipfileTab*)p;
- ZipfileCsr *pCsr;
- pCsr = sqlite3_malloc(sizeof(*pCsr));
- *ppCsr = (sqlite3_vtab_cursor*)pCsr;
- if( pCsr==0 ){
- return SQLITE_NOMEM;
- }
- memset(pCsr, 0, sizeof(*pCsr));
- pCsr->iId = ++pTab->iNextCsrid;
- pCsr->pCsrNext = pTab->pCsrList;
- pTab->pCsrList = pCsr;
- return SQLITE_OK;
-}
-
-/*
-** Reset a cursor back to the state it was in when first returned
-** by zipfileOpen().
-*/
-static void zipfileResetCursor(ZipfileCsr *pCsr){
- ZipfileEntry *p;
- ZipfileEntry *pNext;
-
- pCsr->bEof = 0;
- if( pCsr->pFile ){
- fclose(pCsr->pFile);
- pCsr->pFile = 0;
- zipfileEntryFree(pCsr->pCurrent);
- pCsr->pCurrent = 0;
- }
-
- for(p=pCsr->pFreeEntry; p; p=pNext){
- pNext = p->pNext;
- zipfileEntryFree(p);
- }
-}
-
-/*
-** Destructor for an ZipfileCsr.
-*/
-static int zipfileClose(sqlite3_vtab_cursor *cur){
- ZipfileCsr *pCsr = (ZipfileCsr*)cur;
- ZipfileTab *pTab = (ZipfileTab*)(pCsr->base.pVtab);
- ZipfileCsr **pp;
- zipfileResetCursor(pCsr);
-
- /* Remove this cursor from the ZipfileTab.pCsrList list. */
- for(pp=&pTab->pCsrList; *pp!=pCsr; pp=&((*pp)->pCsrNext));
- *pp = pCsr->pCsrNext;
-
- sqlite3_free(pCsr);
- return SQLITE_OK;
-}
-
-/*
-** Set the error message for the virtual table associated with cursor
-** pCsr to the results of vprintf(zFmt, ...).
-*/
-static void zipfileTableErr(ZipfileTab *pTab, const char *zFmt, ...){
- va_list ap;
- va_start(ap, zFmt);
- sqlite3_free(pTab->base.zErrMsg);
- pTab->base.zErrMsg = sqlite3_vmprintf(zFmt, ap);
- va_end(ap);
-}
-static void zipfileCursorErr(ZipfileCsr *pCsr, const char *zFmt, ...){
- va_list ap;
- va_start(ap, zFmt);
- sqlite3_free(pCsr->base.pVtab->zErrMsg);
- pCsr->base.pVtab->zErrMsg = sqlite3_vmprintf(zFmt, ap);
- va_end(ap);
-}
-
-/*
-** Read nRead bytes of data from offset iOff of file pFile into buffer
-** aRead[]. Return SQLITE_OK if successful, or an SQLite error code
-** otherwise.
-**
-** If an error does occur, output variable (*pzErrmsg) may be set to point
-** to an English language error message. It is the responsibility of the
-** caller to eventually free this buffer using
-** sqlite3_free().
-*/
-static int zipfileReadData(
- FILE *pFile, /* Read from this file */
- u8 *aRead, /* Read into this buffer */
- int nRead, /* Number of bytes to read */
- i64 iOff, /* Offset to read from */
- char **pzErrmsg /* OUT: Error message (from sqlite3_malloc) */
-){
- size_t n;
- fseek(pFile, (long)iOff, SEEK_SET);
- n = fread(aRead, 1, nRead, pFile);
- if( (int)n!=nRead ){
- *pzErrmsg = sqlite3_mprintf("error in fread()");
- return SQLITE_ERROR;
- }
- return SQLITE_OK;
-}
-
-static int zipfileAppendData(
- ZipfileTab *pTab,
- const u8 *aWrite,
- int nWrite
-){
- size_t n;
- fseek(pTab->pWriteFd, (long)pTab->szCurrent, SEEK_SET);
- n = fwrite(aWrite, 1, nWrite, pTab->pWriteFd);
- if( (int)n!=nWrite ){
- pTab->base.zErrMsg = sqlite3_mprintf("error in fwrite()");
- return SQLITE_ERROR;
- }
- pTab->szCurrent += nWrite;
- return SQLITE_OK;
-}
-
-/*
-** Read and return a 16-bit little-endian unsigned integer from buffer aBuf.
-*/
-static u16 zipfileGetU16(const u8 *aBuf){
- return (aBuf[1] << 8) + aBuf[0];
-}
-
-/*
-** Read and return a 32-bit little-endian unsigned integer from buffer aBuf.
-*/
-static u32 zipfileGetU32(const u8 *aBuf){
- return ((u32)(aBuf[3]) << 24)
- + ((u32)(aBuf[2]) << 16)
- + ((u32)(aBuf[1]) << 8)
- + ((u32)(aBuf[0]) << 0);
-}
-
-/*
-** Write a 16-bit little endiate integer into buffer aBuf.
-*/
-static void zipfilePutU16(u8 *aBuf, u16 val){
- aBuf[0] = val & 0xFF;
- aBuf[1] = (val>>8) & 0xFF;
-}
-
-/*
-** Write a 32-bit little endiate integer into buffer aBuf.
-*/
-static void zipfilePutU32(u8 *aBuf, u32 val){
- aBuf[0] = val & 0xFF;
- aBuf[1] = (val>>8) & 0xFF;
- aBuf[2] = (val>>16) & 0xFF;
- aBuf[3] = (val>>24) & 0xFF;
-}
-
-#define zipfileRead32(aBuf) ( aBuf+=4, zipfileGetU32(aBuf-4) )
-#define zipfileRead16(aBuf) ( aBuf+=2, zipfileGetU16(aBuf-2) )
-
-#define zipfileWrite32(aBuf,val) { zipfilePutU32(aBuf,val); aBuf+=4; }
-#define zipfileWrite16(aBuf,val) { zipfilePutU16(aBuf,val); aBuf+=2; }
-
-/*
-** Magic numbers used to read CDS records.
-*/
-#define ZIPFILE_CDS_NFILE_OFF 28
-#define ZIPFILE_CDS_SZCOMPRESSED_OFF 20
-
-/*
-** Decode the CDS record in buffer aBuf into (*pCDS). Return SQLITE_ERROR
-** if the record is not well-formed, or SQLITE_OK otherwise.
-*/
-static int zipfileReadCDS(u8 *aBuf, ZipfileCDS *pCDS){
- u8 *aRead = aBuf;
- u32 sig = zipfileRead32(aRead);
- int rc = SQLITE_OK;
- if( sig!=ZIPFILE_SIGNATURE_CDS ){
- rc = SQLITE_ERROR;
- }else{
- pCDS->iVersionMadeBy = zipfileRead16(aRead);
- pCDS->iVersionExtract = zipfileRead16(aRead);
- pCDS->flags = zipfileRead16(aRead);
- pCDS->iCompression = zipfileRead16(aRead);
- pCDS->mTime = zipfileRead16(aRead);
- pCDS->mDate = zipfileRead16(aRead);
- pCDS->crc32 = zipfileRead32(aRead);
- pCDS->szCompressed = zipfileRead32(aRead);
- pCDS->szUncompressed = zipfileRead32(aRead);
- assert( aRead==&aBuf[ZIPFILE_CDS_NFILE_OFF] );
- pCDS->nFile = zipfileRead16(aRead);
- pCDS->nExtra = zipfileRead16(aRead);
- pCDS->nComment = zipfileRead16(aRead);
- pCDS->iDiskStart = zipfileRead16(aRead);
- pCDS->iInternalAttr = zipfileRead16(aRead);
- pCDS->iExternalAttr = zipfileRead32(aRead);
- pCDS->iOffset = zipfileRead32(aRead);
- assert( aRead==&aBuf[ZIPFILE_CDS_FIXED_SZ] );
- }
-
- return rc;
-}
-
-/*
-** Decode the LFH record in buffer aBuf into (*pLFH). Return SQLITE_ERROR
-** if the record is not well-formed, or SQLITE_OK otherwise.
-*/
-static int zipfileReadLFH(
- u8 *aBuffer,
- ZipfileLFH *pLFH
-){
- u8 *aRead = aBuffer;
- int rc = SQLITE_OK;
-
- u32 sig = zipfileRead32(aRead);
- if( sig!=ZIPFILE_SIGNATURE_LFH ){
- rc = SQLITE_ERROR;
- }else{
- pLFH->iVersionExtract = zipfileRead16(aRead);
- pLFH->flags = zipfileRead16(aRead);
- pLFH->iCompression = zipfileRead16(aRead);
- pLFH->mTime = zipfileRead16(aRead);
- pLFH->mDate = zipfileRead16(aRead);
- pLFH->crc32 = zipfileRead32(aRead);
- pLFH->szCompressed = zipfileRead32(aRead);
- pLFH->szUncompressed = zipfileRead32(aRead);
- pLFH->nFile = zipfileRead16(aRead);
- pLFH->nExtra = zipfileRead16(aRead);
- }
- return rc;
-}
-
-
-/*
-** Buffer aExtra (size nExtra bytes) contains zip archive "extra" fields.
-** Scan through this buffer to find an "extra-timestamp" field. If one
-** exists, extract the 32-bit modification-timestamp from it and store
-** the value in output parameter *pmTime.
-**
-** Zero is returned if no extra-timestamp record could be found (and so
-** *pmTime is left unchanged), or non-zero otherwise.
-**
-** The general format of an extra field is:
-**
-** Header ID 2 bytes
-** Data Size 2 bytes
-** Data N bytes
-*/
-static int zipfileScanExtra(u8 *aExtra, int nExtra, u32 *pmTime){
- int ret = 0;
- u8 *p = aExtra;
- u8 *pEnd = &aExtra[nExtra];
-
- while( p modtime is present */
- *pmTime = zipfileGetU32(&p[1]);
- ret = 1;
- }
- break;
- }
- }
-
- p += nByte;
- }
- return ret;
-}
-
-/*
-** Convert the standard MS-DOS timestamp stored in the mTime and mDate
-** fields of the CDS structure passed as the only argument to a 32-bit
-** UNIX seconds-since-the-epoch timestamp. Return the result.
-**
-** "Standard" MS-DOS time format:
-**
-** File modification time:
-** Bits 00-04: seconds divided by 2
-** Bits 05-10: minute
-** Bits 11-15: hour
-** File modification date:
-** Bits 00-04: day
-** Bits 05-08: month (1-12)
-** Bits 09-15: years from 1980
-**
-** https://msdn.microsoft.com/en-us/library/9kkf9tah.aspx
-*/
-static u32 zipfileMtime(ZipfileCDS *pCDS){
- int Y = (1980 + ((pCDS->mDate >> 9) & 0x7F));
- int M = ((pCDS->mDate >> 5) & 0x0F);
- int D = (pCDS->mDate & 0x1F);
- int B = -13;
-
- int sec = (pCDS->mTime & 0x1F)*2;
- int min = (pCDS->mTime >> 5) & 0x3F;
- int hr = (pCDS->mTime >> 11) & 0x1F;
- i64 JD;
-
- /* JD = INT(365.25 * (Y+4716)) + INT(30.6001 * (M+1)) + D + B - 1524.5 */
-
- /* Calculate the JD in seconds for noon on the day in question */
- if( M<3 ){
- Y = Y-1;
- M = M+12;
- }
- JD = (i64)(24*60*60) * (
- (int)(365.25 * (Y + 4716))
- + (int)(30.6001 * (M + 1))
- + D + B - 1524
- );
-
- /* Correct the JD for the time within the day */
- JD += (hr-12) * 3600 + min * 60 + sec;
-
- /* Convert JD to unix timestamp (the JD epoch is 2440587.5) */
- return (u32)(JD - (i64)(24405875) * 24*60*6);
-}
-
-/*
-** The opposite of zipfileMtime(). This function populates the mTime and
-** mDate fields of the CDS structure passed as the first argument according
-** to the UNIX timestamp value passed as the second.
-*/
-static void zipfileMtimeToDos(ZipfileCDS *pCds, u32 mUnixTime){
- /* Convert unix timestamp to JD (2440588 is noon on 1/1/1970) */
- i64 JD = (i64)2440588 + mUnixTime / (24*60*60);
-
- int A, B, C, D, E;
- int yr, mon, day;
- int hr, min, sec;
-
- A = (int)((JD - 1867216.25)/36524.25);
- A = (int)(JD + 1 + A - (A/4));
- B = A + 1524;
- C = (int)((B - 122.1)/365.25);
- D = (36525*(C&32767))/100;
- E = (int)((B-D)/30.6001);
-
- day = B - D - (int)(30.6001*E);
- mon = (E<14 ? E-1 : E-13);
- yr = mon>2 ? C-4716 : C-4715;
-
- hr = (mUnixTime % (24*60*60)) / (60*60);
- min = (mUnixTime % (60*60)) / 60;
- sec = (mUnixTime % 60);
-
- if( yr>=1980 ){
- pCds->mDate = (u16)(day + (mon << 5) + ((yr-1980) << 9));
- pCds->mTime = (u16)(sec/2 + (min<<5) + (hr<<11));
- }else{
- pCds->mDate = pCds->mTime = 0;
- }
-
- assert( mUnixTime<315507600
- || mUnixTime==zipfileMtime(pCds)
- || ((mUnixTime % 2) && mUnixTime-1==zipfileMtime(pCds))
- /* || (mUnixTime % 2) */
- );
-}
-
-/*
-** If aBlob is not NULL, then it is a pointer to a buffer (nBlob bytes in
-** size) containing an entire zip archive image. Or, if aBlob is NULL,
-** then pFile is a file-handle open on a zip file. In either case, this
-** function creates a ZipfileEntry object based on the zip archive entry
-** for which the CDS record is at offset iOff.
-**
-** If successful, SQLITE_OK is returned and (*ppEntry) set to point to
-** the new object. Otherwise, an SQLite error code is returned and the
-** final value of (*ppEntry) undefined.
-*/
-static int zipfileGetEntry(
- ZipfileTab *pTab, /* Store any error message here */
- const u8 *aBlob, /* Pointer to in-memory file image */
- int nBlob, /* Size of aBlob[] in bytes */
- FILE *pFile, /* If aBlob==0, read from this file */
- i64 iOff, /* Offset of CDS record */
- ZipfileEntry **ppEntry /* OUT: Pointer to new object */
-){
- u8 *aRead;
- char **pzErr = &pTab->base.zErrMsg;
- int rc = SQLITE_OK;
-
- if( aBlob==0 ){
- aRead = pTab->aBuffer;
- rc = zipfileReadData(pFile, aRead, ZIPFILE_CDS_FIXED_SZ, iOff, pzErr);
- }else{
- aRead = (u8*)&aBlob[iOff];
- }
-
- if( rc==SQLITE_OK ){
- int nAlloc;
- ZipfileEntry *pNew;
-
- int nFile = zipfileGetU16(&aRead[ZIPFILE_CDS_NFILE_OFF]);
- int nExtra = zipfileGetU16(&aRead[ZIPFILE_CDS_NFILE_OFF+2]);
- nExtra += zipfileGetU16(&aRead[ZIPFILE_CDS_NFILE_OFF+4]);
-
- nAlloc = sizeof(ZipfileEntry) + nExtra;
- if( aBlob ){
- nAlloc += zipfileGetU32(&aRead[ZIPFILE_CDS_SZCOMPRESSED_OFF]);
- }
-
- pNew = (ZipfileEntry*)sqlite3_malloc(nAlloc);
- if( pNew==0 ){
- rc = SQLITE_NOMEM;
- }else{
- memset(pNew, 0, sizeof(ZipfileEntry));
- rc = zipfileReadCDS(aRead, &pNew->cds);
- if( rc!=SQLITE_OK ){
- *pzErr = sqlite3_mprintf("failed to read CDS at offset %lld", iOff);
- }else if( aBlob==0 ){
- rc = zipfileReadData(
- pFile, aRead, nExtra+nFile, iOff+ZIPFILE_CDS_FIXED_SZ, pzErr
- );
- }else{
- aRead = (u8*)&aBlob[iOff + ZIPFILE_CDS_FIXED_SZ];
- }
- }
-
- if( rc==SQLITE_OK ){
- u32 *pt = &pNew->mUnixTime;
- pNew->cds.zFile = sqlite3_mprintf("%.*s", nFile, aRead);
- pNew->aExtra = (u8*)&pNew[1];
- memcpy(pNew->aExtra, &aRead[nFile], nExtra);
- if( pNew->cds.zFile==0 ){
- rc = SQLITE_NOMEM;
- }else if( 0==zipfileScanExtra(&aRead[nFile], pNew->cds.nExtra, pt) ){
- pNew->mUnixTime = zipfileMtime(&pNew->cds);
- }
- }
-
- if( rc==SQLITE_OK ){
- static const int szFix = ZIPFILE_LFH_FIXED_SZ;
- ZipfileLFH lfh;
- if( pFile ){
- rc = zipfileReadData(pFile, aRead, szFix, pNew->cds.iOffset, pzErr);
- }else{
- aRead = (u8*)&aBlob[pNew->cds.iOffset];
- }
-
- rc = zipfileReadLFH(aRead, &lfh);
- if( rc==SQLITE_OK ){
- pNew->iDataOff = pNew->cds.iOffset + ZIPFILE_LFH_FIXED_SZ;
- pNew->iDataOff += lfh.nFile + lfh.nExtra;
- if( aBlob && pNew->cds.szCompressed ){
- pNew->aData = &pNew->aExtra[nExtra];
- memcpy(pNew->aData, &aBlob[pNew->iDataOff], pNew->cds.szCompressed);
- }
- }else{
- *pzErr = sqlite3_mprintf("failed to read LFH at offset %d",
- (int)pNew->cds.iOffset
- );
- }
- }
-
- if( rc!=SQLITE_OK ){
- zipfileEntryFree(pNew);
- }else{
- *ppEntry = pNew;
- }
- }
-
- return rc;
-}
-
-/*
-** Advance an ZipfileCsr to its next row of output.
-*/
-static int zipfileNext(sqlite3_vtab_cursor *cur){
- ZipfileCsr *pCsr = (ZipfileCsr*)cur;
- int rc = SQLITE_OK;
-
- if( pCsr->pFile ){
- i64 iEof = pCsr->eocd.iOffset + pCsr->eocd.nSize;
- zipfileEntryFree(pCsr->pCurrent);
- pCsr->pCurrent = 0;
- if( pCsr->iNextOff>=iEof ){
- pCsr->bEof = 1;
- }else{
- ZipfileEntry *p = 0;
- ZipfileTab *pTab = (ZipfileTab*)(cur->pVtab);
- rc = zipfileGetEntry(pTab, 0, 0, pCsr->pFile, pCsr->iNextOff, &p);
- if( rc==SQLITE_OK ){
- pCsr->iNextOff += ZIPFILE_CDS_FIXED_SZ;
- pCsr->iNextOff += (int)p->cds.nExtra + p->cds.nFile + p->cds.nComment;
- }
- pCsr->pCurrent = p;
- }
- }else{
- if( !pCsr->bNoop ){
- pCsr->pCurrent = pCsr->pCurrent->pNext;
- }
- if( pCsr->pCurrent==0 ){
- pCsr->bEof = 1;
- }
- }
-
- pCsr->bNoop = 0;
- return rc;
-}
-
-static void zipfileFree(void *p) {
- sqlite3_free(p);
-}
-
-/*
-** Buffer aIn (size nIn bytes) contains compressed data. Uncompressed, the
-** size is nOut bytes. This function uncompresses the data and sets the
-** return value in context pCtx to the result (a blob).
-**
-** If an error occurs, an error code is left in pCtx instead.
-*/
-static void zipfileInflate(
- sqlite3_context *pCtx, /* Store result here */
- const u8 *aIn, /* Compressed data */
- int nIn, /* Size of buffer aIn[] in bytes */
- int nOut /* Expected output size */
-){
- u8 *aRes = sqlite3_malloc(nOut);
- if( aRes==0 ){
- sqlite3_result_error_nomem(pCtx);
- }else{
- int err;
- z_stream str;
- memset(&str, 0, sizeof(str));
-
- str.next_in = (Byte*)aIn;
- str.avail_in = nIn;
- str.next_out = (Byte*)aRes;
- str.avail_out = nOut;
-
- err = inflateInit2(&str, -15);
- if( err!=Z_OK ){
- zipfileCtxErrorMsg(pCtx, "inflateInit2() failed (%d)", err);
- }else{
- err = inflate(&str, Z_NO_FLUSH);
- if( err!=Z_STREAM_END ){
- zipfileCtxErrorMsg(pCtx, "inflate() failed (%d)", err);
- }else{
- sqlite3_result_blob(pCtx, aRes, nOut, zipfileFree);
- aRes = 0;
- }
- }
- sqlite3_free(aRes);
- inflateEnd(&str);
- }
-}
-
-/*
-** Buffer aIn (size nIn bytes) contains uncompressed data. This function
-** compresses it and sets (*ppOut) to point to a buffer containing the
-** compressed data. The caller is responsible for eventually calling
-** sqlite3_free() to release buffer (*ppOut). Before returning, (*pnOut)
-** is set to the size of buffer (*ppOut) in bytes.
-**
-** If no error occurs, SQLITE_OK is returned. Otherwise, an SQLite error
-** code is returned and an error message left in virtual-table handle
-** pTab. The values of (*ppOut) and (*pnOut) are left unchanged in this
-** case.
-*/
-static int zipfileDeflate(
- const u8 *aIn, int nIn, /* Input */
- u8 **ppOut, int *pnOut, /* Output */
- char **pzErr /* OUT: Error message */
-){
- int nAlloc = (int)compressBound(nIn);
- u8 *aOut;
- int rc = SQLITE_OK;
-
- aOut = (u8*)sqlite3_malloc(nAlloc);
- if( aOut==0 ){
- rc = SQLITE_NOMEM;
- }else{
- int res;
- z_stream str;
- memset(&str, 0, sizeof(str));
- str.next_in = (Bytef*)aIn;
- str.avail_in = nIn;
- str.next_out = aOut;
- str.avail_out = nAlloc;
-
- deflateInit2(&str, 9, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);
- res = deflate(&str, Z_FINISH);
-
- if( res==Z_STREAM_END ){
- *ppOut = aOut;
- *pnOut = (int)str.total_out;
- }else{
- sqlite3_free(aOut);
- *pzErr = sqlite3_mprintf("zipfile: deflate() error");
- rc = SQLITE_ERROR;
- }
- deflateEnd(&str);
- }
-
- return rc;
-}
-
-
-/*
-** Return values of columns for the row at which the series_cursor
-** is currently pointing.
-*/
-static int zipfileColumn(
- sqlite3_vtab_cursor *cur, /* The cursor */
- sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
- int i /* Which column to return */
-){
- ZipfileCsr *pCsr = (ZipfileCsr*)cur;
- ZipfileCDS *pCDS = &pCsr->pCurrent->cds;
- int rc = SQLITE_OK;
- switch( i ){
- case 0: /* name */
- sqlite3_result_text(ctx, pCDS->zFile, -1, SQLITE_TRANSIENT);
- break;
- case 1: /* mode */
- /* TODO: Whether or not the following is correct surely depends on
- ** the platform on which the archive was created. */
- sqlite3_result_int(ctx, pCDS->iExternalAttr >> 16);
- break;
- case 2: { /* mtime */
- sqlite3_result_int64(ctx, pCsr->pCurrent->mUnixTime);
- break;
- }
- case 3: { /* sz */
- if( sqlite3_vtab_nochange(ctx)==0 ){
- sqlite3_result_int64(ctx, pCDS->szUncompressed);
- }
- break;
- }
- case 4: /* rawdata */
- if( sqlite3_vtab_nochange(ctx) ) break;
- case 5: { /* data */
- if( i==4 || pCDS->iCompression==0 || pCDS->iCompression==8 ){
- int sz = pCDS->szCompressed;
- int szFinal = pCDS->szUncompressed;
- if( szFinal>0 ){
- u8 *aBuf;
- u8 *aFree = 0;
- if( pCsr->pCurrent->aData ){
- aBuf = pCsr->pCurrent->aData;
- }else{
- aBuf = aFree = sqlite3_malloc(sz);
- if( aBuf==0 ){
- rc = SQLITE_NOMEM;
- }else{
- FILE *pFile = pCsr->pFile;
- if( pFile==0 ){
- pFile = ((ZipfileTab*)(pCsr->base.pVtab))->pWriteFd;
- }
- rc = zipfileReadData(pFile, aBuf, sz, pCsr->pCurrent->iDataOff,
- &pCsr->base.pVtab->zErrMsg
- );
- }
- }
- if( rc==SQLITE_OK ){
- if( i==5 && pCDS->iCompression ){
- zipfileInflate(ctx, aBuf, sz, szFinal);
- }else{
- sqlite3_result_blob(ctx, aBuf, sz, SQLITE_TRANSIENT);
- }
- }
- sqlite3_free(aFree);
- }else{
- /* Figure out if this is a directory or a zero-sized file. Consider
- ** it to be a directory either if the mode suggests so, or if
- ** the final character in the name is '/'. */
- u32 mode = pCDS->iExternalAttr >> 16;
- if( !(mode & S_IFDIR) && pCDS->zFile[pCDS->nFile-1]!='/' ){
- sqlite3_result_blob(ctx, "", 0, SQLITE_STATIC);
- }
- }
- }
- break;
- }
- case 6: /* method */
- sqlite3_result_int(ctx, pCDS->iCompression);
- break;
- default: /* z */
- assert( i==7 );
- sqlite3_result_int64(ctx, pCsr->iId);
- break;
- }
-
- return rc;
-}
-
-/*
-** Return TRUE if the cursor is at EOF.
-*/
-static int zipfileEof(sqlite3_vtab_cursor *cur){
- ZipfileCsr *pCsr = (ZipfileCsr*)cur;
- return pCsr->bEof;
-}
-
-/*
-** If aBlob is not NULL, then it points to a buffer nBlob bytes in size
-** containing an entire zip archive image. Or, if aBlob is NULL, then pFile
-** is guaranteed to be a file-handle open on a zip file.
-**
-** This function attempts to locate the EOCD record within the zip archive
-** and populate *pEOCD with the results of decoding it. SQLITE_OK is
-** returned if successful. Otherwise, an SQLite error code is returned and
-** an English language error message may be left in virtual-table pTab.
-*/
-static int zipfileReadEOCD(
- ZipfileTab *pTab, /* Return errors here */
- const u8 *aBlob, /* Pointer to in-memory file image */
- int nBlob, /* Size of aBlob[] in bytes */
- FILE *pFile, /* Read from this file if aBlob==0 */
- ZipfileEOCD *pEOCD /* Object to populate */
-){
- u8 *aRead = pTab->aBuffer; /* Temporary buffer */
- int nRead; /* Bytes to read from file */
- int rc = SQLITE_OK;
-
- if( aBlob==0 ){
- i64 iOff; /* Offset to read from */
- i64 szFile; /* Total size of file in bytes */
- fseek(pFile, 0, SEEK_END);
- szFile = (i64)ftell(pFile);
- if( szFile==0 ){
- memset(pEOCD, 0, sizeof(ZipfileEOCD));
- return SQLITE_OK;
- }
- nRead = (int)(MIN(szFile, ZIPFILE_BUFFER_SIZE));
- iOff = szFile - nRead;
- rc = zipfileReadData(pFile, aRead, nRead, iOff, &pTab->base.zErrMsg);
- }else{
- nRead = (int)(MIN(nBlob, ZIPFILE_BUFFER_SIZE));
- aRead = (u8*)&aBlob[nBlob-nRead];
- }
-
- if( rc==SQLITE_OK ){
- int i;
-
- /* Scan backwards looking for the signature bytes */
- for(i=nRead-20; i>=0; i--){
- if( aRead[i]==0x50 && aRead[i+1]==0x4b
- && aRead[i+2]==0x05 && aRead[i+3]==0x06
- ){
- break;
- }
- }
- if( i<0 ){
- pTab->base.zErrMsg = sqlite3_mprintf(
- "cannot find end of central directory record"
- );
- return SQLITE_ERROR;
- }
-
- aRead += i+4;
- pEOCD->iDisk = zipfileRead16(aRead);
- pEOCD->iFirstDisk = zipfileRead16(aRead);
- pEOCD->nEntry = zipfileRead16(aRead);
- pEOCD->nEntryTotal = zipfileRead16(aRead);
- pEOCD->nSize = zipfileRead32(aRead);
- pEOCD->iOffset = zipfileRead32(aRead);
- }
-
- return rc;
-}
-
-/*
-** Add object pNew to the linked list that begins at ZipfileTab.pFirstEntry
-** and ends with pLastEntry. If argument pBefore is NULL, then pNew is added
-** to the end of the list. Otherwise, it is added to the list immediately
-** before pBefore (which is guaranteed to be a part of said list).
-*/
-static void zipfileAddEntry(
- ZipfileTab *pTab,
- ZipfileEntry *pBefore,
- ZipfileEntry *pNew
-){
- assert( (pTab->pFirstEntry==0)==(pTab->pLastEntry==0) );
- assert( pNew->pNext==0 );
- if( pBefore==0 ){
- if( pTab->pFirstEntry==0 ){
- pTab->pFirstEntry = pTab->pLastEntry = pNew;
- }else{
- assert( pTab->pLastEntry->pNext==0 );
- pTab->pLastEntry->pNext = pNew;
- pTab->pLastEntry = pNew;
- }
- }else{
- ZipfileEntry **pp;
- for(pp=&pTab->pFirstEntry; *pp!=pBefore; pp=&((*pp)->pNext));
- pNew->pNext = pBefore;
- *pp = pNew;
- }
-}
-
-static int zipfileLoadDirectory(ZipfileTab *pTab, const u8 *aBlob, int nBlob){
- ZipfileEOCD eocd;
- int rc;
- int i;
- i64 iOff;
-
- rc = zipfileReadEOCD(pTab, aBlob, nBlob, pTab->pWriteFd, &eocd);
- iOff = eocd.iOffset;
- for(i=0; rc==SQLITE_OK && ipWriteFd, iOff, &pNew);
-
- if( rc==SQLITE_OK ){
- zipfileAddEntry(pTab, 0, pNew);
- iOff += ZIPFILE_CDS_FIXED_SZ;
- iOff += (int)pNew->cds.nExtra + pNew->cds.nFile + pNew->cds.nComment;
- }
- }
- return rc;
-}
-
-/*
-** xFilter callback.
-*/
-static int zipfileFilter(
- sqlite3_vtab_cursor *cur,
- int idxNum, const char *idxStr,
- int argc, sqlite3_value **argv
-){
- ZipfileTab *pTab = (ZipfileTab*)cur->pVtab;
- ZipfileCsr *pCsr = (ZipfileCsr*)cur;
- const char *zFile = 0; /* Zip file to scan */
- int rc = SQLITE_OK; /* Return Code */
- int bInMemory = 0; /* True for an in-memory zipfile */
-
- zipfileResetCursor(pCsr);
-
- if( pTab->zFile ){
- zFile = pTab->zFile;
- }else if( idxNum==0 ){
- zipfileCursorErr(pCsr, "zipfile() function requires an argument");
- return SQLITE_ERROR;
- }else if( sqlite3_value_type(argv[0])==SQLITE_BLOB ){
- const u8 *aBlob = (const u8*)sqlite3_value_blob(argv[0]);
- int nBlob = sqlite3_value_bytes(argv[0]);
- assert( pTab->pFirstEntry==0 );
- rc = zipfileLoadDirectory(pTab, aBlob, nBlob);
- pCsr->pFreeEntry = pTab->pFirstEntry;
- pTab->pFirstEntry = pTab->pLastEntry = 0;
- if( rc!=SQLITE_OK ) return rc;
- bInMemory = 1;
- }else{
- zFile = (const char*)sqlite3_value_text(argv[0]);
- }
-
- if( 0==pTab->pWriteFd && 0==bInMemory ){
- pCsr->pFile = fopen(zFile, "rb");
- if( pCsr->pFile==0 ){
- zipfileCursorErr(pCsr, "cannot open file: %s", zFile);
- rc = SQLITE_ERROR;
- }else{
- rc = zipfileReadEOCD(pTab, 0, 0, pCsr->pFile, &pCsr->eocd);
- if( rc==SQLITE_OK ){
- if( pCsr->eocd.nEntry==0 ){
- pCsr->bEof = 1;
- }else{
- pCsr->iNextOff = pCsr->eocd.iOffset;
- rc = zipfileNext(cur);
- }
- }
- }
- }else{
- pCsr->bNoop = 1;
- pCsr->pCurrent = pCsr->pFreeEntry ? pCsr->pFreeEntry : pTab->pFirstEntry;
- rc = zipfileNext(cur);
- }
-
- return rc;
-}
-
-/*
-** xBestIndex callback.
-*/
-static int zipfileBestIndex(
- sqlite3_vtab *tab,
- sqlite3_index_info *pIdxInfo
-){
- int i;
-
- for(i=0; inConstraint; i++){
- const struct sqlite3_index_constraint *pCons = &pIdxInfo->aConstraint[i];
- if( pCons->usable==0 ) continue;
- if( pCons->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
- if( pCons->iColumn!=ZIPFILE_F_COLUMN_IDX ) continue;
- break;
- }
-
- if( inConstraint ){
- pIdxInfo->aConstraintUsage[i].argvIndex = 1;
- pIdxInfo->aConstraintUsage[i].omit = 1;
- pIdxInfo->estimatedCost = 1000.0;
- pIdxInfo->idxNum = 1;
- }else{
- pIdxInfo->estimatedCost = (double)(((sqlite3_int64)1) << 50);
- pIdxInfo->idxNum = 0;
- }
-
- return SQLITE_OK;
-}
-
-static ZipfileEntry *zipfileNewEntry(const char *zPath){
- ZipfileEntry *pNew;
- pNew = sqlite3_malloc(sizeof(ZipfileEntry));
- if( pNew ){
- memset(pNew, 0, sizeof(ZipfileEntry));
- pNew->cds.zFile = sqlite3_mprintf("%s", zPath);
- if( pNew->cds.zFile==0 ){
- sqlite3_free(pNew);
- pNew = 0;
- }
- }
- return pNew;
-}
-
-static int zipfileSerializeLFH(ZipfileEntry *pEntry, u8 *aBuf){
- ZipfileCDS *pCds = &pEntry->cds;
- u8 *a = aBuf;
-
- pCds->nExtra = 9;
-
- /* Write the LFH itself */
- zipfileWrite32(a, ZIPFILE_SIGNATURE_LFH);
- zipfileWrite16(a, pCds->iVersionExtract);
- zipfileWrite16(a, pCds->flags);
- zipfileWrite16(a, pCds->iCompression);
- zipfileWrite16(a, pCds->mTime);
- zipfileWrite16(a, pCds->mDate);
- zipfileWrite32(a, pCds->crc32);
- zipfileWrite32(a, pCds->szCompressed);
- zipfileWrite32(a, pCds->szUncompressed);
- zipfileWrite16(a, (u16)pCds->nFile);
- zipfileWrite16(a, pCds->nExtra);
- assert( a==&aBuf[ZIPFILE_LFH_FIXED_SZ] );
-
- /* Add the file name */
- memcpy(a, pCds->zFile, (int)pCds->nFile);
- a += (int)pCds->nFile;
-
- /* The "extra" data */
- zipfileWrite16(a, ZIPFILE_EXTRA_TIMESTAMP);
- zipfileWrite16(a, 5);
- *a++ = 0x01;
- zipfileWrite32(a, pEntry->mUnixTime);
-
- return a-aBuf;
-}
-
-static int zipfileAppendEntry(
- ZipfileTab *pTab,
- ZipfileEntry *pEntry,
- const u8 *pData,
- int nData
-){
- u8 *aBuf = pTab->aBuffer;
- int nBuf;
- int rc;
-
- nBuf = zipfileSerializeLFH(pEntry, aBuf);
- rc = zipfileAppendData(pTab, aBuf, nBuf);
- if( rc==SQLITE_OK ){
- pEntry->iDataOff = pTab->szCurrent;
- rc = zipfileAppendData(pTab, pData, nData);
- }
-
- return rc;
-}
-
-static int zipfileGetMode(
- sqlite3_value *pVal,
- int bIsDir, /* If true, default to directory */
- u32 *pMode, /* OUT: Mode value */
- char **pzErr /* OUT: Error message */
-){
- const char *z = (const char*)sqlite3_value_text(pVal);
- u32 mode = 0;
- if( z==0 ){
- mode = (bIsDir ? (S_IFDIR + 0755) : (S_IFREG + 0644));
- }else if( z[0]>='0' && z[0]<='9' ){
- mode = (unsigned int)sqlite3_value_int(pVal);
- }else{
- const char zTemplate[11] = "-rwxrwxrwx";
- int i;
- if( strlen(z)!=10 ) goto parse_error;
- switch( z[0] ){
- case '-': mode |= S_IFREG; break;
- case 'd': mode |= S_IFDIR; break;
- case 'l': mode |= S_IFLNK; break;
- default: goto parse_error;
- }
- for(i=1; i<10; i++){
- if( z[i]==zTemplate[i] ) mode |= 1 << (9-i);
- else if( z[i]!='-' ) goto parse_error;
- }
- }
- if( ((mode & S_IFDIR)==0)==bIsDir ){
- /* The "mode" attribute is a directory, but data has been specified.
- ** Or vice-versa - no data but "mode" is a file or symlink. */
- *pzErr = sqlite3_mprintf("zipfile: mode does not match data");
- return SQLITE_CONSTRAINT;
- }
- *pMode = mode;
- return SQLITE_OK;
-
- parse_error:
- *pzErr = sqlite3_mprintf("zipfile: parse error in mode: %s", z);
- return SQLITE_ERROR;
-}
-
-/*
-** Both (const char*) arguments point to nul-terminated strings. Argument
-** nB is the value of strlen(zB). This function returns 0 if the strings are
-** identical, ignoring any trailing '/' character in either path. */
-static int zipfileComparePath(const char *zA, const char *zB, int nB){
- int nA = (int)strlen(zA);
- if( zA[nA-1]=='/' ) nA--;
- if( zB[nB-1]=='/' ) nB--;
- if( nA==nB && memcmp(zA, zB, nA)==0 ) return 0;
- return 1;
-}
-
-static int zipfileBegin(sqlite3_vtab *pVtab){
- ZipfileTab *pTab = (ZipfileTab*)pVtab;
- int rc = SQLITE_OK;
-
- assert( pTab->pWriteFd==0 );
-
- /* Open a write fd on the file. Also load the entire central directory
- ** structure into memory. During the transaction any new file data is
- ** appended to the archive file, but the central directory is accumulated
- ** in main-memory until the transaction is committed. */
- pTab->pWriteFd = fopen(pTab->zFile, "ab+");
- if( pTab->pWriteFd==0 ){
- pTab->base.zErrMsg = sqlite3_mprintf(
- "zipfile: failed to open file %s for writing", pTab->zFile
- );
- rc = SQLITE_ERROR;
- }else{
- fseek(pTab->pWriteFd, 0, SEEK_END);
- pTab->szCurrent = pTab->szOrig = (i64)ftell(pTab->pWriteFd);
- rc = zipfileLoadDirectory(pTab, 0, 0);
- }
-
- if( rc!=SQLITE_OK ){
- zipfileCleanupTransaction(pTab);
- }
-
- return rc;
-}
-
-/*
-** Return the current time as a 32-bit timestamp in UNIX epoch format (like
-** time(2)).
-*/
-static u32 zipfileTime(void){
- sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
- u32 ret;
- if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){
- i64 ms;
- pVfs->xCurrentTimeInt64(pVfs, &ms);
- ret = (u32)((ms/1000) - ((i64)24405875 * 8640));
- }else{
- double day;
- pVfs->xCurrentTime(pVfs, &day);
- ret = (u32)((day - 2440587.5) * 86400);
- }
- return ret;
-}
-
-/*
-** Return a 32-bit timestamp in UNIX epoch format.
-**
-** If the value passed as the only argument is either NULL or an SQL NULL,
-** return the current time. Otherwise, return the value stored in (*pVal)
-** cast to a 32-bit unsigned integer.
-*/
-static u32 zipfileGetTime(sqlite3_value *pVal){
- if( pVal==0 || sqlite3_value_type(pVal)==SQLITE_NULL ){
- return zipfileTime();
- }
- return (u32)sqlite3_value_int64(pVal);
-}
-
-/*
-** Unless it is NULL, entry pOld is currently part of the pTab->pFirstEntry
-** linked list. Remove it from the list and free the object.
-*/
-static void zipfileRemoveEntryFromList(ZipfileTab *pTab, ZipfileEntry *pOld){
- if( pOld ){
- ZipfileEntry **pp;
- for(pp=&pTab->pFirstEntry; (*pp)!=pOld; pp=&((*pp)->pNext));
- *pp = (*pp)->pNext;
- zipfileEntryFree(pOld);
- }
-}
-
-/*
-** xUpdate method.
-*/
-static int zipfileUpdate(
- sqlite3_vtab *pVtab,
- int nVal,
- sqlite3_value **apVal,
- sqlite_int64 *pRowid
-){
- ZipfileTab *pTab = (ZipfileTab*)pVtab;
- int rc = SQLITE_OK; /* Return Code */
- ZipfileEntry *pNew = 0; /* New in-memory CDS entry */
-
- u32 mode = 0; /* Mode for new entry */
- u32 mTime = 0; /* Modification time for new entry */
- i64 sz = 0; /* Uncompressed size */
- const char *zPath = 0; /* Path for new entry */
- int nPath = 0; /* strlen(zPath) */
- const u8 *pData = 0; /* Pointer to buffer containing content */
- int nData = 0; /* Size of pData buffer in bytes */
- int iMethod = 0; /* Compression method for new entry */
- u8 *pFree = 0; /* Free this */
- char *zFree = 0; /* Also free this */
- ZipfileEntry *pOld = 0;
- ZipfileEntry *pOld2 = 0;
- int bUpdate = 0; /* True for an update that modifies "name" */
- int bIsDir = 0;
- u32 iCrc32 = 0;
-
- if( pTab->pWriteFd==0 ){
- rc = zipfileBegin(pVtab);
- if( rc!=SQLITE_OK ) return rc;
- }
-
- /* If this is a DELETE or UPDATE, find the archive entry to delete. */
- if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
- const char *zDelete = (const char*)sqlite3_value_text(apVal[0]);
- int nDelete = (int)strlen(zDelete);
- if( nVal>1 ){
- const char *zUpdate = (const char*)sqlite3_value_text(apVal[1]);
- if( zUpdate && zipfileComparePath(zUpdate, zDelete, nDelete)!=0 ){
- bUpdate = 1;
- }
- }
- for(pOld=pTab->pFirstEntry; 1; pOld=pOld->pNext){
- if( zipfileComparePath(pOld->cds.zFile, zDelete, nDelete)==0 ){
- break;
- }
- assert( pOld->pNext );
- }
- }
-
- if( nVal>1 ){
- /* Check that "sz" and "rawdata" are both NULL: */
- if( sqlite3_value_type(apVal[5])!=SQLITE_NULL ){
- zipfileTableErr(pTab, "sz must be NULL");
- rc = SQLITE_CONSTRAINT;
- }
- if( sqlite3_value_type(apVal[6])!=SQLITE_NULL ){
- zipfileTableErr(pTab, "rawdata must be NULL");
- rc = SQLITE_CONSTRAINT;
- }
-
- if( rc==SQLITE_OK ){
- if( sqlite3_value_type(apVal[7])==SQLITE_NULL ){
- /* data=NULL. A directory */
- bIsDir = 1;
- }else{
- /* Value specified for "data", and possibly "method". This must be
- ** a regular file or a symlink. */
- const u8 *aIn = sqlite3_value_blob(apVal[7]);
- int nIn = sqlite3_value_bytes(apVal[7]);
- int bAuto = sqlite3_value_type(apVal[8])==SQLITE_NULL;
-
- iMethod = sqlite3_value_int(apVal[8]);
- sz = nIn;
- pData = aIn;
- nData = nIn;
- if( iMethod!=0 && iMethod!=8 ){
- zipfileTableErr(pTab, "unknown compression method: %d", iMethod);
- rc = SQLITE_CONSTRAINT;
- }else{
- if( bAuto || iMethod ){
- int nCmp;
- rc = zipfileDeflate(aIn, nIn, &pFree, &nCmp, &pTab->base.zErrMsg);
- if( rc==SQLITE_OK ){
- if( iMethod || nCmpbase.zErrMsg);
- }
-
- if( rc==SQLITE_OK ){
- zPath = (const char*)sqlite3_value_text(apVal[2]);
- nPath = (int)strlen(zPath);
- mTime = zipfileGetTime(apVal[4]);
- }
-
- if( rc==SQLITE_OK && bIsDir ){
- /* For a directory, check that the last character in the path is a
- ** '/'. This appears to be required for compatibility with info-zip
- ** (the unzip command on unix). It does not create directories
- ** otherwise. */
- if( zPath[nPath-1]!='/' ){
- zFree = sqlite3_mprintf("%s/", zPath);
- if( zFree==0 ){ rc = SQLITE_NOMEM; }
- zPath = (const char*)zFree;
- nPath++;
- }
- }
-
- /* Check that we're not inserting a duplicate entry -OR- updating an
- ** entry with a path, thereby making it into a duplicate. */
- if( (pOld==0 || bUpdate) && rc==SQLITE_OK ){
- ZipfileEntry *p;
- for(p=pTab->pFirstEntry; p; p=p->pNext){
- if( zipfileComparePath(p->cds.zFile, zPath, nPath)==0 ){
- switch( sqlite3_vtab_on_conflict(pTab->db) ){
- case SQLITE_IGNORE: {
- goto zipfile_update_done;
- }
- case SQLITE_REPLACE: {
- pOld2 = p;
- break;
- }
- default: {
- zipfileTableErr(pTab, "duplicate name: \"%s\"", zPath);
- rc = SQLITE_CONSTRAINT;
- break;
- }
- }
- break;
- }
- }
- }
-
- if( rc==SQLITE_OK ){
- /* Create the new CDS record. */
- pNew = zipfileNewEntry(zPath);
- if( pNew==0 ){
- rc = SQLITE_NOMEM;
- }else{
- pNew->cds.iVersionMadeBy = ZIPFILE_NEWENTRY_MADEBY;
- pNew->cds.iVersionExtract = ZIPFILE_NEWENTRY_REQUIRED;
- pNew->cds.flags = ZIPFILE_NEWENTRY_FLAGS;
- pNew->cds.iCompression = (u16)iMethod;
- zipfileMtimeToDos(&pNew->cds, mTime);
- pNew->cds.crc32 = iCrc32;
- pNew->cds.szCompressed = nData;
- pNew->cds.szUncompressed = (u32)sz;
- pNew->cds.iExternalAttr = (mode<<16);
- pNew->cds.iOffset = (u32)pTab->szCurrent;
- pNew->cds.nFile = (u16)nPath;
- pNew->mUnixTime = (u32)mTime;
- rc = zipfileAppendEntry(pTab, pNew, pData, nData);
- zipfileAddEntry(pTab, pOld, pNew);
- }
- }
- }
-
- if( rc==SQLITE_OK && (pOld || pOld2) ){
- ZipfileCsr *pCsr;
- for(pCsr=pTab->pCsrList; pCsr; pCsr=pCsr->pCsrNext){
- if( pCsr->pCurrent && (pCsr->pCurrent==pOld || pCsr->pCurrent==pOld2) ){
- pCsr->pCurrent = pCsr->pCurrent->pNext;
- pCsr->bNoop = 1;
- }
- }
-
- zipfileRemoveEntryFromList(pTab, pOld);
- zipfileRemoveEntryFromList(pTab, pOld2);
- }
-
-zipfile_update_done:
- sqlite3_free(pFree);
- sqlite3_free(zFree);
- return rc;
-}
-
-static int zipfileSerializeEOCD(ZipfileEOCD *p, u8 *aBuf){
- u8 *a = aBuf;
- zipfileWrite32(a, ZIPFILE_SIGNATURE_EOCD);
- zipfileWrite16(a, p->iDisk);
- zipfileWrite16(a, p->iFirstDisk);
- zipfileWrite16(a, p->nEntry);
- zipfileWrite16(a, p->nEntryTotal);
- zipfileWrite32(a, p->nSize);
- zipfileWrite32(a, p->iOffset);
- zipfileWrite16(a, 0); /* Size of trailing comment in bytes*/
-
- return a-aBuf;
-}
-
-static int zipfileAppendEOCD(ZipfileTab *pTab, ZipfileEOCD *p){
- int nBuf = zipfileSerializeEOCD(p, pTab->aBuffer);
- assert( nBuf==ZIPFILE_EOCD_FIXED_SZ );
- return zipfileAppendData(pTab, pTab->aBuffer, nBuf);
-}
-
-/*
-** Serialize the CDS structure into buffer aBuf[]. Return the number
-** of bytes written.
-*/
-static int zipfileSerializeCDS(ZipfileEntry *pEntry, u8 *aBuf){
- u8 *a = aBuf;
- ZipfileCDS *pCDS = &pEntry->cds;
-
- if( pEntry->aExtra==0 ){
- pCDS->nExtra = 9;
- }
-
- zipfileWrite32(a, ZIPFILE_SIGNATURE_CDS);
- zipfileWrite16(a, pCDS->iVersionMadeBy);
- zipfileWrite16(a, pCDS->iVersionExtract);
- zipfileWrite16(a, pCDS->flags);
- zipfileWrite16(a, pCDS->iCompression);
- zipfileWrite16(a, pCDS->mTime);
- zipfileWrite16(a, pCDS->mDate);
- zipfileWrite32(a, pCDS->crc32);
- zipfileWrite32(a, pCDS->szCompressed);
- zipfileWrite32(a, pCDS->szUncompressed);
- assert( a==&aBuf[ZIPFILE_CDS_NFILE_OFF] );
- zipfileWrite16(a, pCDS->nFile);
- zipfileWrite16(a, pCDS->nExtra);
- zipfileWrite16(a, pCDS->nComment);
- zipfileWrite16(a, pCDS->iDiskStart);
- zipfileWrite16(a, pCDS->iInternalAttr);
- zipfileWrite32(a, pCDS->iExternalAttr);
- zipfileWrite32(a, pCDS->iOffset);
-
- memcpy(a, pCDS->zFile, pCDS->nFile);
- a += pCDS->nFile;
-
- if( pEntry->aExtra ){
- int n = (int)pCDS->nExtra + (int)pCDS->nComment;
- memcpy(a, pEntry->aExtra, n);
- a += n;
- }else{
- assert( pCDS->nExtra==9 );
- zipfileWrite16(a, ZIPFILE_EXTRA_TIMESTAMP);
- zipfileWrite16(a, 5);
- *a++ = 0x01;
- zipfileWrite32(a, pEntry->mUnixTime);
- }
-
- return a-aBuf;
-}
-
-static int zipfileCommit(sqlite3_vtab *pVtab){
- ZipfileTab *pTab = (ZipfileTab*)pVtab;
- int rc = SQLITE_OK;
- if( pTab->pWriteFd ){
- i64 iOffset = pTab->szCurrent;
- ZipfileEntry *p;
- ZipfileEOCD eocd;
- int nEntry = 0;
-
- /* Write out all entries */
- for(p=pTab->pFirstEntry; rc==SQLITE_OK && p; p=p->pNext){
- int n = zipfileSerializeCDS(p, pTab->aBuffer);
- rc = zipfileAppendData(pTab, pTab->aBuffer, n);
- nEntry++;
- }
-
- /* Write out the EOCD record */
- eocd.iDisk = 0;
- eocd.iFirstDisk = 0;
- eocd.nEntry = (u16)nEntry;
- eocd.nEntryTotal = (u16)nEntry;
- eocd.nSize = (u32)(pTab->szCurrent - iOffset);
- eocd.iOffset = (u32)iOffset;
- rc = zipfileAppendEOCD(pTab, &eocd);
-
- zipfileCleanupTransaction(pTab);
- }
- return rc;
-}
-
-static int zipfileRollback(sqlite3_vtab *pVtab){
- return zipfileCommit(pVtab);
-}
-
-static ZipfileCsr *zipfileFindCursor(ZipfileTab *pTab, i64 iId){
- ZipfileCsr *pCsr;
- for(pCsr=pTab->pCsrList; pCsr; pCsr=pCsr->pCsrNext){
- if( iId==pCsr->iId ) break;
- }
- return pCsr;
-}
-
-static void zipfileFunctionCds(
- sqlite3_context *context,
- int argc,
- sqlite3_value **argv
-){
- ZipfileCsr *pCsr;
- ZipfileTab *pTab = (ZipfileTab*)sqlite3_user_data(context);
- assert( argc>0 );
-
- pCsr = zipfileFindCursor(pTab, sqlite3_value_int64(argv[0]));
- if( pCsr ){
- ZipfileCDS *p = &pCsr->pCurrent->cds;
- char *zRes = sqlite3_mprintf("{"
- "\"version-made-by\" : %u, "
- "\"version-to-extract\" : %u, "
- "\"flags\" : %u, "
- "\"compression\" : %u, "
- "\"time\" : %u, "
- "\"date\" : %u, "
- "\"crc32\" : %u, "
- "\"compressed-size\" : %u, "
- "\"uncompressed-size\" : %u, "
- "\"file-name-length\" : %u, "
- "\"extra-field-length\" : %u, "
- "\"file-comment-length\" : %u, "
- "\"disk-number-start\" : %u, "
- "\"internal-attr\" : %u, "
- "\"external-attr\" : %u, "
- "\"offset\" : %u }",
- (u32)p->iVersionMadeBy, (u32)p->iVersionExtract,
- (u32)p->flags, (u32)p->iCompression,
- (u32)p->mTime, (u32)p->mDate,
- (u32)p->crc32, (u32)p->szCompressed,
- (u32)p->szUncompressed, (u32)p->nFile,
- (u32)p->nExtra, (u32)p->nComment,
- (u32)p->iDiskStart, (u32)p->iInternalAttr,
- (u32)p->iExternalAttr, (u32)p->iOffset
- );
-
- if( zRes==0 ){
- sqlite3_result_error_nomem(context);
- }else{
- sqlite3_result_text(context, zRes, -1, SQLITE_TRANSIENT);
- sqlite3_free(zRes);
- }
- }
-}
-
-/*
-** xFindFunction method.
-*/
-static int zipfileFindFunction(
- sqlite3_vtab *pVtab, /* Virtual table handle */
- int nArg, /* Number of SQL function arguments */
- const char *zName, /* Name of SQL function */
- void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */
- void **ppArg /* OUT: User data for *pxFunc */
-){
- if( sqlite3_stricmp("zipfile_cds", zName)==0 ){
- *pxFunc = zipfileFunctionCds;
- *ppArg = (void*)pVtab;
- return 1;
- }
- return 0;
-}
-
-typedef struct ZipfileBuffer ZipfileBuffer;
-struct ZipfileBuffer {
- u8 *a; /* Pointer to buffer */
- int n; /* Size of buffer in bytes */
- int nAlloc; /* Byte allocated at a[] */
-};
-
-typedef struct ZipfileCtx ZipfileCtx;
-struct ZipfileCtx {
- int nEntry;
- ZipfileBuffer body;
- ZipfileBuffer cds;
-};
-
-static int zipfileBufferGrow(ZipfileBuffer *pBuf, int nByte){
- if( pBuf->n+nByte>pBuf->nAlloc ){
- u8 *aNew;
- int nNew = pBuf->n ? pBuf->n*2 : 512;
- int nReq = pBuf->n + nByte;
-
- while( nNewa, nNew);
- if( aNew==0 ) return SQLITE_NOMEM;
- pBuf->a = aNew;
- pBuf->nAlloc = nNew;
- }
- return SQLITE_OK;
-}
-
-/*
-** xStep() callback for the zipfile() aggregate. This can be called in
-** any of the following ways:
-**
-** SELECT zipfile(name,data) ...
-** SELECT zipfile(name,mode,mtime,data) ...
-** SELECT zipfile(name,mode,mtime,data,method) ...
-*/
-void zipfileStep(sqlite3_context *pCtx, int nVal, sqlite3_value **apVal){
- ZipfileCtx *p; /* Aggregate function context */
- ZipfileEntry e; /* New entry to add to zip archive */
-
- sqlite3_value *pName = 0;
- sqlite3_value *pMode = 0;
- sqlite3_value *pMtime = 0;
- sqlite3_value *pData = 0;
- sqlite3_value *pMethod = 0;
-
- int bIsDir = 0;
- u32 mode;
- int rc = SQLITE_OK;
- char *zErr = 0;
-
- int iMethod = -1; /* Compression method to use (0 or 8) */
-
- const u8 *aData = 0; /* Possibly compressed data for new entry */
- int nData = 0; /* Size of aData[] in bytes */
- int szUncompressed = 0; /* Size of data before compression */
- u8 *aFree = 0; /* Free this before returning */
- u32 iCrc32 = 0; /* crc32 of uncompressed data */
-
- char *zName = 0; /* Path (name) of new entry */
- int nName = 0; /* Size of zName in bytes */
- char *zFree = 0; /* Free this before returning */
- int nByte;
-
- memset(&e, 0, sizeof(e));
- p = (ZipfileCtx*)sqlite3_aggregate_context(pCtx, sizeof(ZipfileCtx));
- if( p==0 ) return;
-
- /* Martial the arguments into stack variables */
- if( nVal!=2 && nVal!=4 && nVal!=5 ){
- zErr = sqlite3_mprintf("wrong number of arguments to function zipfile()");
- rc = SQLITE_ERROR;
- goto zipfile_step_out;
- }
- pName = apVal[0];
- if( nVal==2 ){
- pData = apVal[1];
- }else{
- pMode = apVal[1];
- pMtime = apVal[2];
- pData = apVal[3];
- if( nVal==5 ){
- pMethod = apVal[4];
- }
- }
-
- /* Check that the 'name' parameter looks ok. */
- zName = (char*)sqlite3_value_text(pName);
- nName = sqlite3_value_bytes(pName);
- if( zName==0 ){
- zErr = sqlite3_mprintf("first argument to zipfile() must be non-NULL");
- rc = SQLITE_ERROR;
- goto zipfile_step_out;
- }
-
- /* Inspect the 'method' parameter. This must be either 0 (store), 8 (use
- ** deflate compression) or NULL (choose automatically). */
- if( pMethod && SQLITE_NULL!=sqlite3_value_type(pMethod) ){
- iMethod = (int)sqlite3_value_int64(pMethod);
- if( iMethod!=0 && iMethod!=8 ){
- zErr = sqlite3_mprintf("illegal method value: %d", iMethod);
- rc = SQLITE_ERROR;
- goto zipfile_step_out;
- }
- }
-
- /* Now inspect the data. If this is NULL, then the new entry must be a
- ** directory. Otherwise, figure out whether or not the data should
- ** be deflated or simply stored in the zip archive. */
- if( sqlite3_value_type(pData)==SQLITE_NULL ){
- bIsDir = 1;
- iMethod = 0;
- }else{
- aData = sqlite3_value_blob(pData);
- szUncompressed = nData = sqlite3_value_bytes(pData);
- iCrc32 = crc32(0, aData, nData);
- if( iMethod<0 || iMethod==8 ){
- int nOut = 0;
- rc = zipfileDeflate(aData, nData, &aFree, &nOut, &zErr);
- if( rc!=SQLITE_OK ){
- goto zipfile_step_out;
- }
- if( iMethod==8 || nOut1 && zName[nName-2]=='/' ) nName--;
- }
- }
-
- /* Assemble the ZipfileEntry object for the new zip archive entry */
- e.cds.iVersionMadeBy = ZIPFILE_NEWENTRY_MADEBY;
- e.cds.iVersionExtract = ZIPFILE_NEWENTRY_REQUIRED;
- e.cds.flags = ZIPFILE_NEWENTRY_FLAGS;
- e.cds.iCompression = (u16)iMethod;
- zipfileMtimeToDos(&e.cds, (u32)e.mUnixTime);
- e.cds.crc32 = iCrc32;
- e.cds.szCompressed = nData;
- e.cds.szUncompressed = szUncompressed;
- e.cds.iExternalAttr = (mode<<16);
- e.cds.iOffset = p->body.n;
- e.cds.nFile = (u16)nName;
- e.cds.zFile = zName;
-
- /* Append the LFH to the body of the new archive */
- nByte = ZIPFILE_LFH_FIXED_SZ + e.cds.nFile + 9;
- if( (rc = zipfileBufferGrow(&p->body, nByte)) ) goto zipfile_step_out;
- p->body.n += zipfileSerializeLFH(&e, &p->body.a[p->body.n]);
-
- /* Append the data to the body of the new archive */
- if( nData>0 ){
- if( (rc = zipfileBufferGrow(&p->body, nData)) ) goto zipfile_step_out;
- memcpy(&p->body.a[p->body.n], aData, nData);
- p->body.n += nData;
- }
-
- /* Append the CDS record to the directory of the new archive */
- nByte = ZIPFILE_CDS_FIXED_SZ + e.cds.nFile + 9;
- if( (rc = zipfileBufferGrow(&p->cds, nByte)) ) goto zipfile_step_out;
- p->cds.n += zipfileSerializeCDS(&e, &p->cds.a[p->cds.n]);
-
- /* Increment the count of entries in the archive */
- p->nEntry++;
-
- zipfile_step_out:
- sqlite3_free(aFree);
- sqlite3_free(zFree);
- if( rc ){
- if( zErr ){
- sqlite3_result_error(pCtx, zErr, -1);
- }else{
- sqlite3_result_error_code(pCtx, rc);
- }
- }
- sqlite3_free(zErr);
-}
-
-/*
-** xFinalize() callback for zipfile aggregate function.
-*/
-void zipfileFinal(sqlite3_context *pCtx){
- ZipfileCtx *p;
- ZipfileEOCD eocd;
- int nZip;
- u8 *aZip;
-
- p = (ZipfileCtx*)sqlite3_aggregate_context(pCtx, sizeof(ZipfileCtx));
- if( p==0 ) return;
- if( p->nEntry>0 ){
- memset(&eocd, 0, sizeof(eocd));
- eocd.nEntry = (u16)p->nEntry;
- eocd.nEntryTotal = (u16)p->nEntry;
- eocd.nSize = p->cds.n;
- eocd.iOffset = p->body.n;
-
- nZip = p->body.n + p->cds.n + ZIPFILE_EOCD_FIXED_SZ;
- aZip = (u8*)sqlite3_malloc(nZip);
- if( aZip==0 ){
- sqlite3_result_error_nomem(pCtx);
- }else{
- memcpy(aZip, p->body.a, p->body.n);
- memcpy(&aZip[p->body.n], p->cds.a, p->cds.n);
- zipfileSerializeEOCD(&eocd, &aZip[p->body.n + p->cds.n]);
- sqlite3_result_blob(pCtx, aZip, nZip, zipfileFree);
- }
- }
-
- sqlite3_free(p->body.a);
- sqlite3_free(p->cds.a);
-}
-
-
-/*
-** Register the "zipfile" virtual table.
-*/
-static int zipfileRegister(sqlite3 *db){
- static sqlite3_module zipfileModule = {
- 1, /* iVersion */
- zipfileConnect, /* xCreate */
- zipfileConnect, /* xConnect */
- zipfileBestIndex, /* xBestIndex */
- zipfileDisconnect, /* xDisconnect */
- zipfileDisconnect, /* xDestroy */
- zipfileOpen, /* xOpen - open a cursor */
- zipfileClose, /* xClose - close a cursor */
- zipfileFilter, /* xFilter - configure scan constraints */
- zipfileNext, /* xNext - advance a cursor */
- zipfileEof, /* xEof - check for end of scan */
- zipfileColumn, /* xColumn - read data */
- 0, /* xRowid - read data */
- zipfileUpdate, /* xUpdate */
- zipfileBegin, /* xBegin */
- 0, /* xSync */
- zipfileCommit, /* xCommit */
- zipfileRollback, /* xRollback */
- zipfileFindFunction, /* xFindMethod */
- 0, /* xRename */
- };
-
- int rc = sqlite3_create_module(db, "zipfile" , &zipfileModule, 0);
- if( rc==SQLITE_OK ) rc = sqlite3_overload_function(db, "zipfile_cds", -1);
- if( rc==SQLITE_OK ){
- rc = sqlite3_create_function(db, "zipfile", -1, SQLITE_UTF8, 0, 0,
- zipfileStep, zipfileFinal
- );
- }
- return rc;
-}
-#else /* SQLITE_OMIT_VIRTUALTABLE */
-# define zipfileRegister(x) SQLITE_OK
-#endif
-
-#ifdef _WIN32
-
-#endif
-int sqlite3_zipfile_init(
- sqlite3 *db,
- char **pzErrMsg,
- const sqlite3_api_routines *pApi
-){
- SQLITE_EXTENSION_INIT2(pApi);
- (void)pzErrMsg; /* Unused parameter */
- return zipfileRegister(db);
-}
-
-/************************* End ../ext/misc/zipfile.c ********************/
-/************************* Begin ../ext/misc/sqlar.c ******************/
-/*
-** 2017-12-17
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** Utility functions sqlar_compress() and sqlar_uncompress(). Useful
-** for working with sqlar archives and used by the shell tool's built-in
-** sqlar support.
-*/
-SQLITE_EXTENSION_INIT1
-#include
-
-/*
-** Implementation of the "sqlar_compress(X)" SQL function.
-**
-** If the type of X is SQLITE_BLOB, and compressing that blob using
-** zlib utility function compress() yields a smaller blob, return the
-** compressed blob. Otherwise, return a copy of X.
-**
-** SQLar uses the "zlib format" for compressed content. The zlib format
-** contains a two-byte identification header and a four-byte checksum at
-** the end. This is different from ZIP which uses the raw deflate format.
-**
-** Future enhancements to SQLar might add support for new compression formats.
-** If so, those new formats will be identified by alternative headers in the
-** compressed data.
-*/
-static void sqlarCompressFunc(
- sqlite3_context *context,
- int argc,
- sqlite3_value **argv
-){
- assert( argc==1 );
- if( sqlite3_value_type(argv[0])==SQLITE_BLOB ){
- const Bytef *pData = sqlite3_value_blob(argv[0]);
- uLong nData = sqlite3_value_bytes(argv[0]);
- uLongf nOut = compressBound(nData);
- Bytef *pOut;
-
- pOut = (Bytef*)sqlite3_malloc(nOut);
- if( pOut==0 ){
- sqlite3_result_error_nomem(context);
- return;
- }else{
- if( Z_OK!=compress(pOut, &nOut, pData, nData) ){
- sqlite3_result_error(context, "error in compress()", -1);
- }else if( nOut