Social Login WordPress Plugin – AccessPress Social Login Lite - Version 1.0.0

Version Description

  • Plugin submitted to http://wordpress.org for review and approval

=

Download this release

Release Info

Developer Access Keys
Plugin Icon 128x128 Social Login WordPress Plugin – AccessPress Social Login Lite
Version 1.0.0
Comparing to
See all releases

Version 1.0.0

Files changed (76) hide show
  1. accesspress-social-login-lite.php +228 -0
  2. css/backend.css +498 -0
  3. css/frontend.css +503 -0
  4. facebook/apsl_facebook_class.php +85 -0
  5. facebook/src/base_facebook.php +1543 -0
  6. facebook/src/facebook.php +227 -0
  7. facebook/src/fb_ca_chain_bundle.crt +3920 -0
  8. google/Auth/Abstract.php +35 -0
  9. google/Auth/AppIdentity.php +94 -0
  10. google/Auth/AssertionCredentials.php +138 -0
  11. google/Auth/Exception.php +22 -0
  12. google/Auth/LoginTicket.php +69 -0
  13. google/Auth/OAuth2.php +595 -0
  14. google/Auth/Simple.php +62 -0
  15. google/Cache/Abstract.php +53 -0
  16. google/Cache/Apc.php +73 -0
  17. google/Cache/Exception.php +21 -0
  18. google/Cache/File.php +145 -0
  19. google/Cache/Memcache.php +137 -0
  20. google/Cache/Null.php +56 -0
  21. google/Client.php +617 -0
  22. google/Collection.php +96 -0
  23. google/Config.php +325 -0
  24. google/Exception.php +20 -0
  25. google/Http/Batch.php +143 -0
  26. google/Http/CacheParser.php +184 -0
  27. google/Http/MediaFileUpload.php +292 -0
  28. google/Http/REST.php +139 -0
  29. google/Http/Request.php +476 -0
  30. google/IO/Abstract.php +322 -0
  31. google/IO/Curl.php +137 -0
  32. google/IO/Exception.php +22 -0
  33. google/IO/Stream.php +211 -0
  34. google/IO/cacerts.pem +2183 -0
  35. google/Model.php +250 -0
  36. google/Service.php +39 -0
  37. google/Service/Exception.php +53 -0
  38. google/Service/Oauth2.php +412 -0
  39. google/Service/Plus.php +3854 -0
  40. google/Service/Resource.php +210 -0
  41. google/Signer/Abstract.php +29 -0
  42. google/Signer/P12.php +91 -0
  43. google/Utils.php +135 -0
  44. google/Utils/URITemplate.php +333 -0
  45. google/Verifier/Abstract.php +30 -0
  46. google/Verifier/Pem.php +74 -0
  47. images/Thumbs.db +0 -0
  48. images/buffer-black.png +0 -0
  49. images/buffer-white.png +0 -0
  50. images/buffer.png +0 -0
  51. images/customize.png +0 -0
  52. images/icon.png +0 -0
  53. images/icon1.png +0 -0
  54. images/logo.png +0 -0
  55. images/plugin.png +0 -0
  56. images/preview-1.jpg +0 -0
  57. images/preview-2.jpg +0 -0
  58. images/preview-3.jpg +0 -0
  59. images/preview-4.jpg +0 -0
  60. images/theme.png +0 -0
  61. images/top-line.png +0 -0
  62. inc/backend/about.php +31 -0
  63. inc/backend/activation.php +42 -0
  64. inc/backend/how-to-use.php +50 -0
  65. inc/backend/main-page.php +271 -0
  66. inc/backend/save-settings.php +70 -0
  67. inc/backend/widget.php +104 -0
  68. inc/frontend/login_check.php +492 -0
  69. inc/frontend/login_integration.php +22 -0
  70. inc/frontend/shortcode.php +38 -0
  71. index.php +4 -0
  72. js/backend.js +30 -0
  73. js/frontend.js +6 -0
  74. readme.txt +138 -0
  75. twitter/OAuth.php +895 -0
  76. twitter/twitteroauth.php +235 -0
accesspress-social-login-lite.php ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined( 'ABSPATH' ) or die( "No script kiddies please!" );
3
+ /*
4
+ Plugin name: AccessPress Social Login Lite
5
+ Plugin URI: https://accesspressthemes.com/wordpress-plugins/accesspress-social-login-lite/
6
+ Description: A plugin to add various social logins to a site.
7
+ version: 1.0.0
8
+ Author: AccessPress Themes
9
+ Author URI: https://accesspressthemes.com/
10
+ Text Domain: apsl-lite
11
+ Domain Path: /languages/
12
+ License: GPLv2 or later
13
+ */
14
+
15
+ //Declearation of the necessary constants for plugin
16
+ if(!defined ( 'APSL_VERSION' ) ){
17
+ define ( 'APSL_VERSION', '1.0.0' );
18
+ }
19
+
20
+ if( !defined( 'APSL_IMAGE_DIR' ) ){
21
+ define( 'APSL_IMAGE_DIR', plugin_dir_url( __FILE__ ) .'images' );
22
+ }
23
+
24
+ if( !defined( 'APSL_JS_DIR' ) ){
25
+ define ( 'APSL_JS_DIR', plugin_dir_url( __FILE__ ) . 'js' );
26
+ }
27
+
28
+ if( !defined( 'APSL_CSS_DIR' ) ){
29
+ define ( 'APSL_CSS_DIR', plugin_dir_url( __FILE__ ) . 'css' );
30
+ }
31
+
32
+ if( !defined( 'APSL_LANG_DIR' ) ){
33
+ define ( 'APSL_LANG_DIR', basename( dirname( __FILE__ ) ). '/languages/' );
34
+ }
35
+
36
+ if(!defined('APSL_TEXT_DOMAIN')){
37
+ define( 'APSL_TEXT_DOMAIN', 'apsl-lite' );
38
+ }
39
+
40
+ if(!defined('APSL_SETTINGS')){
41
+ define('APSL_SETTINGS', 'apsl-lite-settings');
42
+ }
43
+
44
+ if(!defined('APSL_PLUGIN_DIR')){
45
+ define('APSL_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
46
+ }
47
+
48
+
49
+ /**
50
+ * Register a widget
51
+ * */
52
+ include_once('inc/backend/widget.php');
53
+
54
+
55
+ // Declaration of the class
56
+ if( !class_exists( 'APSL_Lite_Class' ) ){
57
+ class APSL_Lite_Class{
58
+ var $apsl_settings;
59
+ function __construct(){
60
+ $this->apsl_settings = get_option( APSL_SETTINGS );
61
+ add_action('init', array($this, 'session_init')); //start the session if not started yet.
62
+ register_activation_hook(__FILE__, array($this, 'plugin_activation')); //load the default setting for the plugin while activating
63
+ add_action( 'init', array( $this, 'plugin_text_domain' ) ); //load the plugin text domain
64
+ add_action( 'admin_menu', array( $this, 'add_apsl_menu' )); //register the plugin menu in backend
65
+ add_action('admin_enqueue_scripts', array($this, 'register_admin_assets')); //registers all the assets required for wp-admin
66
+ add_action('wp_enqueue_scripts', array($this, 'register_frontend_assets')); // registers all the assets required for the frontend
67
+ add_action( 'admin_post_apsl_save_options', array($this, 'save_settings') ); //save settings of a plugin
68
+
69
+ $options = get_option( APSL_SETTINGS );
70
+ if($options['apsl_enable_disable_plugin'] =='yes'){
71
+ if(in_array("login_form", $options['apsl_display_options'])) {
72
+ add_action( 'login_form', array($this, 'add_social_login') ); // add the social logins to the login form
73
+ }
74
+
75
+ if( in_array("register_form", $options['apsl_display_options']) ) {
76
+ add_action( 'register_form', array($this, 'add_social_login') ); //add the social logins to the registration form
77
+ add_action('after_signup_form', array($this,'add_social_login') );
78
+ }
79
+
80
+ if( in_array( "comment_form", $options['apsl_display_options'] ) ) {
81
+ add_action( 'comment_form_top', array($this, 'add_social_login_form_to_comment') ); //add the social logins to the comment form
82
+ }
83
+ }
84
+
85
+ add_shortcode('apsl-login-lite', array($this, 'apsl_shortcode')); //adds a shortcode
86
+ add_action( 'init', array($this,'login_check') ); //check for the social logins
87
+ add_action('widgets_init', array($this, 'register_apsl_widget')); //register the widget of a plugin
88
+ add_action( 'login_enqueue_scripts', array($this, 'apsl_login_form_enqueue_style'), 10 );
89
+ add_action( 'login_enqueue_scripts', array($this, 'apsl_login_form__enqueue_script'), 1 );
90
+ add_action('admin_post_apsl_restore_default_settings',array($this,'apsl_restore_default_settings'));//restores default settings.
91
+
92
+ }
93
+
94
+
95
+
96
+ //starts the session with the call of init hook
97
+ function session_init() {
98
+ if (!session_id()) {
99
+ session_start();
100
+ }
101
+ }
102
+
103
+ //load the default settings of the plugin
104
+ function plugin_activation(){
105
+ if( !get_option( APSL_SETTINGS ) ){
106
+ include('inc/backend/activation.php');
107
+ }
108
+ }
109
+
110
+ //loads the text domain for translation
111
+ function plugin_text_domain(){
112
+
113
+ load_plugin_textdomain( APSL_TEXT_DOMAIN, false, APSL_LANG_DIR );
114
+ }
115
+
116
+ //register the plugin menu for backend.
117
+ function add_apsl_menu(){
118
+
119
+ add_menu_page( 'AccessPress Social Login Lite', 'AccessPress Social Login Lite', 'manage_options', APSL_TEXT_DOMAIN , array( $this, 'main_page' ), APSL_IMAGE_DIR . '/icon.png' );
120
+ }
121
+
122
+ //menu page
123
+ function main_page(){
124
+ include( 'inc/backend/main-page.php' );
125
+ }
126
+
127
+ //registration of the backend assets
128
+ function register_admin_assets(){
129
+ wp_enqueue_style( 'fontawsome-css', '//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css', '', APSL_VERSION );
130
+
131
+ if( isset($_GET['page']) && $_GET['page']== APSL_TEXT_DOMAIN ){
132
+
133
+ //backend scripts
134
+ wp_enqueue_script( 'jquery-ui-sortable' );
135
+ wp_enqueue_script( 'apsl-admin-js', APSL_JS_DIR . '/backend.js', array( 'jquery', 'jquery-ui-sortable' ), APSL_VERSION );//registering plugin's admin js
136
+
137
+ //register backend css
138
+ wp_enqueue_style( 'apsl-backend-css', APSL_CSS_DIR.'/backend.css', '', APSL_VERSION );
139
+
140
+ }
141
+ }
142
+
143
+ //registration of the plugins frontend assets
144
+ function register_frontend_assets(){
145
+ //register frontend scripts
146
+ wp_enqueue_script('apsl-frontend-js', APSL_JS_DIR.'/frontend.js', array('jquery'), APSL_VERSION );
147
+
148
+ //register frontend css
149
+ wp_enqueue_style( 'fontawsome-css', '//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css', '', APSL_VERSION );
150
+ wp_enqueue_style( 'apsl-frontend-css', APSL_CSS_DIR.'/frontend.css', '', APSL_VERSION );
151
+ }
152
+
153
+ //save the settings of a plugin
154
+ function save_settings(){
155
+ if(isset($_POST['apsl_save_settings']) && $_POST['apsl_settings_action'] && wp_verify_nonce( $_POST['apsl_settings_action'], 'apsl_nonce_save_settings')){
156
+ include('inc/backend/save-settings.php');
157
+ }else{
158
+ die('No script kiddies please!');
159
+ }
160
+ }
161
+
162
+ //function to add the social login in the login and registration form.
163
+ function add_social_login(){
164
+ if(!is_user_logged_in()){
165
+ include('inc/frontend/login_integration.php');
166
+ }
167
+ }
168
+
169
+ //function to add the social login in the comment form.
170
+ function add_social_login_form_to_comment(){ ?>
171
+ <?php
172
+ $options = get_option( APSL_SETTINGS );
173
+ $login_text = $options['apsl_title_text_field'];
174
+ if (!is_user_logged_in()){ ?>
175
+ <?php
176
+ echo do_shortcode("[apsl-login-lite login_text='{$login_text}']");
177
+ }
178
+ }
179
+
180
+ //function for adding shortcode of a plugin
181
+ function apsl_shortcode($attr) {
182
+ ob_start();
183
+ include('inc/frontend/shortcode.php');
184
+ $html = ob_get_contents();
185
+ ob_get_clean();
186
+ return $html;
187
+ }
188
+
189
+ //checking of the login
190
+ function login_check(){
191
+ include('inc/frontend/login_check.php');
192
+ }
193
+
194
+ //registration of the social login widget
195
+ function register_apsl_widget() {
196
+ register_widget('APSL_Lite_Widget');
197
+ }
198
+
199
+ function apsl_login_form_enqueue_style(){
200
+ wp_enqueue_style( 'fontawsome-css', '//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css', '', APSL_VERSION );
201
+ wp_enqueue_style( 'apsl-backend-css', APSL_CSS_DIR.'/backend.css', '', APSL_VERSION );
202
+ wp_enqueue_style( 'apsl-frontend-css', APSL_CSS_DIR.'/frontend.css', '', APSL_VERSION );
203
+
204
+ }
205
+
206
+ function apsl_login_form__enqueue_script(){
207
+ wp_enqueue_script( 'apsl-admin-js', APSL_JS_DIR . '/backend.js', array( 'jquery', 'jquery-ui-sortable' ), APSL_VERSION );//registering plugin's admin js
208
+ }
209
+
210
+ function apsl_restore_default_settings(){
211
+ $nonce = $_REQUEST['_wpnonce'];
212
+ if(!empty($_GET) && wp_verify_nonce( $nonce, 'apsl-restore-default-settings-nonce' ) ){
213
+ //restore the default plugin activation settings from the activation page.
214
+ include( 'inc/backend/activation.php' );
215
+ $_SESSION['apsl_message'] = __( 'Settings restored Successfully.', APSL_TEXT_DOMAIN );
216
+ wp_redirect( admin_url().'admin.php?page='.APSL_TEXT_DOMAIN );
217
+ exit;
218
+ }else{
219
+ die( 'No script kiddies please!' );
220
+ }
221
+ }
222
+
223
+ }//class termination
224
+ }
225
+
226
+ $apsl_object = new APSL_Lite_Class();
227
+
228
+ ?>
css/backend.css ADDED
@@ -0,0 +1,498 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .clear{
2
+ clear:both;
3
+ }
4
+
5
+ .clearfix:after {
6
+ content: ".";
7
+ clear: both;
8
+ visibility: hidden;
9
+ line-height: 0;
10
+ height: 0;
11
+ display: block;
12
+ }
13
+
14
+
15
+ .apsl-settings {
16
+ padding:0 10px;
17
+ margin: 10px 0;
18
+ }
19
+
20
+ .apsl-label {
21
+ font-size: 14px;
22
+ font-weight: bold;
23
+ margin-bottom: 10px;
24
+ background-color: black;
25
+ color: black;
26
+ padding: 10px;
27
+ margin-top: -10px;
28
+ }
29
+ .apsl-settings-tab {
30
+ border: 1px solid #fff;
31
+ float: left;
32
+ font-size: 17px;
33
+ height: 31px;
34
+ list-style: outside none none;
35
+ padding-left: 74px;
36
+ padding-right: 74px;
37
+ padding-top: 11px;
38
+ background: #DADADA none repeat scroll 0 0;
39
+
40
+ }
41
+
42
+
43
+ .apsl_show_hide {
44
+ float: right;
45
+ font-size: 20px;
46
+ margin-right: 5px;
47
+ }
48
+
49
+ /*.apsl-settings-tabs-wrapper li{
50
+ list-style: outside none none;
51
+ }*/
52
+
53
+ .apsl-settings-tabs-wrapper a{
54
+ text-decoration:none;
55
+ color:black;
56
+ }
57
+ /*
58
+ .apsl-settings-tabs-wrapper.clearfix {
59
+ margin-top: 1px;
60
+ }
61
+ */
62
+ .apsl-active-tab a{
63
+ color:#595959;
64
+ border-bottom:1px #595959 solid;
65
+ }
66
+
67
+
68
+ .main-title {
69
+ font-size: 18px;
70
+ margin-bottom: -9px;
71
+ margin-top:10px;
72
+ }
73
+
74
+ .apsl-settings {
75
+ cursor: move;
76
+ margin-bottom: 25px;
77
+ width: 97%;
78
+ background:#fff;
79
+
80
+ }
81
+
82
+ .apsl-label {
83
+ background-color: #DADADA;
84
+ margin-left: -10px;
85
+ width: 100%;
86
+ }
87
+ .apsl-enable-disable {
88
+ padding-bottom: 13px;
89
+ }
90
+
91
+
92
+ .apsl-settings.apsl-facebook-settings.ui-sortable-handle > input, .apsl-settings.apsl-twitter-settings.ui-sortable-handle > input,
93
+ .apsl-settings.apsl-google-settings.ui-sortable-handle > input, .apsl-settings.apsl-linkedin-settings.ui-sortable-handle > input,
94
+ .apsl-settings.apsl-instagram-settings.ui-sortable-handle > input,.apsl-settings.apsl-vk-settings.ui-sortable-handle > input,
95
+ .apsl-settings.apsl-foursquare-settings.ui-sortable-handle > input,.apsl-settings.apsl-wordpress-settings.ui-sortable-handle > input,
96
+ .apsl-settings.apsl-buffer-settings.ui-sortable-handle > input
97
+
98
+ {
99
+ margin-right: 30px;
100
+ margin-left: 5px;
101
+ }
102
+ .apsl-submit-settings.primary-button {
103
+ background: #0074a2 none repeat scroll 0 0;
104
+ border: medium none;
105
+ border-radius: 4px;
106
+
107
+ color: #ffffff;
108
+ font-weight: 600;
109
+ padding: 9px 20px;
110
+
111
+
112
+ }
113
+
114
+ .toplevel_page_apsl-lite input[type="text"]{
115
+ width:70%;
116
+ }
117
+
118
+ .apsl-submit-settings.primary-button {
119
+ width: 120px;
120
+ cursor: pointer;
121
+ float:left;
122
+ }
123
+
124
+ span.apsl-info-note {
125
+ font-size: 18px;
126
+ }
127
+ span.apsl-info-content {
128
+ font-style: italic;
129
+
130
+ }
131
+ .apsl-info-lists li{
132
+ list-style-type: square;
133
+ }
134
+ ul.apsl-info-lists {
135
+ margin-left: 17px;
136
+ font-style: italic;
137
+
138
+ }
139
+ .apsl-settings-tabs-wrapper li .apsl-active-tab {
140
+ color: #fff;
141
+ background: rgb(5, 105, 168);
142
+ font-weight: bold;
143
+ background: transparent;
144
+ background:#0074a2;/* FF3+,Saf3+,Opera 10.10+,Chrome,IE9*/
145
+
146
+ }
147
+ #tab-apsl-theme-settings .apsl-theme.apsl-png-theme {
148
+ width: 10px;
149
+ }
150
+ #tab-apsl-theme-settings .apsl-themes {
151
+ margin-bottom: 14px;
152
+ margin-top: 0px;
153
+ padding-bottom: 10px;
154
+ padding-left: 0px;
155
+ width: 100%;
156
+ }
157
+
158
+ #tab-apsl-theme-settings h3 {
159
+ font-size: 14px;
160
+ font-weight: bold;
161
+ margin-bottom: 10px;
162
+ background-color: #DADADA;
163
+ color: white;
164
+ padding: 10px;
165
+
166
+ }
167
+ #tab-apsl-how-to-use > p {
168
+ background: #DADADA none repeat scroll 0 0;
169
+ color: #000;
170
+ font-size: 14px;
171
+ padding-bottom: 5px;
172
+ padding-left: 5px;
173
+ padding-top: 5px;
174
+ width: 98%;
175
+ }
176
+ #tab-apsl-how-to-use {
177
+ width: 100%;
178
+ margin-top: -6px;
179
+ background-color: #fff;
180
+ }
181
+ #tab-apsl-how-to-use dl {
182
+ padding-left: 5px;
183
+ padding-bottom: 1px;
184
+ }
185
+ #tab-apsl-how-to-use strong {
186
+ font-size: 15px;
187
+ }
188
+ #tab-apsl-how-to-use dd {
189
+ margin-left: 0;
190
+ margin-top: 12px;
191
+ }
192
+ #tab-apsl-how-to-use dt {
193
+ margin-top: 14px;
194
+ }
195
+ #tab-apsl-how-to-use p {
196
+ margin-bottom: 6px;
197
+ }
198
+ #tab-apsl-how-to-use dl {
199
+ padding-bottom: 10px;
200
+ }
201
+ #tab-apsl-how-to-use .how-list li{
202
+ list-style-type: square;
203
+ margin-left:13px;
204
+ }
205
+ #tab-apsl-about .more-product img {
206
+ width: 100px;
207
+ }
208
+ #tab-apsl-about {
209
+ width: 98%;
210
+ margin-bottom: 29px;
211
+ padding-bottom: 22px;
212
+ background-color: #fff;
213
+ }
214
+ #tab-apsl-about .ap-title {
215
+ background: #DADADA none repeat scroll 0 0;
216
+ color: #000;
217
+ font-size: 14px;
218
+ margin-top: 8px;
219
+ padding-bottom: 7px;
220
+ padding-left: 5px;
221
+ padding-top: 6px;
222
+ }
223
+ #tab-apsl-about .more-title {
224
+ background: #DADADA none repeat scroll 0 0;
225
+ color: #000;
226
+ font-weight: 600;
227
+ padding-bottom: 10px;
228
+ padding-top: 10px;
229
+ text-align: center;
230
+ }
231
+ #tab-apsl-about .more-product > li {
232
+ float: left!important;
233
+ width: 250px!important;
234
+ margin-left: 7px;
235
+ }
236
+ #tab-apsl-about .more-product img {
237
+ margin-left: -109px;
238
+ padding-bottom: 21px;
239
+ }
240
+ #tab-apsl-about .more-product a {
241
+ text-decoration: none;
242
+ }
243
+ .apsl-message {
244
+ background: #0074a2 none repeat scroll 0 0;
245
+ border-left: 5px solid #78B343;
246
+ border-radius: 8px;
247
+ color: #ffffff;
248
+ font-weight: 600;
249
+ margin-bottom: 5px;
250
+ margin-top: 6px;
251
+ padding-bottom: 3px;
252
+ padding-left: 5px;
253
+ padding-top: 3px;
254
+ width: 99%;
255
+ }
256
+ .fb ,.twt, .gp,.utube, .skype{
257
+ float: left;
258
+ width:100px;
259
+ }
260
+ .pin{
261
+ width:100px;
262
+ }
263
+ .about-social .fb .fa {
264
+ background: #3d5c99 none repeat scroll 0 0;
265
+ color: #ffffff;
266
+ font-size: 25px;
267
+ padding: 20px;
268
+ }
269
+ .about-social .twt .fa{
270
+ background: #2594C4 none repeat scroll 0 0;
271
+ color: #ffffff;
272
+ font-size: 25px;
273
+ padding: 20px;
274
+ }
275
+ .about-social .gp .fa{
276
+ background: #A83636 none repeat scroll 0 0;
277
+ color: #ffffff;
278
+ font-size: 25px;
279
+ padding: 20px;
280
+ }
281
+ .about-social .utube .fa{
282
+ background: #B03434 none repeat scroll 0 0;
283
+ color: #ffffff;
284
+ font-size: 25px;
285
+ padding: 20px;
286
+ }
287
+ .about-social .skype .fa{
288
+ background: #169AD1 none repeat scroll 0 0;
289
+ color: #ffffff;
290
+ font-size: 25px;
291
+ padding: 20px;
292
+ }
293
+ .about-social .pin .fa{
294
+ background: #A6212B none repeat scroll 0 0;
295
+ color: #ffffff;
296
+ font-size: 25px;
297
+ padding: 20px;
298
+ }
299
+ #tab-apsl-about .about-social span {
300
+ display: block;
301
+ margin-top: 1px;
302
+ text-decoration: none;
303
+ }
304
+
305
+ .apsl-setting-header.clearfix {
306
+ background: #0074a2 none repeat scroll 0 0;
307
+ margin-bottom: 10px;
308
+ margin-top: 10px;
309
+ padding-bottom: 13px;
310
+ width: 100%;
311
+ }
312
+
313
+ .apsl-right-header-block {
314
+ float: right;
315
+ margin-right: 12px;
316
+ color:#fff;
317
+ }
318
+ .apsl-headerlogo {
319
+ float: left;
320
+ }
321
+
322
+ .apsl-headerlogo {
323
+ color: #ffffff;
324
+ float: left;
325
+ font-size: 18px;
326
+ margin-left: 15px;
327
+ margin-top: 33px;
328
+ }
329
+ input.apsl-reset-button.button.primary-button {
330
+ background-color: #0074A2;
331
+ border: none;
332
+ width: 165px;
333
+ padding-left: 7px;
334
+ padding-top: 2px;
335
+ height: 37px;
336
+ margin-left: 10px;
337
+ font-weight: 600;
338
+ margin-top: 2px;
339
+ color: #fff;
340
+
341
+ }
342
+ span.plugin-version {
343
+ display: block;
344
+ font-size: 11px;
345
+ }
346
+
347
+ .apsl-display-options input#apsl_enable_plugin {
348
+ width: 1px;
349
+ margin-left: 21px;
350
+ }
351
+ .apsl-display-options input#apsl_disable_plugin {
352
+ width: 1px;
353
+ }
354
+ input.apsl-reset-button.button.primary-button:hover {
355
+ opacity: 0.7;
356
+ -webkit-transition: all 1s ease;/* Safari 3.2+, Chrome */
357
+ -moz-transition: all 1s ease;/* Firefox 4-15 */
358
+ -o-transition: all 1s ease;/* Opera 10.5-12.00 */
359
+ transition: all 1s ease;/* Firefox 16+, Opera 12.50+ */
360
+ }
361
+ .apsl-submit-settings.primary-button:hover {
362
+ opacity: 0.7;
363
+ -webkit-transition: all 1s ease;/* Safari 3.2+, Chrome */
364
+ -moz-transition: all 1s ease;/* Firefox 4-15 */
365
+ -o-transition: all 1s ease;/* Opera 10.5-12.00 */
366
+ transition: all 1s ease;/* Firefox 16+, Opera 12.50+ */
367
+ }
368
+ .apsl-display-options {
369
+ margin-top: 9px;
370
+ margin-left: 0px;
371
+ width:100%;
372
+ }
373
+ #tab-apsl-theme-settings input#apsl-login-short-text {
374
+
375
+ }
376
+
377
+ #tab-apsl-theme-settings input#apsl-login-with-long-text {
378
+
379
+ }
380
+ #tab-apsl-theme-settings input#apsl_each_link_title_attribute {
381
+
382
+ }
383
+ #tab-apsl-theme-settings span.apsl-info-note {
384
+ font-size: 13px;
385
+ opacity: 0.5;
386
+ font-style: italic;
387
+ display: block;
388
+ padding-top: -42px;
389
+ margin-top: -19px;
390
+ margin-bottom: 16px;
391
+ }
392
+ #tab-apsl-theme-settings .apsl-each-link-title-attribute {
393
+
394
+ padding-left: 7px;
395
+ }
396
+ div#tab-apsl-theme-settings {
397
+ background-color: #fff;
398
+ width: 98%;
399
+ padding-bottom: 1px;
400
+ margin-bottom: 21px;
401
+ }
402
+ #tab-apsl-theme-settings .apsl-each-login-short-text {
403
+ padding-left: 6px;
404
+ }
405
+ #tab-apsl-theme-settings .apsl-title-text-field {
406
+ padding-left: 6px;
407
+ }
408
+ #tab-apsl-theme-settings .apsl-each-login-long-text {
409
+ padding-left: 7px;
410
+ }
411
+ #tab-apsl-about ul.about-social.clearfix {
412
+ margin-left: 7px;
413
+ }
414
+ #tab-apsl-about strong {
415
+ margin-left: 7px;
416
+ }
417
+
418
+ #tab-apsl-theme-settings .apsl-settings{
419
+ cursor: auto
420
+ }
421
+ /** Added By regan **/
422
+ .apsl-settings-tabs-wrapper.clearfix {
423
+ border: 1px solid #bbb;
424
+ background-color: white;
425
+ padding: 0px 10px;
426
+ margin-bottom: 12px;
427
+ }
428
+
429
+ .apsl-setting-tabs-wrapper {
430
+ border: 1px solid #bbb;
431
+ background-color: white;
432
+ padding: 15px;
433
+ }
434
+ .apsl-outer-wrapper {
435
+ width: 1024px;
436
+ }
437
+ .apsl_network_settings_wrapper label {
438
+ display: inline-block;
439
+ width: 25%;
440
+ font-weight: bold;
441
+ }
442
+ .apsl-app-id-wrapper, .apsl-app-secret-wrapper {
443
+ margin-bottom: 15px;
444
+ }
445
+ .apsl-info {
446
+ background-color: #FFFBCC;
447
+ color: black !important;
448
+ padding: 10px;
449
+ margin-bottom: 28px;
450
+ }
451
+
452
+ .social-login span, .social-login-buddypress span, .social-login-woocommerce span{
453
+ width: 35%;
454
+ display: inline-block;}
455
+
456
+ #your-profile label+a, fieldset label, label{
457
+ margin-right: 10px
458
+ }
459
+
460
+ .apsl-themes > div{
461
+ margin:10px 0 20px;
462
+ }
463
+
464
+ .apsl-theme-previewbox{
465
+ margin-top: 10px
466
+ }
467
+
468
+ .apsl-theme > label{
469
+ font-weight: bold;
470
+ font-size: 14px;
471
+ }
472
+
473
+ .apsl-theme span{margin-left: 5px; display: inline-block;}
474
+ .apsl-title-text-field span, .apsl-each-login-short-text span, .apsl-each-login-long-text span, .apsl-each-link-title-attribute span{
475
+ display: inline-block;
476
+ width: 25%;
477
+
478
+ }
479
+
480
+ .apsl-themes-wrapper .apsl-theme{
481
+ margin: 15px 0
482
+ }
483
+
484
+ .logo-wrap, .logo-content{
485
+ float: left;
486
+ margin-right: 15px
487
+ }
488
+ @media screen and (max-width: 1206px) {
489
+ .apsl-outer-wrapper {
490
+ width:100%;
491
+ }
492
+
493
+ .apsl-settings-tab{
494
+ width: 20%;
495
+ padding: 10px 0 0;
496
+ text-align: center;
497
+ }
498
+ }
css/frontend.css ADDED
@@ -0,0 +1,503 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ div.social-networks a{
2
+ border-bottom:none;
3
+ text-decoration: none;
4
+ }
5
+
6
+ .theme-1 .apsl-long-login-text,.theme-1 .apsl-login-text{
7
+ display: none;
8
+ }
9
+
10
+ .theme-2 .apsl-login-text,.theme-2 .apsl-long-login-text {
11
+ display: none;
12
+ }
13
+
14
+ .theme-3 .apsl-long-login-text,.theme-3 .apsl-login-text {
15
+ display: none;
16
+ }
17
+
18
+ .theme-4 .apsl-long-login-text,.theme-4 .apsl-login-text {
19
+ display: none;
20
+ }
21
+
22
+ .apsl-icon-block {
23
+ margin-bottom:10px;
24
+
25
+ }
26
+
27
+ .theme-1
28
+ .theme-1 .fa.fa-facebook:hover,.theme-1 .fa.fa-twitter:hover,.theme-1 .fa.fa-google:hover,
29
+ .theme-1 .fa.fa-linkedin:hover,.theme-1 .fa.fa-instagram:hover,.theme-1 .fa.fa-vk:hover,
30
+ .theme-1 .fa.fa-foursquare:hover,.theme-1 .fa.fa-wordpress:hover, .theme-1 .fa-buffer:hover
31
+
32
+ {
33
+ opacity:0.5;
34
+ -webkit-transition: all 1s ease;/* Safari 3.2+, Chrome */
35
+ -moz-transition: all 1s ease;/* Firefox 4-15 */
36
+ -o-transition: all 1s ease;/* Opera 10.5-12.00 */
37
+ transition: all 1s ease;/* Firefox 16+, Opera 12.50+ */
38
+ }
39
+ .theme-2 .fa.fa-facebook:hover,.theme-2 .fa.fa-twitter:hover,.theme-2 .fa.fa-google:hover,
40
+ .theme-2 .fa.fa-linkedin:hover,.theme-2 .fa.fa-instagram:hover,.theme-2 .fa.fa-vk:hover,
41
+ .theme-2 .fa.fa-foursquare:hover,.theme-2 .fa.fa-wordpress:hover, .theme-2 .fa-buffer:hover
42
+
43
+ {background:none;
44
+ /*opacity:0.5;
45
+
46
+ color:black;*/
47
+ -webkit-transition: all 1s ease;/* Safari 3.2+, Chrome */
48
+ -moz-transition: all 1s ease;/* Firefox 4-15 */
49
+ -o-transition: all 1s ease;/* Opera 10.5-12.00 */
50
+ transition: all 1s ease;/* Firefox 16+, Opera 12.50+ */
51
+
52
+
53
+ }
54
+
55
+ .theme-3 .fa.fa-facebook:hover,.theme-3 .fa.fa-twitter:hover,.theme-3 .fa.fa-google:hover,
56
+ .theme-3 .fa.fa-linkedin:hover,.theme-3 .fa.fa-instagram:hover,.theme-3 .fa.fa-vk:hover,
57
+ .theme-3 .fa.fa-foursquare:hover,.theme-3 .fa.fa-wordpress:hover, .theme-3 .fa-buffer:hover{
58
+ opacity:0.8;
59
+ background-color: #9D1C20;
60
+ -webkit-transition: all 1s ease;/* Safari 3.2+, Chrome */
61
+ -moz-transition: all 1s ease;/* Firefox 4-15 */
62
+ -o-transition: all 1s ease;/* Opera 10.5-12.00 */
63
+ transition: all 1s ease;/* Firefox 16+, Opera 12.50+ */
64
+
65
+ }
66
+
67
+ .theme-3 .fa.fa-facebook {
68
+ background: #3b5999 none repeat scroll 0 0;
69
+ border-radius: 5px;
70
+ color: #ffffff;
71
+ text-align: center;
72
+ height: 39px;
73
+ font-size: 20px;
74
+ vertical-align: middle;
75
+ display: table-cell;
76
+ width: 40px;
77
+ }
78
+
79
+ .theme-3 .fa-buffer {
80
+ background: url("../images/buffer.png") no-repeat scroll center center;
81
+ border-radius: 5px;
82
+ color: #ffffff;
83
+ text-align: center;
84
+ height: 39px;
85
+ font-size: 20px;
86
+ vertical-align: middle;
87
+ display: table-cell;
88
+ width: 38px;
89
+ background-color: #000
90
+ }
91
+
92
+ .theme-3 .fa.fa-twitter {
93
+ background: #42d3ff none repeat scroll 0 0;
94
+ border-radius: 5px;
95
+ color: #ffffff;
96
+ text-align: center;
97
+ height: 39px;
98
+ font-size: 20px;
99
+ vertical-align: middle;
100
+ display: table-cell;
101
+ width: 40px;
102
+ }
103
+
104
+ .theme-3 .fa.fa-google {
105
+ background: #dd4b39 none repeat scroll 0 0;
106
+ border-radius: 5px;
107
+ color: #ffffff;
108
+ margin-left: 0;
109
+ text-align: center;
110
+ height: 39px;
111
+ font-size: 20px;
112
+ vertical-align: middle;
113
+ display: table-cell;
114
+ width: 40px;
115
+ }
116
+
117
+ .theme-3 .fa.fa-linkedin {
118
+ background: #42d3ff none repeat scroll 0 0;
119
+ border-radius: 5px;
120
+ color: #ffffff;
121
+ margin-left: 1px;
122
+ text-align: center;
123
+ height: 39px;
124
+ font-size: 20px;
125
+ vertical-align: middle;
126
+ display: table-cell;
127
+ width: 40px;
128
+ }
129
+
130
+ .theme-3 .fa.fa-instagram {
131
+ background: #3f729b none repeat scroll 0 0;
132
+ border-radius: 5px;
133
+ color: #ffffff;
134
+ margin-left: 3px;
135
+ text-align: center;
136
+ height: 39px;
137
+ font-size: 20px;
138
+ vertical-align: middle;
139
+ display: table-cell;
140
+ width: 40px;
141
+ }
142
+
143
+ .theme-3 .fa.fa-vk {
144
+ background: #5e5959 none repeat scroll 0 0;
145
+ border-radius: 5px;
146
+ color: #ffffff;
147
+ margin-left: 3px;
148
+ text-align: center;
149
+ height: 39px;
150
+ font-size: 20px;
151
+ vertical-align: middle;
152
+ display: table-cell;
153
+ width: 40px;
154
+ }
155
+
156
+ .theme-3 .fa.fa-foursquare {
157
+ background: #80b63e none repeat scroll 0 0;
158
+ border-radius: 5px;
159
+ color: #ffffff;
160
+ margin-left: 3px;
161
+ text-align: center;
162
+ height: 39px;
163
+ font-size: 20px;
164
+ vertical-align: middle;
165
+ display: table-cell;
166
+ width: 40px;
167
+ }
168
+
169
+ .theme-3 .fa.fa-wordpress {
170
+ background: #8f8f8f none repeat scroll 0 0;
171
+ border-radius: 5px;
172
+ color: #ffffff;
173
+ margin-left: 3px;
174
+ text-align: center;
175
+ height: 39px;
176
+ font-size: 20px;
177
+ vertical-align: middle;
178
+ display: table-cell;
179
+ width: 40px;
180
+ }
181
+
182
+ .theme-1 .fa.fa-facebook {
183
+ background: #0073AA none repeat scroll 0 0;
184
+ border-radius: 24px;
185
+ color:#fff;
186
+ text-align: center;
187
+ height: 39px;
188
+ font-size: 20px;
189
+ vertical-align: middle;
190
+ display: table-cell;
191
+ width: 40px;
192
+
193
+ }
194
+
195
+ .theme-1 .fa-buffer {
196
+ background: rgba(0, 0, 0, 0) url("../images/buffer.png") no-repeat scroll center center;
197
+ border-radius: 24px;
198
+ color: #ffffff;
199
+ display: table-cell;
200
+ font-size: 20px;
201
+ height: 39px;
202
+ text-align: center;
203
+ vertical-align: middle;
204
+ width: 40px;
205
+ background-color: #333333
206
+ }
207
+
208
+ .theme-1 .fa.fa-twitter {
209
+ background: #1FCCFF none repeat scroll 0 0;
210
+ border-radius: 24px;
211
+ color:#fff;
212
+ text-align: center;
213
+ height: 39px;
214
+ font-size: 20px;
215
+ vertical-align: middle;
216
+ display: table-cell;
217
+ width: 40px;
218
+ }
219
+
220
+ .theme-1 .fa.fa-google {
221
+ background: #DE4B3B none repeat scroll 0 0;
222
+ border-radius: 24px;
223
+ color: #ffffff;
224
+ margin-left: 1px;
225
+ text-align: center;
226
+ height: 39px;
227
+ font-size: 20px;
228
+ vertical-align: middle;
229
+ display: table-cell;
230
+ width: 40px;
231
+ }
232
+
233
+ .theme-1 .fa.fa-linkedin {
234
+ background:#3F739A none repeat scroll 0 0;
235
+ border-radius: 24px;
236
+ color: #ffffff;
237
+ margin-left: 2px;
238
+ text-align: center;
239
+ height: 39px;
240
+ font-size: 20px;
241
+ vertical-align: middle;
242
+ display: table-cell;
243
+ width: 40px;
244
+ }
245
+
246
+ .theme-1 .fa.fa-instagram {
247
+ background: #ff0000 none repeat scroll 0 0;
248
+ border-radius: 24px;
249
+ color: #ffffff;
250
+ margin-left: 4px;
251
+ text-align: center;
252
+ height: 39px;
253
+ font-size: 20px;
254
+ vertical-align: middle;
255
+ display: table-cell;
256
+ width: 40px;
257
+ }
258
+
259
+ .theme-1 .fa.fa-vk {
260
+ background:#BF0808 none repeat scroll 0 0;
261
+ border-radius: 24px;
262
+ color: #ffffff;
263
+ margin-left: 5px;
264
+ text-align: center;
265
+ height: 39px;
266
+ font-size: 20px;
267
+ vertical-align: middle;
268
+ display: table-cell;
269
+ width: 40px;
270
+ }
271
+ .theme-1 .fa.fa-foursquare {
272
+ background:#8F8F8F none repeat scroll 0 0;
273
+ border-radius: 24px;
274
+ color: #ffffff;
275
+ margin-left: 5px;
276
+ text-align: center;
277
+ height: 39px;
278
+ font-size: 20px;
279
+ vertical-align: middle;
280
+ display: table-cell;
281
+ width: 40px;
282
+ }
283
+
284
+ .theme-1 .fa.fa-wordpress {
285
+ background:#5F5959 none repeat scroll 0 0;
286
+ border-radius: 24px;
287
+ color: #ffffff;
288
+ margin-left: 5px;
289
+ text-align: center;
290
+ height: 39px;
291
+ font-size: 20px;
292
+ vertical-align: middle;
293
+ display: table-cell;
294
+ width: 40px;
295
+ }
296
+ .theme-2 .fa.fa-facebook {
297
+ background: #1C74BC none repeat scroll 0 0;
298
+ color: #ffffff;
299
+ text-align: center;
300
+ height: 38px;
301
+ font-size: 20px;
302
+ vertical-align: middle;
303
+ display: table-cell;
304
+ width: 38px;
305
+ border: 1px solid #1C74BC;
306
+ }
307
+ .theme-2 .fa-buffer {
308
+ background: url("../images/buffer.png") no-repeat scroll center center;
309
+ color: #fff;
310
+ text-align: center;
311
+ height: 38px;
312
+ font-size: 20px;
313
+ vertical-align: middle;
314
+ display: table-cell;
315
+ width: 38px;
316
+ border: 1px solid #333333;
317
+ background-color: #333333
318
+ }
319
+ .theme-2 .fa.fa-twitter{
320
+ background: #24B4F3 none repeat scroll 0 0;
321
+ color: #ffffff;
322
+ text-align: center;
323
+ height: 38px;
324
+ font-size: 20px;
325
+ vertical-align: middle;
326
+ display: table-cell;
327
+ width: 38px;
328
+ border: 1px solid #24B4F3;
329
+
330
+ }
331
+ .theme-2 .fa.fa-google{
332
+ background: #86C344 none repeat scroll 0 0;
333
+ color: #ffffff;
334
+ text-align: center;
335
+ height: 38px;
336
+ font-size: 20px;
337
+ vertical-align: middle;
338
+ display: table-cell;
339
+ width: 38px;
340
+ border: 1px solid #86C344;
341
+
342
+ }
343
+ .theme-2 .fa.fa-linkedin{
344
+ background: #0000ff none repeat scroll 0 0;
345
+ color: #ffffff;
346
+ text-align: center;
347
+ height: 38px;
348
+ font-size: 20px;
349
+ vertical-align: middle;
350
+ display: table-cell;
351
+ width: 38px;
352
+ border: 1px solid #0000ff;
353
+
354
+
355
+ }
356
+ .theme-2 .fa.fa-instagram{
357
+ background: #D93232 none repeat scroll 0 0;
358
+ color: #ffffff;
359
+ text-align: center;
360
+ height: 38px;
361
+ font-size: 20px;
362
+ vertical-align: middle;
363
+ display: table-cell;
364
+ width: 38px;
365
+ border: 1px solid #D93232;
366
+
367
+ }
368
+ .theme-2 .fa.fa-vk{
369
+ background: #B7BABB none repeat scroll 0 0;
370
+ color: #ffffff;
371
+ text-align: center;
372
+ height: 38px;
373
+ font-size: 20px;
374
+ vertical-align: middle;
375
+ display: table-cell;
376
+ width: 38px;
377
+ border: 1px solid #B7BABB;
378
+
379
+ }
380
+ .theme-2 .fa.fa-foursquare{
381
+ background: #211F20 none repeat scroll 0 0;
382
+ color: #ffffff;
383
+ text-align: center;
384
+ height: 38px;
385
+ font-size: 20px;
386
+ vertical-align: middle;
387
+ display: table-cell;
388
+ width: 38px;
389
+ border: 1px solid #211F20;
390
+
391
+ }
392
+ .theme-2 .fa.fa-wordpress{
393
+ background:#4E624F none repeat scroll 0 0;
394
+ color: #ffffff;
395
+ text-align: center;
396
+ height: 38px;
397
+ font-size: 20px;
398
+ vertical-align: middle;
399
+ display: table-cell;
400
+ width: 38px;
401
+ border: 1px solid #4E624F;
402
+
403
+ }
404
+
405
+ .theme-2 .fa.fa-google:hover{
406
+ border: 1px solid #86C344;
407
+ color: #86C344 ;
408
+
409
+ }
410
+ .theme-2 .fa.fa-facebook:hover{
411
+ border: 1px solid #1C74BC;
412
+ color: #1C74BC ;
413
+
414
+ }
415
+
416
+ .theme-2 .fa.fa-twitter:hover{
417
+ border: 1px solid #24B4F3;
418
+ color: #24B4F3 ;
419
+
420
+ }
421
+
422
+ .theme-2 .fa.fa-instagram:hover{
423
+ border: 1px solid #D93232;
424
+ color: #D93232 ;
425
+
426
+ }
427
+
428
+ .theme-2 .fa.fa-foursquare:hover{
429
+ border: 1px solid #211F20;
430
+ color: #211F20 ;
431
+
432
+ }
433
+
434
+ .theme-2 .fa.fa-wordpress:hover{
435
+ border: 1px solid #4E624F;
436
+ color: #4E624F ;
437
+
438
+
439
+ }
440
+
441
+ .theme-2 .fa.fa-linkedin:hover{
442
+ border: 1px solid #0000ff;
443
+ color: #0000ff ;
444
+
445
+
446
+ }
447
+
448
+ .theme-2 .fa.fa-vk:hover{
449
+ border: 1px solid #B7BABB;
450
+ color: #B7BABB ;
451
+
452
+
453
+ }
454
+
455
+ .theme-2 .fa-buffer:hover{
456
+
457
+ background: url("../images/buffer-black.png") no-repeat scroll center center;
458
+ border: 1px solid #333333;
459
+ background-color: #fff ;
460
+ }
461
+
462
+ .theme-4 .fa.fa-facebook,.theme-4 .apsl-icon-block.buffer,.theme-4 .fa.fa-twitter,.theme-4 .fa.fa-google,
463
+ .theme-4 .fa.fa-linkedin,.theme-4 .fa.fa-instagram,.theme-4 .fa.fa-vk,.theme-4 .fa.fa-foursquare,
464
+ .theme-4 .fa.fa-wordpress{
465
+ color:#000;
466
+ font-size:20px;
467
+ }
468
+
469
+ .theme-4 .fa.fa-buffer {
470
+ background: rgba(0, 0, 0, 0) url("../images/buffer-black.png") no-repeat scroll center center;
471
+ width:18px;
472
+ height:18px;
473
+ background-size: cover;
474
+ margin-top: 1px
475
+ }
476
+
477
+ .apsl-icon-block {
478
+ display: inline-block;
479
+ margin-right: 10px;
480
+
481
+ }
482
+
483
+ span.apsl-login-new-text{
484
+ font-size: 15px;
485
+ font-weight: bold;
486
+ display: block;
487
+ margin-bottom: 15px
488
+ }
489
+
490
+ #loginform a{
491
+ display: inline-block;
492
+ }
493
+
494
+ .theme-4 .apsl-icon-block.buffer.clearfix{
495
+ background-color: #fff;
496
+ }
497
+
498
+ .apsl-error{
499
+ font-size: 13px;
500
+ color:red;
501
+ margin-bottom: 10px;
502
+ display: block;
503
+ }
facebook/apsl_facebook_class.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Facebook extends loginBySocialID{
3
+ static $loginBy = 'deLoginByFacebook';
4
+
5
+ function loginByOpenID(){
6
+ $post = $_POST;
7
+ $get = $_GET;
8
+ $request = $_REQUEST;
9
+ $site = $this->siteUrl();
10
+ $callBackUrl= $this->callBackUrl();
11
+ $response = new stdClass();
12
+ $a = explode('_',$this->get_var(parent::$loginKey));
13
+ $action = $a[1];
14
+ $options = $this->getOptions();
15
+ $config = array(
16
+ 'appId' => $options['facebook_key'],
17
+ 'secret' => $options['facebook_secret']
18
+ );
19
+
20
+ $facebook = new Facebook($config);
21
+ if ($action == 'login'){
22
+ $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$callBackUrl.parent::$loginKey.'='.self::$loginBy.'_check', 'scope'=>'email'));
23
+ $this->redirect($loginUrl);
24
+ exit();
25
+ }else{
26
+ echo "jay";
27
+ die();
28
+ $user = $facebook->getUser();
29
+ if ($user){
30
+ try {// Proceed knowing you have a logged in user who's authenticated.
31
+ $user_profile = $facebook->api('/me');
32
+ } catch (FacebookApiException $e) {
33
+ error_log($e);
34
+ $user = null;
35
+ }
36
+ }
37
+ if($user!=null){
38
+ $response->status = 'SUCCESS';
39
+ $response->deuid = $user_profile['id'];
40
+ $response->deutype = 'facebook';
41
+ $response->first_name = $user_profile['first_name'];
42
+ $response->last_name = $user_profile['last_name'];
43
+ $response->email = $user_profile['email'];
44
+ $response->username = $user_profile['email'];
45
+ ////['id'].'@facebook';
46
+ $headers = get_headers('https://graph.facebook.com/'.$user_profile['id'].'/picture',1);
47
+ // just a precaution, check whether the header isset...
48
+ if(isset($headers['Location'])) {
49
+ $response->deuimage = $headers['Location']; // string
50
+ } else {
51
+ $response->deuimage = false; // nothing there? .. weird, but okay!
52
+ }
53
+ $response->error_message = '';
54
+ }else{
55
+ $response->status = 'ERROR';
56
+ $response->error_code = 2;
57
+ $response->error_message= 'INVALID AUTHORIZATION';
58
+ }
59
+ }
60
+ return $response;
61
+ }
62
+
63
+ function onLogin(){
64
+ $response = new stdClass();
65
+ $result = $this->loginByOpenID($response);
66
+ if($result->status == 'SUCCESS'){
67
+ $row = $this->getUserByMail( $result->email);
68
+ if(!$row){
69
+ $this->creatUser($result->username, $result->email);
70
+ $row = $this->getUserByMail( $result->email);
71
+ update_user_meta($row->ID, 'email', $result->email);
72
+ update_user_meta($row->ID, 'first_name', $result->first_name);
73
+ update_user_meta($row->ID, 'last_name', $result->last_name);
74
+ update_user_meta($row->ID, 'deuid', $result->deuid);
75
+ update_user_meta($row->ID, 'deutype', $result->deutype);
76
+ update_user_meta($row->ID, 'deuimage', $result->deuimage);
77
+ wp_update_user( array ('ID' => $row->ID, 'display_name' => $result->first_name.' '.$result->last_name) ) ;
78
+ }
79
+ //var_dump($row);
80
+ $this->loginUser($row->ID);
81
+ }
82
+ }
83
+ }
84
+
85
+ ?>
facebook/src/base_facebook.php ADDED
@@ -0,0 +1,1543 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2011 Facebook, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
6
+ * not use this file except in compliance with the License. You may obtain
7
+ * a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations
15
+ * under the License.
16
+ */
17
+
18
+ if (!function_exists('curl_init')) {
19
+ throw new Exception('Facebook needs the CURL PHP extension.');
20
+ }
21
+ if (!function_exists('json_decode')) {
22
+ throw new Exception('Facebook needs the JSON PHP extension.');
23
+ }
24
+
25
+ /**
26
+ * Thrown when an API call returns an exception.
27
+ */
28
+ class FacebookApiException extends Exception
29
+ {
30
+ /**
31
+ * The result from the API server that represents the exception information.
32
+ *
33
+ * @var mixed
34
+ */
35
+ protected $result;
36
+
37
+ /**
38
+ * Make a new API Exception with the given result.
39
+ *
40
+ * @param array $result The result from the API server
41
+ */
42
+ public function __construct($result) {
43
+ $this->result = $result;
44
+
45
+ $code = 0;
46
+ if (isset($result['error_code']) && is_int($result['error_code'])) {
47
+ $code = $result['error_code'];
48
+ }
49
+
50
+ if (isset($result['error_description'])) {
51
+ // OAuth 2.0 Draft 10 style
52
+ $msg = $result['error_description'];
53
+ } else if (isset($result['error']) && is_array($result['error'])) {
54
+ // OAuth 2.0 Draft 00 style
55
+ $msg = $result['error']['message'];
56
+ } else if (isset($result['error_msg'])) {
57
+ // Rest server style
58
+ $msg = $result['error_msg'];
59
+ } else {
60
+ $msg = 'Unknown Error. Check getResult()';
61
+ }
62
+
63
+ parent::__construct($msg, $code);
64
+ }
65
+
66
+ /**
67
+ * Return the associated result object returned by the API server.
68
+ *
69
+ * @return array The result from the API server
70
+ */
71
+ public function getResult() {
72
+ return $this->result;
73
+ }
74
+
75
+ /**
76
+ * Returns the associated type for the error. This will default to
77
+ * 'Exception' when a type is not available.
78
+ *
79
+ * @return string
80
+ */
81
+ public function getType() {
82
+ if (isset($this->result['error'])) {
83
+ $error = $this->result['error'];
84
+ if (is_string($error)) {
85
+ // OAuth 2.0 Draft 10 style
86
+ return $error;
87
+ } else if (is_array($error)) {
88
+ // OAuth 2.0 Draft 00 style
89
+ if (isset($error['type'])) {
90
+ return $error['type'];
91
+ }
92
+ }
93
+ }
94
+
95
+ return 'Exception';
96
+ }
97
+
98
+ /**
99
+ * To make debugging easier.
100
+ *
101
+ * @return string The string representation of the error
102
+ */
103
+ public function __toString() {
104
+ $str = $this->getType() . ': ';
105
+ if ($this->code != 0) {
106
+ $str .= $this->code . ': ';
107
+ }
108
+ return $str . $this->message;
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Provides access to the Facebook Platform. This class provides
114
+ * a majority of the functionality needed, but the class is abstract
115
+ * because it is designed to be sub-classed. The subclass must
116
+ * implement the four abstract methods listed at the bottom of
117
+ * the file.
118
+ *
119
+ * @author Naitik Shah <naitik@facebook.com>
120
+ */
121
+ abstract class BaseFacebook
122
+ {
123
+ /**
124
+ * Version.
125
+ */
126
+ const VERSION = '3.2.3';
127
+
128
+ /**
129
+ * Signed Request Algorithm.
130
+ */
131
+ const SIGNED_REQUEST_ALGORITHM = 'HMAC-SHA256';
132
+
133
+ /**
134
+ * Default options for curl.
135
+ *
136
+ * @var array
137
+ */
138
+ public static $CURL_OPTS = array(
139
+ CURLOPT_CONNECTTIMEOUT => 10,
140
+ CURLOPT_RETURNTRANSFER => true,
141
+ CURLOPT_TIMEOUT => 60,
142
+ CURLOPT_USERAGENT => 'facebook-php-3.2',
143
+ );
144
+
145
+ /**
146
+ * List of query parameters that get automatically dropped when rebuilding
147
+ * the current URL.
148
+ *
149
+ * @var array
150
+ */
151
+ protected static $DROP_QUERY_PARAMS = array(
152
+ 'code',
153
+ 'state',
154
+ 'signed_request',
155
+ );
156
+
157
+ /**
158
+ * Maps aliases to Facebook domains.
159
+ *
160
+ * @var array
161
+ */
162
+ public static $DOMAIN_MAP = array(
163
+ 'api' => 'https://api.facebook.com/',
164
+ 'api_video' => 'https://api-video.facebook.com/',
165
+ 'api_read' => 'https://api-read.facebook.com/',
166
+ 'graph' => 'https://graph.facebook.com/',
167
+ 'graph_video' => 'https://graph-video.facebook.com/',
168
+ 'www' => 'https://www.facebook.com/',
169
+ );
170
+
171
+ /**
172
+ * The Application ID.
173
+ *
174
+ * @var string
175
+ */
176
+ protected $appId;
177
+
178
+ /**
179
+ * The Application App Secret.
180
+ *
181
+ * @var string
182
+ */
183
+ protected $appSecret;
184
+
185
+ /**
186
+ * The ID of the Facebook user, or 0 if the user is logged out.
187
+ *
188
+ * @var integer
189
+ */
190
+ protected $user;
191
+
192
+ /**
193
+ * The data from the signed_request token.
194
+ *
195
+ * @var string
196
+ */
197
+ protected $signedRequest;
198
+
199
+ /**
200
+ * A CSRF state variable to assist in the defense against CSRF attacks.
201
+ *
202
+ * @var string
203
+ */
204
+ protected $state;
205
+
206
+ /**
207
+ * The OAuth access token received in exchange for a valid authorization
208
+ * code. null means the access token has yet to be determined.
209
+ *
210
+ * @var string
211
+ */
212
+ protected $accessToken = null;
213
+
214
+ /**
215
+ * Indicates if the CURL based @ syntax for file uploads is enabled.
216
+ *
217
+ * @var boolean
218
+ */
219
+ protected $fileUploadSupport = false;
220
+
221
+ /**
222
+ * Indicates if we trust HTTP_X_FORWARDED_* headers.
223
+ *
224
+ * @var boolean
225
+ */
226
+ protected $trustForwarded = false;
227
+
228
+ /**
229
+ * Indicates if signed_request is allowed in query parameters.
230
+ *
231
+ * @var boolean
232
+ */
233
+ protected $allowSignedRequest = true;
234
+
235
+ /**
236
+ * Initialize a Facebook Application.
237
+ *
238
+ * The configuration:
239
+ * - appId: the application ID
240
+ * - secret: the application secret
241
+ * - fileUpload: (optional) boolean indicating if file uploads are enabled
242
+ * - allowSignedRequest: (optional) boolean indicating if signed_request is
243
+ * allowed in query parameters or POST body. Should be
244
+ * false for non-canvas apps. Defaults to true.
245
+ *
246
+ * @param array $config The application configuration
247
+ */
248
+ public function __construct($config) {
249
+ $this->setAppId($config['appId']);
250
+ $this->setAppSecret($config['secret']);
251
+ if (isset($config['fileUpload'])) {
252
+ $this->setFileUploadSupport($config['fileUpload']);
253
+ }
254
+ if (isset($config['trustForwarded']) && $config['trustForwarded']) {
255
+ $this->trustForwarded = true;
256
+ }
257
+ if (isset($config['allowSignedRequest'])
258
+ && !$config['allowSignedRequest']) {
259
+ $this->allowSignedRequest = false;
260
+ }
261
+ $state = $this->getPersistentData('state');
262
+ if (!empty($state)) {
263
+ $this->state = $state;
264
+ }
265
+ }
266
+
267
+ /**
268
+ * Set the Application ID.
269
+ *
270
+ * @param string $appId The Application ID
271
+ *
272
+ * @return BaseFacebook
273
+ */
274
+ public function setAppId($appId) {
275
+ $this->appId = $appId;
276
+ return $this;
277
+ }
278
+
279
+ /**
280
+ * Get the Application ID.
281
+ *
282
+ * @return string the Application ID
283
+ */
284
+ public function getAppId() {
285
+ return $this->appId;
286
+ }
287
+
288
+ /**
289
+ * Set the App Secret.
290
+ *
291
+ * @param string $apiSecret The App Secret
292
+ *
293
+ * @return BaseFacebook
294
+ * @deprecated Use setAppSecret instead.
295
+ * @see setAppSecret()
296
+ */
297
+ public function setApiSecret($apiSecret) {
298
+ $this->setAppSecret($apiSecret);
299
+ return $this;
300
+ }
301
+
302
+ /**
303
+ * Set the App Secret.
304
+ *
305
+ * @param string $appSecret The App Secret
306
+ *
307
+ * @return BaseFacebook
308
+ */
309
+ public function setAppSecret($appSecret) {
310
+ $this->appSecret = $appSecret;
311
+ return $this;
312
+ }
313
+
314
+ /**
315
+ * Get the App Secret.
316
+ *
317
+ * @return string the App Secret
318
+ *
319
+ * @deprecated Use getAppSecret instead.
320
+ * @see getAppSecret()
321
+ */
322
+ public function getApiSecret() {
323
+ return $this->getAppSecret();
324
+ }
325
+
326
+ /**
327
+ * Get the App Secret.
328
+ *
329
+ * @return string the App Secret
330
+ */
331
+ public function getAppSecret() {
332
+ return $this->appSecret;
333
+ }
334
+
335
+ /**
336
+ * Set the file upload support status.
337
+ *
338
+ * @param boolean $fileUploadSupport The file upload support status.
339
+ *
340
+ * @return BaseFacebook
341
+ */
342
+ public function setFileUploadSupport($fileUploadSupport) {
343
+ $this->fileUploadSupport = $fileUploadSupport;
344
+ return $this;
345
+ }
346
+
347
+ /**
348
+ * Get the file upload support status.
349
+ *
350
+ * @return boolean true if and only if the server supports file upload.
351
+ */
352
+ public function getFileUploadSupport() {
353
+ return $this->fileUploadSupport;
354
+ }
355
+
356
+ /**
357
+ * Get the file upload support status.
358
+ *
359
+ * @return boolean true if and only if the server supports file upload.
360
+ *
361
+ * @deprecated Use getFileUploadSupport instead.
362
+ * @see getFileUploadSupport()
363
+ */
364
+ public function useFileUploadSupport() {
365
+ return $this->getFileUploadSupport();
366
+ }
367
+
368
+ /**
369
+ * Sets the access token for api calls. Use this if you get
370
+ * your access token by other means and just want the SDK
371
+ * to use it.
372
+ *
373
+ * @param string $access_token an access token.
374
+ *
375
+ * @return BaseFacebook
376
+ */
377
+ public function setAccessToken($access_token) {
378
+ $this->accessToken = $access_token;
379
+ return $this;
380
+ }
381
+
382
+ /**
383
+ * Extend an access token, while removing the short-lived token that might
384
+ * have been generated via client-side flow. Thanks to http://bit.ly/b0Pt0H
385
+ * for the workaround.
386
+ */
387
+ public function setExtendedAccessToken() {
388
+ try {
389
+ // need to circumvent json_decode by calling _oauthRequest
390
+ // directly, since response isn't JSON format.
391
+ $access_token_response = $this->_oauthRequest(
392
+ $this->getUrl('graph', '/oauth/access_token'),
393
+ $params = array(
394
+ 'client_id' => $this->getAppId(),
395
+ 'client_secret' => $this->getAppSecret(),
396
+ 'grant_type' => 'fb_exchange_token',
397
+ 'fb_exchange_token' => $this->getAccessToken(),
398
+ )
399
+ );
400
+ }
401
+ catch (FacebookApiException $e) {
402
+ // most likely that user very recently revoked authorization.
403
+ // In any event, we don't have an access token, so say so.
404
+ return false;
405
+ }
406
+
407
+ if (empty($access_token_response)) {
408
+ return false;
409
+ }
410
+
411
+ $response_params = array();
412
+ parse_str($access_token_response, $response_params);
413
+
414
+ if (!isset($response_params['access_token'])) {
415
+ return false;
416
+ }
417
+
418
+ $this->destroySession();
419
+
420
+ $this->setPersistentData(
421
+ 'access_token', $response_params['access_token']
422
+ );
423
+ }
424
+
425
+ /**
426
+ * Determines the access token that should be used for API calls.
427
+ * The first time this is called, $this->accessToken is set equal
428
+ * to either a valid user access token, or it's set to the application
429
+ * access token if a valid user access token wasn't available. Subsequent
430
+ * calls return whatever the first call returned.
431
+ *
432
+ * @return string The access token
433
+ */
434
+ public function getAccessToken() {
435
+ if ($this->accessToken !== null) {
436
+ // we've done this already and cached it. Just return.
437
+ return $this->accessToken;
438
+ }
439
+
440
+ // first establish access token to be the application
441
+ // access token, in case we navigate to the /oauth/access_token
442
+ // endpoint, where SOME access token is required.
443
+ $this->setAccessToken($this->getApplicationAccessToken());
444
+ $user_access_token = $this->getUserAccessToken();
445
+ if ($user_access_token) {
446
+ $this->setAccessToken($user_access_token);
447
+ }
448
+
449
+ return $this->accessToken;
450
+ }
451
+
452
+ /**
453
+ * Determines and returns the user access token, first using
454
+ * the signed request if present, and then falling back on
455
+ * the authorization code if present. The intent is to
456
+ * return a valid user access token, or false if one is determined
457
+ * to not be available.
458
+ *
459
+ * @return string A valid user access token, or false if one
460
+ * could not be determined.
461
+ */
462
+ protected function getUserAccessToken() {
463
+ // first, consider a signed request if it's supplied.
464
+ // if there is a signed request, then it alone determines
465
+ // the access token.
466
+ $signed_request = $this->getSignedRequest();
467
+ if ($signed_request) {
468
+ // apps.facebook.com hands the access_token in the signed_request
469
+ if (array_key_exists('oauth_token', $signed_request)) {
470
+ $access_token = $signed_request['oauth_token'];
471
+ $this->setPersistentData('access_token', $access_token);
472
+ return $access_token;
473
+ }
474
+
475
+ // the JS SDK puts a code in with the redirect_uri of ''
476
+ if (array_key_exists('code', $signed_request)) {
477
+ $code = $signed_request['code'];
478
+ if ($code && $code == $this->getPersistentData('code')) {
479
+ // short-circuit if the code we have is the same as the one presented
480
+ return $this->getPersistentData('access_token');
481
+ }
482
+
483
+ $access_token = $this->getAccessTokenFromCode($code, '');
484
+ if ($access_token) {
485
+ $this->setPersistentData('code', $code);
486
+ $this->setPersistentData('access_token', $access_token);
487
+ return $access_token;
488
+ }
489
+ }
490
+
491
+ // signed request states there's no access token, so anything
492
+ // stored should be cleared.
493
+ $this->clearAllPersistentData();
494
+ return false; // respect the signed request's data, even
495
+ // if there's an authorization code or something else
496
+ }
497
+
498
+ $code = $this->getCode();
499
+ if ($code && $code != $this->getPersistentData('code')) {
500
+ $access_token = $this->getAccessTokenFromCode($code);
501
+ if ($access_token) {
502
+ $this->setPersistentData('code', $code);
503
+ $this->setPersistentData('access_token', $access_token);
504
+ return $access_token;
505
+ }
506
+
507
+ // code was bogus, so everything based on it should be invalidated.
508
+ $this->clearAllPersistentData();
509
+ return false;
510
+ }
511
+
512
+ // as a fallback, just return whatever is in the persistent
513
+ // store, knowing nothing explicit (signed request, authorization
514
+ // code, etc.) was present to shadow it (or we saw a code in $_REQUEST,
515
+ // but it's the same as what's in the persistent store)
516
+ return $this->getPersistentData('access_token');
517
+ }
518
+
519
+ /**
520
+ * Retrieve the signed request, either from a request parameter or,
521
+ * if not present, from a cookie.
522
+ *
523
+ * @return string the signed request, if available, or null otherwise.
524
+ */
525
+ public function getSignedRequest() {
526
+ if (!$this->signedRequest) {
527
+ if ($this->allowSignedRequest && !empty($_REQUEST['signed_request'])) {
528
+ $this->signedRequest = $this->parseSignedRequest(
529
+ $_REQUEST['signed_request']
530
+ );
531
+ } else if (!empty($_COOKIE[$this->getSignedRequestCookieName()])) {
532
+ $this->signedRequest = $this->parseSignedRequest(
533
+ $_COOKIE[$this->getSignedRequestCookieName()]);
534
+ }
535
+ }
536
+ return $this->signedRequest;
537
+ }
538
+
539
+ /**
540
+ * Get the UID of the connected user, or 0
541
+ * if the Facebook user is not connected.
542
+ *
543
+ * @return string the UID if available.
544
+ */
545
+ public function getUser() {
546
+ if ($this->user !== null) {
547
+ // we've already determined this and cached the value.
548
+ return $this->user;
549
+ }
550
+
551
+ return $this->user = $this->getUserFromAvailableData();
552
+ }
553
+
554
+ /**
555
+ * Determines the connected user by first examining any signed
556
+ * requests, then considering an authorization code, and then
557
+ * falling back to any persistent store storing the user.
558
+ *
559
+ * @return integer The id of the connected Facebook user,
560
+ * or 0 if no such user exists.
561
+ */
562
+ protected function getUserFromAvailableData() {
563
+ // if a signed request is supplied, then it solely determines
564
+ // who the user is.
565
+ $signed_request = $this->getSignedRequest();
566
+ if ($signed_request) {
567
+ if (array_key_exists('user_id', $signed_request)) {
568
+ $user = $signed_request['user_id'];
569
+
570
+ if($user != $this->getPersistentData('user_id')){
571
+ $this->clearAllPersistentData();
572
+ }
573
+
574
+ $this->setPersistentData('user_id', $signed_request['user_id']);
575
+ return $user;
576
+ }
577
+
578
+ // if the signed request didn't present a user id, then invalidate
579
+ // all entries in any persistent store.
580
+ $this->clearAllPersistentData();
581
+ return 0;
582
+ }
583
+
584
+ $user = $this->getPersistentData('user_id', $default = 0);
585
+ $persisted_access_token = $this->getPersistentData('access_token');
586
+
587
+ // use access_token to fetch user id if we have a user access_token, or if
588
+ // the cached access token has changed.
589
+ $access_token = $this->getAccessToken();
590
+ if ($access_token &&
591
+ $access_token != $this->getApplicationAccessToken() &&
592
+ !($user && $persisted_access_token == $access_token)) {
593
+ $user = $this->getUserFromAccessToken();
594
+ if ($user) {
595
+ $this->setPersistentData('user_id', $user);
596
+ } else {
597
+ $this->clearAllPersistentData();
598
+ }
599
+ }
600
+
601
+ return $user;
602
+ }
603
+
604
+ /**
605
+ * Get a Login URL for use with redirects. By default, full page redirect is
606
+ * assumed. If you are using the generated URL with a window.open() call in
607
+ * JavaScript, you can pass in display=popup as part of the $params.
608
+ *
609
+ * The parameters:
610
+ * - redirect_uri: the url to go to after a successful login
611
+ * - scope: comma separated list of requested extended perms
612
+ *
613
+ * @param array $params Provide custom parameters
614
+ * @return string The URL for the login flow
615
+ */
616
+ public function getLoginUrl($params=array()) {
617
+ $this->establishCSRFTokenState();
618
+ $currentUrl = $this->getCurrentUrl();
619
+
620
+ // if 'scope' is passed as an array, convert to comma separated list
621
+ $scopeParams = isset($params['scope']) ? $params['scope'] : null;
622
+ if ($scopeParams && is_array($scopeParams)) {
623
+ $params['scope'] = implode(',', $scopeParams);
624
+ }
625
+
626
+ return $this->getUrl(
627
+ 'www',
628
+ 'dialog/oauth',
629
+ array_merge(
630
+ array(
631
+ 'client_id' => $this->getAppId(),
632
+ 'redirect_uri' => $currentUrl, // possibly overwritten
633
+ 'state' => $this->state,
634
+ 'sdk' => 'php-sdk-'.self::VERSION
635
+ ),
636
+ $params
637
+ ));
638
+ }
639
+
640
+ /**
641
+ * Get a Logout URL suitable for use with redirects.
642
+ *
643
+ * The parameters:
644
+ * - next: the url to go to after a successful logout
645
+ *
646
+ * @param array $params Provide custom parameters
647
+ * @return string The URL for the logout flow
648
+ */
649
+ public function getLogoutUrl($params=array()) {
650
+ return $this->getUrl(
651
+ 'www',
652
+ 'logout.php',
653
+ array_merge(array(
654
+ 'next' => $this->getCurrentUrl(),
655
+ 'access_token' => $this->getUserAccessToken(),
656
+ ), $params)
657
+ );
658
+ }
659
+
660
+ /**
661
+ * Get a login status URL to fetch the status from Facebook.
662
+ *
663
+ * @param array $params Provide custom parameters
664
+ * @return string The URL for the logout flow
665
+ */
666
+ public function getLoginStatusUrl($params=array()) {
667
+ return $this->getLoginUrl(
668
+ array_merge(array(
669
+ 'response_type' => 'code',
670
+ 'display' => 'none',
671
+ ), $params)
672
+ );
673
+ }
674
+
675
+ /**
676
+ * Make an API call.
677
+ *
678
+ * @return mixed The decoded response
679
+ */
680
+ public function api(/* polymorphic */) {
681
+ $args = func_get_args();
682
+ if (is_array($args[0])) {
683
+ return $this->_restserver($args[0]);
684
+ } else {
685
+ return call_user_func_array(array($this, '_graph'), $args);
686
+ }
687
+ }
688
+
689
+ /**
690
+ * Constructs and returns the name of the cookie that
691
+ * potentially houses the signed request for the app user.
692
+ * The cookie is not set by the BaseFacebook class, but
693
+ * it may be set by the JavaScript SDK.
694
+ *
695
+ * @return string the name of the cookie that would house
696
+ * the signed request value.
697
+ */
698
+ protected function getSignedRequestCookieName() {
699
+ return 'fbsr_'.$this->getAppId();
700
+ }
701
+
702
+ /**
703
+ * Constructs and returns the name of the cookie that potentially contain
704
+ * metadata. The cookie is not set by the BaseFacebook class, but it may be
705
+ * set by the JavaScript SDK.
706
+ *
707
+ * @return string the name of the cookie that would house metadata.
708
+ */
709
+ protected function getMetadataCookieName() {
710
+ return 'fbm_'.$this->getAppId();
711
+ }
712
+
713
+ /**
714
+ * Get the authorization code from the query parameters, if it exists,
715
+ * and otherwise return false to signal no authorization code was
716
+ * discoverable.
717
+ *
718
+ * @return mixed The authorization code, or false if the authorization
719
+ * code could not be determined.
720
+ */
721
+ protected function getCode() {
722
+ if (!isset($_REQUEST['code']) || !isset($_REQUEST['state'])) {
723
+ return false;
724
+ }
725
+ if ($this->state === $_REQUEST['state']) {
726
+ // CSRF state has done its job, so clear it
727
+ $this->state = null;
728
+ $this->clearPersistentData('state');
729
+ return $_REQUEST['code'];
730
+ }
731
+ self::errorLog('CSRF state token does not match one provided.');
732
+
733
+ return false;
734
+ }
735
+
736
+ /**
737
+ * Retrieves the UID with the understanding that
738
+ * $this->accessToken has already been set and is
739
+ * seemingly legitimate. It relies on Facebook's Graph API
740
+ * to retrieve user information and then extract
741
+ * the user ID.
742
+ *
743
+ * @return integer Returns the UID of the Facebook user, or 0
744
+ * if the Facebook user could not be determined.
745
+ */
746
+ protected function getUserFromAccessToken() {
747
+ try {
748
+ $user_info = $this->api('/me');
749
+ return $user_info['id'];
750
+ } catch (FacebookApiException $e) {
751
+ return 0;
752
+ }
753
+ }
754
+
755
+ /**
756
+ * Returns the access token that should be used for logged out
757
+ * users when no authorization code is available.
758
+ *
759
+ * @return string The application access token, useful for gathering
760
+ * public information about users and applications.
761
+ */
762
+ public function getApplicationAccessToken() {
763
+ return $this->appId.'|'.$this->appSecret;
764
+ }
765
+
766
+ /**
767
+ * Lays down a CSRF state token for this process.
768
+ *
769
+ * @return void
770
+ */
771
+ protected function establishCSRFTokenState() {
772
+ if ($this->state === null) {
773
+ $this->state = md5(uniqid(mt_rand(), true));
774
+ $this->setPersistentData('state', $this->state);
775
+ }
776
+ }
777
+
778
+ /**
779
+ * Retrieves an access token for the given authorization code
780
+ * (previously generated from www.facebook.com on behalf of
781
+ * a specific user). The authorization code is sent to graph.facebook.com
782
+ * and a legitimate access token is generated provided the access token
783
+ * and the user for which it was generated all match, and the user is
784
+ * either logged in to Facebook or has granted an offline access permission.
785
+ *
786
+ * @param string $code An authorization code.
787
+ * @param string $redirect_uri Optional redirect URI. Default null
788
+ *
789
+ * @return mixed An access token exchanged for the authorization code, or
790
+ * false if an access token could not be generated.
791
+ */
792
+ protected function getAccessTokenFromCode($code, $redirect_uri = null) {
793
+ if (empty($code)) {
794
+ return false;
795
+ }
796
+
797
+ if ($redirect_uri === null) {
798
+ $redirect_uri = $this->getCurrentUrl();
799
+ }
800
+
801
+ try {
802
+ // need to circumvent json_decode by calling _oauthRequest
803
+ // directly, since response isn't JSON format.
804
+ $access_token_response =
805
+ $this->_oauthRequest(
806
+ $this->getUrl('graph', '/oauth/access_token'),
807
+ $params = array('client_id' => $this->getAppId(),
808
+ 'client_secret' => $this->getAppSecret(),
809
+ 'redirect_uri' => $redirect_uri,
810
+ 'code' => $code));
811
+ } catch (FacebookApiException $e) {
812
+ // most likely that user very recently revoked authorization.
813
+ // In any event, we don't have an access token, so say so.
814
+ return false;
815
+ }
816
+
817
+ if (empty($access_token_response)) {
818
+ return false;
819
+ }
820
+
821
+ $response_params = array();
822
+ parse_str($access_token_response, $response_params);
823
+ if (!isset($response_params['access_token'])) {
824
+ return false;
825
+ }
826
+
827
+ return $response_params['access_token'];
828
+ }
829
+
830
+ /**
831
+ * Invoke the old restserver.php endpoint.
832
+ *
833
+ * @param array $params Method call object
834
+ *
835
+ * @return mixed The decoded response object
836
+ * @throws FacebookApiException
837
+ */
838
+ protected function _restserver($params) {
839
+ // generic application level parameters
840
+ $params['api_key'] = $this->getAppId();
841
+ $params['format'] = 'json-strings';
842
+
843
+ $result = json_decode($this->_oauthRequest(
844
+ $this->getApiUrl($params['method']),
845
+ $params
846
+ ), true);
847
+
848
+ // results are returned, errors are thrown
849
+ if (is_array($result) && isset($result['error_code'])) {
850
+ $this->throwAPIException($result);
851
+ // @codeCoverageIgnoreStart
852
+ }
853
+ // @codeCoverageIgnoreEnd
854
+
855
+ $method = strtolower($params['method']);
856
+ if ($method === 'auth.expiresession' ||
857
+ $method === 'auth.revokeauthorization') {
858
+ $this->destroySession();
859
+ }
860
+
861
+ return $result;
862
+ }
863
+
864
+ /**
865
+ * Return true if this is video post.
866
+ *
867
+ * @param string $path The path
868
+ * @param string $method The http method (default 'GET')
869
+ *
870
+ * @return boolean true if this is video post
871
+ */
872
+ protected function isVideoPost($path, $method = 'GET') {
873
+ if ($method == 'POST' && preg_match("/^(\/)(.+)(\/)(videos)$/", $path)) {
874
+ return true;
875
+ }
876
+ return false;
877
+ }
878
+
879
+ /**
880
+ * Invoke the Graph API.
881
+ *
882
+ * @param string $path The path (required)
883
+ * @param string $method The http method (default 'GET')
884
+ * @param array $params The query/post data
885
+ *
886
+ * @return mixed The decoded response object
887
+ * @throws FacebookApiException
888
+ */
889
+ protected function _graph($path, $method = 'GET', $params = array()) {
890
+ if (is_array($method) && empty($params)) {
891
+ $params = $method;
892
+ $method = 'GET';
893
+ }
894
+ $params['method'] = $method; // method override as we always do a POST
895
+
896
+ if ($this->isVideoPost($path, $method)) {
897
+ $domainKey = 'graph_video';
898
+ } else {
899
+ $domainKey = 'graph';
900
+ }
901
+
902
+ $result = json_decode($this->_oauthRequest(
903
+ $this->getUrl($domainKey, $path),
904
+ $params
905
+ ), true);
906
+
907
+ // results are returned, errors are thrown
908
+ if (is_array($result) && isset($result['error'])) {
909
+ $this->throwAPIException($result);
910
+ // @codeCoverageIgnoreStart
911
+ }
912
+ // @codeCoverageIgnoreEnd
913
+
914
+ return $result;
915
+ }
916
+
917
+ /**
918
+ * Make a OAuth Request.
919
+ *
920
+ * @param string $url The path (required)
921
+ * @param array $params The query/post data
922
+ *
923
+ * @return string The decoded response object
924
+ * @throws FacebookApiException
925
+ */
926
+ protected function _oauthRequest($url, $params) {
927
+ if (!isset($params['access_token'])) {
928
+ $params['access_token'] = $this->getAccessToken();
929
+ }
930
+
931
+ if (isset($params['access_token']) && !isset($params['appsecret_proof'])) {
932
+ $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']);
933
+ }
934
+
935
+ // json_encode all params values that are not strings
936
+ foreach ($params as $key => $value) {
937
+ if (!is_string($value) && !($value instanceof CURLFile)) {
938
+ $params[$key] = json_encode($value);
939
+ }
940
+ }
941
+
942
+ return $this->makeRequest($url, $params);
943
+ }
944
+
945
+ /**
946
+ * Generate a proof of App Secret
947
+ * This is required for all API calls originating from a server
948
+ * It is a sha256 hash of the access_token made using the app secret
949
+ *
950
+ * @param string $access_token The access_token to be hashed (required)
951
+ *
952
+ * @return string The sha256 hash of the access_token
953
+ */
954
+ protected function getAppSecretProof($access_token) {
955
+ return hash_hmac('sha256', $access_token, $this->getAppSecret());
956
+ }
957
+
958
+ /**
959
+ * Makes an HTTP request. This method can be overridden by subclasses if
960
+ * developers want to do fancier things or use something other than curl to
961
+ * make the request.
962
+ *
963
+ * @param string $url The URL to make the request to
964
+ * @param array $params The parameters to use for the POST body
965
+ * @param CurlHandler $ch Initialized curl handle
966
+ *
967
+ * @return string The response text
968
+ */
969
+ protected function makeRequest($url, $params, $ch=null) {
970
+ if (!$ch) {
971
+ $ch = curl_init();
972
+ }
973
+
974
+ $opts = self::$CURL_OPTS;
975
+ if ($this->getFileUploadSupport()) {
976
+ $opts[CURLOPT_POSTFIELDS] = $params;
977
+ } else {
978
+ $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
979
+ }
980
+ $opts[CURLOPT_URL] = $url;
981
+
982
+ // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait
983
+ // for 2 seconds if the server does not support this header.
984
+ if (isset($opts[CURLOPT_HTTPHEADER])) {
985
+ $existing_headers = $opts[CURLOPT_HTTPHEADER];
986
+ $existing_headers[] = 'Expect:';
987
+ $opts[CURLOPT_HTTPHEADER] = $existing_headers;
988
+ } else {
989
+ $opts[CURLOPT_HTTPHEADER] = array('Expect:');
990
+ }
991
+
992
+ curl_setopt_array($ch, $opts);
993
+ $result = curl_exec($ch);
994
+
995
+ $errno = curl_errno($ch);
996
+ // CURLE_SSL_CACERT || CURLE_SSL_CACERT_BADFILE
997
+ if ($errno == 60 || $errno == 77) {
998
+ self::errorLog('Invalid or no certificate authority found, '.
999
+ 'using bundled information');
1000
+ curl_setopt($ch, CURLOPT_CAINFO,
1001
+ dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fb_ca_chain_bundle.crt');
1002
+ $result = curl_exec($ch);
1003
+ }
1004
+
1005
+ // With dual stacked DNS responses, it's possible for a server to
1006
+ // have IPv6 enabled but not have IPv6 connectivity. If this is
1007
+ // the case, curl will try IPv4 first and if that fails, then it will
1008
+ // fall back to IPv6 and the error EHOSTUNREACH is returned by the
1009
+ // operating system.
1010
+ if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) {
1011
+ $matches = array();
1012
+ $regex = '/Failed to connect to ([^:].*): Network is unreachable/';
1013
+ if (preg_match($regex, curl_error($ch), $matches)) {
1014
+ if (strlen(@inet_pton($matches[1])) === 16) {
1015
+ self::errorLog('Invalid IPv6 configuration on server, '.
1016
+ 'Please disable or get native IPv6 on your server.');
1017
+ self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;
1018
+ curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
1019
+ $result = curl_exec($ch);
1020
+ }
1021
+ }
1022
+ }
1023
+
1024
+ if ($result === false) {
1025
+ $e = new FacebookApiException(array(
1026
+ 'error_code' => curl_errno($ch),
1027
+ 'error' => array(
1028
+ 'message' => curl_error($ch),
1029
+ 'type' => 'CurlException',
1030
+ ),
1031
+ ));
1032
+ curl_close($ch);
1033
+ throw $e;
1034
+ }
1035
+ curl_close($ch);
1036
+ return $result;
1037
+ }
1038
+
1039
+ /**
1040
+ * Parses a signed_request and validates the signature.
1041
+ *
1042
+ * @param string $signed_request A signed token
1043
+ *
1044
+ * @return array The payload inside it or null if the sig is wrong
1045
+ */
1046
+ protected function parseSignedRequest($signed_request) {
1047
+
1048
+ if (!$signed_request || strpos($signed_request, '.') === false) {
1049
+ self::errorLog('Signed request was invalid!');
1050
+ return null;
1051
+ }
1052
+
1053
+ list($encoded_sig, $payload) = explode('.', $signed_request, 2);
1054
+
1055
+ // decode the data
1056
+ $sig = self::base64UrlDecode($encoded_sig);
1057
+ $data = json_decode(self::base64UrlDecode($payload), true);
1058
+
1059
+ if (!isset($data['algorithm'])
1060
+ || strtoupper($data['algorithm']) !== self::SIGNED_REQUEST_ALGORITHM
1061
+ ) {
1062
+ self::errorLog(
1063
+ 'Unknown algorithm. Expected ' . self::SIGNED_REQUEST_ALGORITHM);
1064
+ return null;
1065
+ }
1066
+
1067
+ // check sig
1068
+ $expected_sig = hash_hmac('sha256', $payload,
1069
+ $this->getAppSecret(), $raw = true);
1070
+
1071
+ if (strlen($expected_sig) !== strlen($sig)) {
1072
+ self::errorLog('Bad Signed JSON signature!');
1073
+ return null;
1074
+ }
1075
+
1076
+ $result = 0;
1077
+ for ($i = 0; $i < strlen($expected_sig); $i++) {
1078
+ $result |= ord($expected_sig[$i]) ^ ord($sig[$i]);
1079
+ }
1080
+
1081
+ if ($result == 0) {
1082
+ return $data;
1083
+ } else {
1084
+ self::errorLog('Bad Signed JSON signature!');
1085
+ return null;
1086
+ }
1087
+ }
1088
+
1089
+ /**
1090
+ * Makes a signed_request blob using the given data.
1091
+ *
1092
+ * @param array $data The data array.
1093
+ *
1094
+ * @return string The signed request.
1095
+ */
1096
+ protected function makeSignedRequest($data) {
1097
+ if (!is_array($data)) {
1098
+ throw new InvalidArgumentException(
1099
+ 'makeSignedRequest expects an array. Got: ' . print_r($data, true));
1100
+ }
1101
+ $data['algorithm'] = self::SIGNED_REQUEST_ALGORITHM;
1102
+ $data['issued_at'] = time();
1103
+ $json = json_encode($data);
1104
+ $b64 = self::base64UrlEncode($json);
1105
+ $raw_sig = hash_hmac('sha256', $b64, $this->getAppSecret(), $raw = true);
1106
+ $sig = self::base64UrlEncode($raw_sig);
1107
+ return $sig.'.'.$b64;
1108
+ }
1109
+
1110
+ /**
1111
+ * Build the URL for api given parameters.
1112
+ *
1113
+ * @param string $method The method name.
1114
+ *
1115
+ * @return string The URL for the given parameters
1116
+ */
1117
+ protected function getApiUrl($method) {
1118
+ static $READ_ONLY_CALLS =
1119
+ array('admin.getallocation' => 1,
1120
+ 'admin.getappproperties' => 1,
1121
+ 'admin.getbannedusers' => 1,
1122
+ 'admin.getlivestreamvialink' => 1,
1123
+ 'admin.getmetrics' => 1,
1124
+ 'admin.getrestrictioninfo' => 1,
1125
+ 'application.getpublicinfo' => 1,
1126
+ 'auth.getapppublickey' => 1,
1127
+ 'auth.getsession' => 1,
1128
+ 'auth.getsignedpublicsessiondata' => 1,
1129
+ 'comments.get' => 1,
1130
+ 'connect.getunconnectedfriendscount' => 1,
1131
+ 'dashboard.getactivity' => 1,
1132
+ 'dashboard.getcount' => 1,
1133
+ 'dashboard.getglobalnews' => 1,
1134
+ 'dashboard.getnews' => 1,
1135
+ 'dashboard.multigetcount' => 1,
1136
+ 'dashboard.multigetnews' => 1,
1137
+ 'data.getcookies' => 1,
1138
+ 'events.get' => 1,
1139
+ 'events.getmembers' => 1,
1140
+ 'fbml.getcustomtags' => 1,
1141
+ 'feed.getappfriendstories' => 1,
1142
+ 'feed.getregisteredtemplatebundlebyid' => 1,
1143
+ 'feed.getregisteredtemplatebundles' => 1,
1144
+ 'fql.multiquery' => 1,
1145
+ 'fql.query' => 1,
1146
+ 'friends.arefriends' => 1,
1147
+ 'friends.get' => 1,
1148
+ 'friends.getappusers' => 1,
1149
+ 'friends.getlists' => 1,
1150
+ 'friends.getmutualfriends' => 1,
1151
+ 'gifts.get' => 1,
1152
+ 'groups.get' => 1,
1153
+ 'groups.getmembers' => 1,
1154
+ 'intl.gettranslations' => 1,
1155
+ 'links.get' => 1,
1156
+ 'notes.get' => 1,
1157
+ 'notifications.get' => 1,
1158
+ 'pages.getinfo' => 1,
1159
+ 'pages.isadmin' => 1,
1160
+ 'pages.isappadded' => 1,
1161
+ 'pages.isfan' => 1,
1162
+ 'permissions.checkavailableapiaccess' => 1,
1163
+ 'permissions.checkgrantedapiaccess' => 1,
1164
+ 'photos.get' => 1,
1165
+ 'photos.getalbums' => 1,
1166
+ 'photos.gettags' => 1,
1167
+ 'profile.getinfo' => 1,
1168
+ 'profile.getinfooptions' => 1,
1169
+ 'stream.get' => 1,
1170
+ 'stream.getcomments' => 1,
1171
+ 'stream.getfilters' => 1,
1172
+ 'users.getinfo' => 1,
1173
+ 'users.getloggedinuser' => 1,
1174
+ 'users.getstandardinfo' => 1,
1175
+ 'users.hasapppermission' => 1,
1176
+ 'users.isappuser' => 1,
1177
+ 'users.isverified' => 1,
1178
+ 'video.getuploadlimits' => 1);
1179
+ $name = 'api';
1180
+ if (isset($READ_ONLY_CALLS[strtolower($method)])) {
1181
+ $name = 'api_read';
1182
+ } else if (strtolower($method) == 'video.upload') {
1183
+ $name = 'api_video';
1184
+ }
1185
+ return self::getUrl($name, 'restserver.php');
1186
+ }
1187
+
1188
+ /**
1189
+ * Build the URL for given domain alias, path and parameters.
1190
+ *
1191
+ * @param string $name The name of the domain
1192
+ * @param string $path Optional path (without a leading slash)
1193
+ * @param array $params Optional query parameters
1194
+ *
1195
+ * @return string The URL for the given parameters
1196
+ */
1197
+ protected function getUrl($name, $path='', $params=array()) {
1198
+ $url = self::$DOMAIN_MAP[$name];
1199
+ if ($path) {
1200
+ if ($path[0] === '/') {
1201
+ $path = substr($path, 1);
1202
+ }
1203
+ $url .= $path;
1204
+ }
1205
+ if ($params) {
1206
+ $url .= '?' . http_build_query($params, null, '&');
1207
+ }
1208
+
1209
+ return $url;
1210
+ }
1211
+
1212
+ /**
1213
+ * Returns the HTTP Host
1214
+ *
1215
+ * @return string The HTTP Host
1216
+ */
1217
+ protected function getHttpHost() {
1218
+ if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
1219
+ $forwardProxies = explode(',', $_SERVER['HTTP_X_FORWARDED_HOST']);
1220
+ if (!empty($forwardProxies)) {
1221
+ return $forwardProxies[0];
1222
+ }
1223
+ }
1224
+ return $_SERVER['HTTP_HOST'];
1225
+ }
1226
+
1227
+ /**
1228
+ * Returns the HTTP Protocol
1229
+ *
1230
+ * @return string The HTTP Protocol
1231
+ */
1232
+ protected function getHttpProtocol() {
1233
+ if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
1234
+ if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
1235
+ return 'https';
1236
+ }
1237
+ return 'http';
1238
+ }
1239
+ /*apache + variants specific way of checking for https*/
1240
+ if (isset($_SERVER['HTTPS']) &&
1241
+ ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) {
1242
+ return 'https';
1243
+ }
1244
+ /*nginx way of checking for https*/
1245
+ if (isset($_SERVER['SERVER_PORT']) &&
1246
+ ($_SERVER['SERVER_PORT'] === '443')) {
1247
+ return 'https';
1248
+ }
1249
+ return 'http';
1250
+ }
1251
+
1252
+ /**
1253
+ * Returns the base domain used for the cookie.
1254
+ *
1255
+ * @return string The base domain
1256
+ */
1257
+ protected function getBaseDomain() {
1258
+ // The base domain is stored in the metadata cookie if not we fallback
1259
+ // to the current hostname
1260
+ $metadata = $this->getMetadataCookie();
1261
+ if (array_key_exists('base_domain', $metadata) &&
1262
+ !empty($metadata['base_domain'])) {
1263
+ return trim($metadata['base_domain'], '.');
1264
+ }
1265
+ return $this->getHttpHost();
1266
+ }
1267
+
1268
+ /**
1269
+ * Returns the Current URL, stripping it of known FB parameters that should
1270
+ * not persist.
1271
+ *
1272
+ * @return string The current URL
1273
+ */
1274
+ protected function getCurrentUrl() {
1275
+ $protocol = $this->getHttpProtocol() . '://';
1276
+ $host = $this->getHttpHost();
1277
+ $currentUrl = $protocol.$host.$_SERVER['REQUEST_URI'];
1278
+ $parts = parse_url($currentUrl);
1279
+
1280
+ $query = '';
1281
+ if (!empty($parts['query'])) {
1282
+ // drop known fb params
1283
+ $params = explode('&', $parts['query']);
1284
+ $retained_params = array();
1285
+ foreach ($params as $param) {
1286
+ if ($this->shouldRetainParam($param)) {
1287
+ $retained_params[] = $param;
1288
+ }
1289
+ }
1290
+
1291
+ if (!empty($retained_params)) {
1292
+ $query = '?'.implode($retained_params, '&');
1293
+ }
1294
+ }
1295
+
1296
+ // use port if non default
1297
+ $port =
1298
+ isset($parts['port']) &&
1299
+ (($protocol === 'http://' && $parts['port'] !== 80) ||
1300
+ ($protocol === 'https://' && $parts['port'] !== 443))
1301
+ ? ':' . $parts['port'] : '';
1302
+
1303
+ // rebuild
1304
+ return $protocol . $parts['host'] . $port . $parts['path'] . $query;
1305
+ }
1306
+
1307
+ /**
1308
+ * Returns true if and only if the key or key/value pair should
1309
+ * be retained as part of the query string. This amounts to
1310
+ * a brute-force search of the very small list of Facebook-specific
1311
+ * params that should be stripped out.
1312
+ *
1313
+ * @param string $param A key or key/value pair within a URL's query (e.g.
1314
+ * 'foo=a', 'foo=', or 'foo'.
1315
+ *
1316
+ * @return boolean
1317
+ */
1318
+ protected function shouldRetainParam($param) {
1319
+ foreach (self::$DROP_QUERY_PARAMS as $drop_query_param) {
1320
+ if ($param === $drop_query_param ||
1321
+ strpos($param, $drop_query_param.'=') === 0) {
1322
+ return false;
1323
+ }
1324
+ }
1325
+
1326
+ return true;
1327
+ }
1328
+
1329
+ /**
1330
+ * Analyzes the supplied result to see if it was thrown
1331
+ * because the access token is no longer valid. If that is
1332
+ * the case, then we destroy the session.
1333
+ *
1334
+ * @param array $result A record storing the error message returned
1335
+ * by a failed API call.
1336
+ */
1337
+ protected function throwAPIException($result) {
1338
+ $e = new FacebookApiException($result);
1339
+ switch ($e->getType()) {
1340
+ // OAuth 2.0 Draft 00 style
1341
+ case 'OAuthException':
1342
+ // OAuth 2.0 Draft 10 style
1343
+ case 'invalid_token':
1344
+ // REST server errors are just Exceptions
1345
+ case 'Exception':
1346
+ $message = $e->getMessage();
1347
+ if ((strpos($message, 'Error validating access token') !== false) ||
1348
+ (strpos($message, 'Invalid OAuth access token') !== false) ||
1349
+ (strpos($message, 'An active access token must be used') !== false)
1350
+ ) {
1351
+ $this->destroySession();
1352
+ }
1353
+ break;
1354
+ }
1355
+
1356
+ throw $e;
1357
+ }
1358
+
1359
+
1360
+ /**
1361
+ * Prints to the error log if you aren't in command line mode.
1362
+ *
1363
+ * @param string $msg Log message
1364
+ */
1365
+ protected static function errorLog($msg) {
1366
+ // disable error log if we are running in a CLI environment
1367
+ // @codeCoverageIgnoreStart
1368
+ if (php_sapi_name() != 'cli') {
1369
+ error_log($msg);
1370
+ }
1371
+ // uncomment this if you want to see the errors on the page
1372
+ // print 'error_log: '.$msg."\n";
1373
+ // @codeCoverageIgnoreEnd
1374
+ }
1375
+
1376
+ /**
1377
+ * Base64 encoding that doesn't need to be urlencode()ed.
1378
+ * Exactly the same as base64_encode except it uses
1379
+ * - instead of +
1380
+ * _ instead of /
1381
+ * No padded =
1382
+ *
1383
+ * @param string $input base64UrlEncoded input
1384
+ *
1385
+ * @return string The decoded string
1386
+ */
1387
+ protected static function base64UrlDecode($input) {
1388
+ return base64_decode(strtr($input, '-_', '+/'));
1389
+ }
1390
+
1391
+ /**
1392
+ * Base64 encoding that doesn't need to be urlencode()ed.
1393
+ * Exactly the same as base64_encode except it uses
1394
+ * - instead of +
1395
+ * _ instead of /
1396
+ *
1397
+ * @param string $input The input to encode
1398
+ * @return string The base64Url encoded input, as a string.
1399
+ */
1400
+ protected static function base64UrlEncode($input) {
1401
+ $str = strtr(base64_encode($input), '+/', '-_');
1402
+ $str = str_replace('=', '', $str);
1403
+ return $str;
1404
+ }
1405
+
1406
+ /**
1407
+ * Destroy the current session
1408
+ */
1409
+ public function destroySession() {
1410
+ $this->accessToken = null;
1411
+ $this->signedRequest = null;
1412
+ $this->user = null;
1413
+ $this->clearAllPersistentData();
1414
+
1415
+ // Javascript sets a cookie that will be used in getSignedRequest that we
1416
+ // need to clear if we can
1417
+ $cookie_name = $this->getSignedRequestCookieName();
1418
+ if (array_key_exists($cookie_name, $_COOKIE)) {
1419
+ unset($_COOKIE[$cookie_name]);
1420
+ if (!headers_sent()) {
1421
+ $base_domain = $this->getBaseDomain();
1422
+ setcookie($cookie_name, '', 1, '/', '.'.$base_domain);
1423
+ } else {
1424
+ // @codeCoverageIgnoreStart
1425
+ self::errorLog(
1426
+ 'There exists a cookie that we wanted to clear that we couldn\'t '.
1427
+ 'clear because headers was already sent. Make sure to do the first '.
1428
+ 'API call before outputing anything.'
1429
+ );
1430
+ // @codeCoverageIgnoreEnd
1431
+ }
1432
+ }
1433
+ }
1434
+
1435
+ /**
1436
+ * Parses the metadata cookie that our Javascript API set
1437
+ *
1438
+ * @return array an array mapping key to value
1439
+ */
1440
+ protected function getMetadataCookie() {
1441
+ $cookie_name = $this->getMetadataCookieName();
1442
+ if (!array_key_exists($cookie_name, $_COOKIE)) {
1443
+ return array();
1444
+ }
1445
+
1446
+ // The cookie value can be wrapped in "-characters so remove them
1447
+ $cookie_value = trim($_COOKIE[$cookie_name], '"');
1448
+
1449
+ if (empty($cookie_value)) {
1450
+ return array();
1451
+ }
1452
+
1453
+ $parts = explode('&', $cookie_value);
1454
+ $metadata = array();
1455
+ foreach ($parts as $part) {
1456
+ $pair = explode('=', $part, 2);
1457
+ if (!empty($pair[0])) {
1458
+ $metadata[urldecode($pair[0])] =
1459
+ (count($pair) > 1) ? urldecode($pair[1]) : '';
1460
+ }
1461
+ }
1462
+
1463
+ return $metadata;
1464
+ }
1465
+
1466
+ /**
1467
+ * Finds whether the given domain is allowed or not
1468
+ *
1469
+ * @param string $big The value to be checked against $small
1470
+ * @param string $small The input string
1471
+ *
1472
+ * @return boolean Returns TRUE if $big matches $small
1473
+ */
1474
+ protected static function isAllowedDomain($big, $small) {
1475
+ if ($big === $small) {
1476
+ return true;
1477
+ }
1478
+ return self::endsWith($big, '.'.$small);
1479
+ }
1480
+
1481
+ /**
1482
+ * Checks if $big string ends with $small string
1483
+ *
1484
+ * @param string $big The value to be checked against $small
1485
+ * @param string $small The input string
1486
+ *
1487
+ * @return boolean TRUE if $big ends with $small
1488
+ */
1489
+ protected static function endsWith($big, $small) {
1490
+ $len = strlen($small);
1491
+ if ($len === 0) {
1492
+ return true;
1493
+ }
1494
+ return substr($big, -$len) === $small;
1495
+ }
1496
+
1497
+ /**
1498
+ * Each of the following four methods should be overridden in
1499
+ * a concrete subclass, as they are in the provided Facebook class.
1500
+ * The Facebook class uses PHP sessions to provide a primitive
1501
+ * persistent store, but another subclass--one that you implement--
1502
+ * might use a database, memcache, or an in-memory cache.
1503
+ *
1504
+ * @see Facebook
1505
+ */
1506
+
1507
+ /**
1508
+ * Stores the given ($key, $value) pair, so that future calls to
1509
+ * getPersistentData($key) return $value. This call may be in another request.
1510
+ *
1511
+ * @param string $key
1512
+ * @param array $value
1513
+ *
1514
+ * @return void
1515
+ */
1516
+ abstract protected function setPersistentData($key, $value);
1517
+
1518
+ /**
1519
+ * Get the data for $key, persisted by BaseFacebook::setPersistentData()
1520
+ *
1521
+ * @param string $key The key of the data to retrieve
1522
+ * @param boolean $default The default value to return if $key is not found
1523
+ *
1524
+ * @return mixed
1525
+ */
1526
+ abstract protected function getPersistentData($key, $default = false);
1527
+
1528
+ /**
1529
+ * Clear the data with $key from the persistent storage
1530
+ *
1531
+ * @param string $key
1532
+ *
1533
+ * @return void
1534
+ */
1535
+ abstract protected function clearPersistentData($key);
1536
+
1537
+ /**
1538
+ * Clear all data from the persistent storage
1539
+ *
1540
+ * @return void
1541
+ */
1542
+ abstract protected function clearAllPersistentData();
1543
+ }
facebook/src/facebook.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2011 Facebook, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
6
+ * not use this file except in compliance with the License. You may obtain
7
+ * a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations
15
+ * under the License.
16
+ */
17
+
18
+ require_once "base_facebook.php";
19
+
20
+ /**
21
+ * Extends the BaseFacebook class with the intent of using
22
+ * PHP sessions to store user ids and access tokens.
23
+ */
24
+ class Facebook extends BaseFacebook
25
+ {
26
+ /**
27
+ * Cookie prefix
28
+ */
29
+ const FBSS_COOKIE_NAME = 'fbss';
30
+
31
+ /**
32
+ * We can set this to a high number because the main session
33
+ * expiration will trump this.
34
+ */
35
+ const FBSS_COOKIE_EXPIRE = 31556926; // 1 year
36
+
37
+ /**
38
+ * Stores the shared session ID if one is set.
39
+ *
40
+ * @var string
41
+ */
42
+ protected $sharedSessionID;
43
+
44
+ /**
45
+ * Identical to the parent constructor, except that
46
+ * we start a PHP session to store the user ID and
47
+ * access token if during the course of execution
48
+ * we discover them.
49
+ *
50
+ * @param array $config the application configuration. Additionally
51
+ * accepts "sharedSession" as a boolean to turn on a secondary
52
+ * cookie for environments with a shared session (that is, your app
53
+ * shares the domain with other apps).
54
+ *
55
+ * @see BaseFacebook::__construct
56
+ */
57
+ public function __construct($config) {
58
+ if (!session_id()) {
59
+ session_start();
60
+ }
61
+ parent::__construct($config);
62
+ if (!empty($config['sharedSession'])) {
63
+ $this->initSharedSession();
64
+
65
+ // re-load the persisted state, since parent
66
+ // attempted to read out of non-shared cookie
67
+ $state = $this->getPersistentData('state');
68
+ if (!empty($state)) {
69
+ $this->state = $state;
70
+ } else {
71
+ $this->state = null;
72
+ }
73
+
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Supported keys for persistent data
79
+ *
80
+ * @var array
81
+ */
82
+ protected static $kSupportedKeys =
83
+ array('state', 'code', 'access_token', 'user_id');
84
+
85
+ /**
86
+ * Initiates Shared Session
87
+ */
88
+ protected function initSharedSession() {
89
+ $cookie_name = $this->getSharedSessionCookieName();
90
+ if (isset($_COOKIE[$cookie_name])) {
91
+ $data = $this->parseSignedRequest($_COOKIE[$cookie_name]);
92
+ if ($data && !empty($data['domain']) &&
93
+ self::isAllowedDomain($this->getHttpHost(), $data['domain'])) {
94
+ // good case
95
+ $this->sharedSessionID = $data['id'];
96
+ return;
97
+ }
98
+ // ignoring potentially unreachable data
99
+ }
100
+ // evil/corrupt/missing case
101
+ $base_domain = $this->getBaseDomain();
102
+ $this->sharedSessionID = md5(uniqid(mt_rand(), true));
103
+ $cookie_value = $this->makeSignedRequest(
104
+ array(
105
+ 'domain' => $base_domain,
106
+ 'id' => $this->sharedSessionID,
107
+ )
108
+ );
109
+ $_COOKIE[$cookie_name] = $cookie_value;
110
+ if (!headers_sent()) {
111
+ $expire = time() + self::FBSS_COOKIE_EXPIRE;
112
+ setcookie($cookie_name, $cookie_value, $expire, '/', '.'.$base_domain);
113
+ } else {
114
+ // @codeCoverageIgnoreStart
115
+ self::errorLog(
116
+ 'Shared session ID cookie could not be set! You must ensure you '.
117
+ 'create the Facebook instance before headers have been sent. This '.
118
+ 'will cause authentication issues after the first request.'
119
+ );
120
+ // @codeCoverageIgnoreEnd
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Provides the implementations of the inherited abstract
126
+ * methods. The implementation uses PHP sessions to maintain
127
+ * a store for authorization codes, user ids, CSRF states, and
128
+ * access tokens.
129
+ */
130
+
131
+ /**
132
+ * {@inheritdoc}
133
+ *
134
+ * @see BaseFacebook::setPersistentData()
135
+ */
136
+ protected function setPersistentData($key, $value) {
137
+ if (!in_array($key, self::$kSupportedKeys)) {
138
+ self::errorLog('Unsupported key passed to setPersistentData.');
139
+ return;
140
+ }
141
+
142
+ $session_var_name = $this->constructSessionVariableName($key);
143
+ $_SESSION[$session_var_name] = $value;
144
+ }
145
+
146
+ /**
147
+ * {@inheritdoc}
148
+ *
149
+ * @see BaseFacebook::getPersistentData()
150
+ */
151
+ protected function getPersistentData($key, $default = false) {
152
+ if (!in_array($key, self::$kSupportedKeys)) {
153
+ self::errorLog('Unsupported key passed to getPersistentData.');
154
+ return $default;
155
+ }
156
+
157
+ $session_var_name = $this->constructSessionVariableName($key);
158
+ return isset($_SESSION[$session_var_name]) ?
159
+ $_SESSION[$session_var_name] : $default;
160
+ }
161
+
162
+ /**
163
+ * {@inheritdoc}
164
+ *
165
+ * @see BaseFacebook::clearPersistentData()
166
+ */
167
+ protected function clearPersistentData($key) {
168
+ if (!in_array($key, self::$kSupportedKeys)) {
169
+ self::errorLog('Unsupported key passed to clearPersistentData.');
170
+ return;
171
+ }
172
+
173
+ $session_var_name = $this->constructSessionVariableName($key);
174
+ if (isset($_SESSION[$session_var_name])) {
175
+ unset($_SESSION[$session_var_name]);
176
+ }
177
+ }
178
+
179
+ /**
180
+ * {@inheritdoc}
181
+ *
182
+ * @see BaseFacebook::clearAllPersistentData()
183
+ */
184
+ protected function clearAllPersistentData() {
185
+ foreach (self::$kSupportedKeys as $key) {
186
+ $this->clearPersistentData($key);
187
+ }
188
+ if ($this->sharedSessionID) {
189
+ $this->deleteSharedSessionCookie();
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Deletes Shared session cookie
195
+ */
196
+ protected function deleteSharedSessionCookie() {
197
+ $cookie_name = $this->getSharedSessionCookieName();
198
+ unset($_COOKIE[$cookie_name]);
199
+ $base_domain = $this->getBaseDomain();
200
+ setcookie($cookie_name, '', 1, '/', '.'.$base_domain);
201
+ }
202
+
203
+ /**
204
+ * Returns the Shared session cookie name
205
+ *
206
+ * @return string The Shared session cookie name
207
+ */
208
+ protected function getSharedSessionCookieName() {
209
+ return self::FBSS_COOKIE_NAME . '_' . $this->getAppId();
210
+ }
211
+
212
+ /**
213
+ * Constructs and returns the name of the session key.
214
+ *
215
+ * @see setPersistentData()
216
+ * @param string $key The key for which the session variable name to construct.
217
+ *
218
+ * @return string The name of the session key.
219
+ */
220
+ protected function constructSessionVariableName($key) {
221
+ $parts = array('fb', $this->getAppId(), $key);
222
+ if ($this->sharedSessionID) {
223
+ array_unshift($parts, $this->sharedSessionID);
224
+ }
225
+ return implode('_', $parts);
226
+ }
227
+ }
facebook/src/fb_ca_chain_bundle.crt ADDED
@@ -0,0 +1,3920 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## ca-bundle.crt -- Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+
17
+ # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $
18
+
19
+ GTE CyberTrust Global Root
20
+ ==========================
21
+ -----BEGIN CERTIFICATE-----
22
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
23
+ Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
24
+ A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
25
+ MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
26
+ Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
27
+ IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
28
+ sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
29
+ HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
30
+ AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
31
+ M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
32
+ NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
33
+ -----END CERTIFICATE-----
34
+
35
+ Thawte Server CA
36
+ ================
37
+ -----BEGIN CERTIFICATE-----
38
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
39
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
40
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
41
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
42
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
43
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
44
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
45
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
46
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
47
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
48
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
49
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
50
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
51
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
52
+ -----END CERTIFICATE-----
53
+
54
+ Thawte Premium Server CA
55
+ ========================
56
+ -----BEGIN CERTIFICATE-----
57
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
58
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
59
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
60
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
61
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
62
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
63
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
64
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
65
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
66
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
67
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
68
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
69
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
70
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
71
+ UCemDaYj+bvLpgcUQg==
72
+ -----END CERTIFICATE-----
73
+
74
+ Equifax Secure CA
75
+ =================
76
+ -----BEGIN CERTIFICATE-----
77
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
78
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
79
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
80
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
81
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
82
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
83
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
84
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
85
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
86
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
87
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
88
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
89
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
90
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
91
+ 70+sB3c4
92
+ -----END CERTIFICATE-----
93
+
94
+ Digital Signature Trust Co. Global CA 1
95
+ =======================================
96
+ -----BEGIN CERTIFICATE-----
97
+ MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
98
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
99
+ MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
100
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
101
+ A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
102
+ NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
103
+ o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
104
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
105
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
106
+ IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
107
+ MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
108
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
109
+ ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
110
+ kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
111
+ RbyhkwS7hp86W0N6w4pl
112
+ -----END CERTIFICATE-----
113
+
114
+ Digital Signature Trust Co. Global CA 3
115
+ =======================================
116
+ -----BEGIN CERTIFICATE-----
117
+ MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
118
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
119
+ MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
120
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
121
+ A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
122
+ VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
123
+ xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
124
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
125
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
126
+ IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
127
+ MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
128
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
129
+ AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
130
+ up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
131
+ mPnHfxsb1gYgAlihw6ID
132
+ -----END CERTIFICATE-----
133
+
134
+ Verisign Class 3 Public Primary Certification Authority
135
+ =======================================================
136
+ -----BEGIN CERTIFICATE-----
137
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
138
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
139
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
140
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
141
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
142
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
143
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
144
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
145
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
146
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
147
+ Tqj/ZA1k
148
+ -----END CERTIFICATE-----
149
+
150
+ Verisign Class 1 Public Primary Certification Authority - G2
151
+ ============================================================
152
+ -----BEGIN CERTIFICATE-----
153
+ MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
154
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
155
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
156
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
157
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
158
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
159
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
160
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
161
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
162
+ k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
163
+ WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
164
+ MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
165
+ XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
166
+ lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
167
+ -----END CERTIFICATE-----
168
+
169
+ Verisign Class 2 Public Primary Certification Authority - G2
170
+ ============================================================
171
+ -----BEGIN CERTIFICATE-----
172
+ MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
173
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
174
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
175
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
176
+ c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
177
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
178
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
179
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
180
+ c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
181
+ nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
182
+ wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
183
+ ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
184
+ 1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
185
+ LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
186
+ -----END CERTIFICATE-----
187
+
188
+ Verisign Class 3 Public Primary Certification Authority - G2
189
+ ============================================================
190
+ -----BEGIN CERTIFICATE-----
191
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
192
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
193
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
194
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
195
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
196
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
197
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
198
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
199
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
200
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
201
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
202
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
203
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
204
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
205
+ -----END CERTIFICATE-----
206
+
207
+ GlobalSign Root CA
208
+ ==================
209
+ -----BEGIN CERTIFICATE-----
210
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
211
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
212
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
213
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
214
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
215
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
216
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
217
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
218
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
219
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
220
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
221
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
222
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
223
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
224
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
225
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
226
+ -----END CERTIFICATE-----
227
+
228
+ GlobalSign Root CA - R2
229
+ =======================
230
+ -----BEGIN CERTIFICATE-----
231
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
232
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
233
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
234
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
235
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
236
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
237
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
238
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
239
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
240
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
241
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
242
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
243
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
244
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
245
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
246
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
247
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
248
+ -----END CERTIFICATE-----
249
+
250
+ ValiCert Class 1 VA
251
+ ===================
252
+ -----BEGIN CERTIFICATE-----
253
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
254
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
255
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
256
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
257
+ MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
258
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
259
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
260
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
261
+ A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
262
+ GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
263
+ DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
264
+ lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
265
+ icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
266
+ Orf1LXLI
267
+ -----END CERTIFICATE-----
268
+
269
+ ValiCert Class 2 VA
270
+ ===================
271
+ -----BEGIN CERTIFICATE-----
272
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
273
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
274
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
275
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
276
+ MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
277
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
278
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
279
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
280
+ A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
281
+ CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
282
+ ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
283
+ SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
284
+ UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
285
+ W9ViH0Pd
286
+ -----END CERTIFICATE-----
287
+
288
+ RSA Root Certificate 1
289
+ ======================
290
+ -----BEGIN CERTIFICATE-----
291
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
292
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
293
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
294
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
295
+ MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
296
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
297
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
298
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
299
+ A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
300
+ 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
301
+ BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
302
+ 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
303
+ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
304
+ on+jjBXu
305
+ -----END CERTIFICATE-----
306
+
307
+ Verisign Class 1 Public Primary Certification Authority - G3
308
+ ============================================================
309
+ -----BEGIN CERTIFICATE-----
310
+ MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
311
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
312
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
313
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
314
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
315
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
316
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
317
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
318
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
319
+ ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
320
+ bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
321
+ rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
322
+ Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
323
+ FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
324
+ q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
325
+ y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
326
+ ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
327
+ a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
328
+ D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
329
+ -----END CERTIFICATE-----
330
+
331
+ Verisign Class 2 Public Primary Certification Authority - G3
332
+ ============================================================
333
+ -----BEGIN CERTIFICATE-----
334
+ MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
335
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
336
+ azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
337
+ b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
338
+ aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
339
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
340
+ c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
341
+ aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
342
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
343
+ AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
344
+ tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
345
+ C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
346
+ 0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
347
+ Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
348
+ JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
349
+ 0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
350
+ sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
351
+ JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
352
+ GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
353
+ -----END CERTIFICATE-----
354
+
355
+ Verisign Class 3 Public Primary Certification Authority - G3
356
+ ============================================================
357
+ -----BEGIN CERTIFICATE-----
358
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
359
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
360
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
361
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
362
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
363
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
364
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
365
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
366
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
367
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
368
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
369
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
370
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
371
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
372
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
373
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
374
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
375
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
376
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
377
+ -----END CERTIFICATE-----
378
+
379
+ Verisign Class 4 Public Primary Certification Authority - G3
380
+ ============================================================
381
+ -----BEGIN CERTIFICATE-----
382
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
383
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
384
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
385
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
386
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
387
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
388
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
389
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
390
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
391
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
392
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
393
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
394
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
395
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
396
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
397
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
398
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
399
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
400
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
401
+ -----END CERTIFICATE-----
402
+
403
+ Entrust.net Secure Server CA
404
+ ============================
405
+ -----BEGIN CERTIFICATE-----
406
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
407
+ BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
408
+ cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
409
+ ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
410
+ cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
411
+ A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
412
+ eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
413
+ dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
414
+ aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
415
+ aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
416
+ gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
417
+ ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
418
+ CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
419
+ dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
420
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
421
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
422
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
423
+ NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
424
+ HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
425
+ BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
426
+ Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
427
+ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
428
+ -----END CERTIFICATE-----
429
+
430
+ Entrust.net Premium 2048 Secure Server CA
431
+ =========================================
432
+ -----BEGIN CERTIFICATE-----
433
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
434
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
435
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
436
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
437
+ NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
438
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
439
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
440
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
441
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
442
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
443
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
444
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
445
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
446
+ AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
447
+ gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
448
+ AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
449
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
450
+ o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
451
+ 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
452
+ OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
453
+ -----END CERTIFICATE-----
454
+
455
+ Baltimore CyberTrust Root
456
+ =========================
457
+ -----BEGIN CERTIFICATE-----
458
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
459
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
460
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
461
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
462
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
463
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
464
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
465
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
466
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
467
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
468
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
469
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
470
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
471
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
472
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
473
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
474
+ -----END CERTIFICATE-----
475
+
476
+ Equifax Secure Global eBusiness CA
477
+ ==================================
478
+ -----BEGIN CERTIFICATE-----
479
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
480
+ RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
481
+ bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
482
+ HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
483
+ b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
484
+ PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
485
+ qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
486
+ hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
487
+ BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
488
+ MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
489
+ I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
490
+ NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
491
+ -----END CERTIFICATE-----
492
+
493
+ Equifax Secure eBusiness CA 1
494
+ =============================
495
+ -----BEGIN CERTIFICATE-----
496
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
497
+ RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
498
+ LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
499
+ ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
500
+ IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
501
+ 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
502
+ IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
503
+ MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
504
+ Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
505
+ AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
506
+ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
507
+ KpYrtWKmpj29f5JZzVoqgrI3eQ==
508
+ -----END CERTIFICATE-----
509
+
510
+ Equifax Secure eBusiness CA 2
511
+ =============================
512
+ -----BEGIN CERTIFICATE-----
513
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
514
+ ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
515
+ MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
516
+ DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
517
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
518
+ 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
519
+ BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
520
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
521
+ JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
522
+ A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
523
+ uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
524
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
525
+ jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
526
+ 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
527
+ V+GRMOrN
528
+ -----END CERTIFICATE-----
529
+
530
+ AddTrust Low-Value Services Root
531
+ ================================
532
+ -----BEGIN CERTIFICATE-----
533
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
534
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
535
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
536
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
537
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
538
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
539
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
540
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
541
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
542
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
543
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
544
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
545
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
546
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
547
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
548
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
549
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
550
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
551
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
552
+ -----END CERTIFICATE-----
553
+
554
+ AddTrust External Root
555
+ ======================
556
+ -----BEGIN CERTIFICATE-----
557
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
558
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
559
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
560
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
561
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
562
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
563
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
564
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
565
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
566
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
567
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
568
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
569
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
570
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
571
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
572
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
573
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
574
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
575
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
576
+ -----END CERTIFICATE-----
577
+
578
+ AddTrust Public Services Root
579
+ =============================
580
+ -----BEGIN CERTIFICATE-----
581
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
582
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
583
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
584
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
585
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
586
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
587
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
588
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
589
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
590
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
591
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
592
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
593
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
594
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
595
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
596
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
597
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
598
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
599
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
600
+ -----END CERTIFICATE-----
601
+
602
+ AddTrust Qualified Certificates Root
603
+ ====================================
604
+ -----BEGIN CERTIFICATE-----
605
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
606
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
607
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
608
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
609
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
610
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
611
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
612
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
613
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
614
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
615
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
616
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
617
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
618
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
619
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
620
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
621
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
622
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
623
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
624
+ -----END CERTIFICATE-----
625
+
626
+ Entrust Root Certification Authority
627
+ ====================================
628
+ -----BEGIN CERTIFICATE-----
629
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
630
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
631
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
632
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
633
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
634
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
635
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
636
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
637
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
638
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
639
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
640
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
641
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
642
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
643
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
644
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
645
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
646
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
647
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
648
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
649
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
650
+ -----END CERTIFICATE-----
651
+
652
+ RSA Security 2048 v3
653
+ ====================
654
+ -----BEGIN CERTIFICATE-----
655
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
656
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
657
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
658
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
659
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
660
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
661
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
662
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
663
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
664
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
665
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
666
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
667
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
668
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
669
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
670
+ pKnXwiJPZ9d37CAFYd4=
671
+ -----END CERTIFICATE-----
672
+
673
+ GeoTrust Global CA
674
+ ==================
675
+ -----BEGIN CERTIFICATE-----
676
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
677
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
678
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
679
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
680
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
681
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
682
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
683
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
684
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
685
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
686
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
687
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
688
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
689
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
690
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
691
+ Mw==
692
+ -----END CERTIFICATE-----
693
+
694
+ GeoTrust Global CA 2
695
+ ====================
696
+ -----BEGIN CERTIFICATE-----
697
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
698
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
699
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
700
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
701
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
702
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
703
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
704
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
705
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
706
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
707
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
708
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
709
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
710
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
711
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
712
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
713
+ -----END CERTIFICATE-----
714
+
715
+ GeoTrust Universal CA
716
+ =====================
717
+ -----BEGIN CERTIFICATE-----
718
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
719
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
720
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
721
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
722
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
723
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
724
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
725
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
726
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
727
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
728
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
729
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
730
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
731
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
732
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
733
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
734
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
735
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
736
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
737
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
738
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
739
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
740
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
741
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
742
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
743
+ -----END CERTIFICATE-----
744
+
745
+ GeoTrust Universal CA 2
746
+ =======================
747
+ -----BEGIN CERTIFICATE-----
748
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
749
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
750
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
751
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
752
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
753
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
754
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
755
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
756
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
757
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
758
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
759
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
760
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
761
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
762
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
763
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
764
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
765
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
766
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
767
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
768
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
769
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
770
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
771
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
772
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
773
+ -----END CERTIFICATE-----
774
+
775
+ UTN-USER First-Network Applications
776
+ ===================================
777
+ -----BEGIN CERTIFICATE-----
778
+ MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
779
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
780
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
781
+ BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
782
+ WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
783
+ YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
784
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
785
+ cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
786
+ mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
787
+ DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
788
+ Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
789
+ P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
790
+ j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
791
+ HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
792
+ cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
793
+ CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
794
+ IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
795
+ RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
796
+ xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
797
+ DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
798
+ -----END CERTIFICATE-----
799
+
800
+ America Online Root Certification Authority 1
801
+ =============================================
802
+ -----BEGIN CERTIFICATE-----
803
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
804
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
805
+ Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
806
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
807
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
808
+ ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
809
+ v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
810
+ DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
811
+ sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
812
+ 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
813
+ AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
814
+ o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
815
+ GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
816
+ VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
817
+ 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
818
+ Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
819
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
820
+ -----END CERTIFICATE-----
821
+
822
+ America Online Root Certification Authority 2
823
+ =============================================
824
+ -----BEGIN CERTIFICATE-----
825
+ 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
850
+ cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
851
+ -----END CERTIFICATE-----
852
+
853
+ Visa eCommerce Root
854
+ ===================
855
+ -----BEGIN CERTIFICATE-----
856
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
857
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
858
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
859
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
860
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
861
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
862
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
863
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
864
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
865
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
866
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
867
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
868
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
869
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
870
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
871
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
872
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
873
+ -----END CERTIFICATE-----
874
+
875
+ Certum Root CA
876
+ ==============
877
+ -----BEGIN CERTIFICATE-----
878
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
879
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
880
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
881
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
882
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
883
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
884
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
885
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
886
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
887
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
888
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
889
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
890
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
891
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
892
+ -----END CERTIFICATE-----
893
+
894
+ Comodo AAA Services root
895
+ ========================
896
+ -----BEGIN CERTIFICATE-----
897
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
898
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
899
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
900
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
901
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
902
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
903
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
904
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
905
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
906
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
907
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
908
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
909
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
910
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
911
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
912
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
913
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
914
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
915
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
916
+ -----END CERTIFICATE-----
917
+
918
+ Comodo Secure Services root
919
+ ===========================
920
+ -----BEGIN CERTIFICATE-----
921
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
922
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
923
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
924
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
925
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
926
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
927
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
928
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
929
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
930
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
931
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
932
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
933
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
934
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
935
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
936
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
937
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
938
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
939
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
940
+ RR3B7Hzs/Sk=
941
+ -----END CERTIFICATE-----
942
+
943
+ Comodo Trusted Services root
944
+ ============================
945
+ -----BEGIN CERTIFICATE-----
946
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
947
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
948
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
949
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
950
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
951
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
952
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
953
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
954
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
955
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
956
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
957
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
958
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
959
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
960
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
961
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
962
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
963
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
964
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
965
+ 9y5Xt5hwXsjEeLBi
966
+ -----END CERTIFICATE-----
967
+
968
+ QuoVadis Root CA
969
+ ================
970
+ -----BEGIN CERTIFICATE-----
971
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
972
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
973
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
974
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
975
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
976
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
977
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
978
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
979
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
980
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
981
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
982
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
983
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
984
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
985
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
986
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
987
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
988
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
989
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
990
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
991
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
992
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
993
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
994
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
995
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
996
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
997
+ 5nrQNiOKSnQ2+Q==
998
+ -----END CERTIFICATE-----
999
+
1000
+ QuoVadis Root CA 2
1001
+ ==================
1002
+ -----BEGIN CERTIFICATE-----
1003
+ MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1004
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
1005
+ ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1006
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1007
+ DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1008
+ XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1009
+ lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1010
+ lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
1011
+ lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
1012
+ 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
1013
+ wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
1014
+ D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
1015
+ BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
1016
+ J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
1017
+ DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
1018
+ a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
1019
+ ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
1020
+ Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1021
+ UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
1022
+ VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
1023
+ +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
1024
+ IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
1025
+ WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
1026
+ f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
1027
+ 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
1028
+ VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
1029
+ -----END CERTIFICATE-----
1030
+
1031
+ QuoVadis Root CA 3
1032
+ ==================
1033
+ -----BEGIN CERTIFICATE-----
1034
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1035
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
1036
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1037
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1038
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
1039
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
1040
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
1041
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
1042
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
1043
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
1044
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
1045
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
1046
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
1047
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
1048
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
1049
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
1050
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
1051
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
1052
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
1053
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
1054
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
1055
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
1056
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
1057
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
1058
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
1059
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
1060
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
1061
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
1062
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
1063
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
1064
+ -----END CERTIFICATE-----
1065
+
1066
+ Security Communication Root CA
1067
+ ==============================
1068
+ -----BEGIN CERTIFICATE-----
1069
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1070
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1071
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1072
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1073
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
1074
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
1075
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
1076
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
1077
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
1078
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
1079
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
1080
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
1081
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
1082
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
1083
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
1084
+ FL39vmwLAw==
1085
+ -----END CERTIFICATE-----
1086
+
1087
+ Sonera Class 1 Root CA
1088
+ ======================
1089
+ -----BEGIN CERTIFICATE-----
1090
+ MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1091
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
1092
+ NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1093
+ IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
1094
+ 7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
1095
+ EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
1096
+ 0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
1097
+ 2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
1098
+ HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
1099
+ iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
1100
+ 28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
1101
+ yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
1102
+ vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
1103
+ qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
1104
+ IRlXvVWa
1105
+ -----END CERTIFICATE-----
1106
+
1107
+ Sonera Class 2 Root CA
1108
+ ======================
1109
+ -----BEGIN CERTIFICATE-----
1110
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1111
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
1112
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1113
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
1114
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
1115
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
1116
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
1117
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
1118
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
1119
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
1120
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
1121
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
1122
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
1123
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
1124
+ llpwrN9M
1125
+ -----END CERTIFICATE-----
1126
+
1127
+ Staat der Nederlanden Root CA
1128
+ =============================
1129
+ -----BEGIN CERTIFICATE-----
1130
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
1131
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
1132
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
1133
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
1134
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
1135
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
1136
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
1137
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
1138
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
1139
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
1140
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
1141
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
1142
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
1143
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
1144
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
1145
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
1146
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
1147
+ -----END CERTIFICATE-----
1148
+
1149
+ TDC Internet Root CA
1150
+ ====================
1151
+ -----BEGIN CERTIFICATE-----
1152
+ MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
1153
+ ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
1154
+ NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
1155
+ ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1156
+ MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
1157
+ xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
1158
+ znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
1159
+ 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
1160
+ otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
1161
+ AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
1162
+ VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
1163
+ MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
1164
+ AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
1165
+ UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
1166
+ CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
1167
+ gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
1168
+ 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
1169
+ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
1170
+ Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
1171
+ -----END CERTIFICATE-----
1172
+
1173
+ TDC OCES Root CA
1174
+ ================
1175
+ -----BEGIN CERTIFICATE-----
1176
+ MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
1177
+ ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
1178
+ MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
1179
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
1180
+ nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
1181
+ zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
1182
+ iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
1183
+ dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
1184
+ 3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
1185
+ 5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
1186
+ ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
1187
+ cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
1188
+ Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
1189
+ LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
1190
+ MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
1191
+ aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
1192
+ MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
1193
+ +RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
1194
+ NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
1195
+ A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
1196
+ A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
1197
+ AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
1198
+ AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
1199
+ -----END CERTIFICATE-----
1200
+
1201
+ UTN DATACorp SGC Root CA
1202
+ ========================
1203
+ -----BEGIN CERTIFICATE-----
1204
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
1205
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1206
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
1207
+ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
1208
+ MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
1209
+ HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
1210
+ dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
1211
+ AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
1212
+ raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
1213
+ wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
1214
+ 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
1215
+ 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
1216
+ DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
1217
+ BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
1218
+ LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
1219
+ DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
1220
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
1221
+ I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
1222
+ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
1223
+ DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
1224
+ -----END CERTIFICATE-----
1225
+
1226
+ UTN USERFirst Email Root CA
1227
+ ===========================
1228
+ -----BEGIN CERTIFICATE-----
1229
+ MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
1230
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1231
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
1232
+ BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
1233
+ OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
1234
+ FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
1235
+ ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
1236
+ dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1237
+ MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
1238
+ B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
1239
+ om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
1240
+ TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
1241
+ yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
1242
+ AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
1243
+ HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
1244
+ bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
1245
+ AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
1246
+ xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
1247
+ 5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
1248
+ NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
1249
+ w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
1250
+ -----END CERTIFICATE-----
1251
+
1252
+ UTN USERFirst Hardware Root CA
1253
+ ==============================
1254
+ -----BEGIN CERTIFICATE-----
1255
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
1256
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1257
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
1258
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
1259
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
1260
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
1261
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
1262
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
1263
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
1264
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
1265
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
1266
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
1267
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
1268
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
1269
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
1270
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
1271
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
1272
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
1273
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
1274
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
1275
+ nfhmqA==
1276
+ -----END CERTIFICATE-----
1277
+
1278
+ UTN USERFirst Object Root CA
1279
+ ============================
1280
+ -----BEGIN CERTIFICATE-----
1281
+ MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
1282
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1283
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
1284
+ BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
1285
+ NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
1286
+ HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
1287
+ dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
1288
+ BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
1289
+ loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
1290
+ w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
1291
+ lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
1292
+ RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
1293
+ BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
1294
+ ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
1295
+ c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
1296
+ DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
1297
+ NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
1298
+ PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
1299
+ qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
1300
+ hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
1301
+ -----END CERTIFICATE-----
1302
+
1303
+ Camerfirma Chambers of Commerce Root
1304
+ ====================================
1305
+ -----BEGIN CERTIFICATE-----
1306
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1307
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1308
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
1309
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
1310
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
1311
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
1312
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
1313
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
1314
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
1315
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
1316
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
1317
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
1318
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
1319
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
1320
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
1321
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
1322
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
1323
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
1324
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
1325
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
1326
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
1327
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
1328
+ -----END CERTIFICATE-----
1329
+
1330
+ Camerfirma Global Chambersign Root
1331
+ ==================================
1332
+ -----BEGIN CERTIFICATE-----
1333
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1334
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1335
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
1336
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
1337
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
1338
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
1339
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
1340
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
1341
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
1342
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
1343
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
1344
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
1345
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
1346
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
1347
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
1348
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
1349
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
1350
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
1351
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
1352
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
1353
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
1354
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
1355
+ -----END CERTIFICATE-----
1356
+
1357
+ NetLock Qualified (Class QA) Root
1358
+ =================================
1359
+ -----BEGIN CERTIFICATE-----
1360
+ MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1361
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1362
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
1363
+ eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
1364
+ bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
1365
+ MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
1366
+ LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
1367
+ dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
1368
+ aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
1369
+ CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
1370
+ 8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
1371
+ m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
1372
+ 0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
1373
+ 0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1374
+ HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
1375
+ YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
1376
+ biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
1377
+ a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
1378
+ YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
1379
+ YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
1380
+ ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
1381
+ L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
1382
+ Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
1383
+ aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
1384
+ YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
1385
+ IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
1386
+ DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
1387
+ wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
1388
+ W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
1389
+ R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
1390
+ 5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
1391
+ -----END CERTIFICATE-----
1392
+
1393
+ NetLock Notary (Class A) Root
1394
+ =============================
1395
+ -----BEGIN CERTIFICATE-----
1396
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
1397
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1398
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
1399
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
1400
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
1401
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
1402
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
1403
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
1404
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
1405
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
1406
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
1407
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
1408
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
1409
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
1410
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
1411
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
1412
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
1413
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
1414
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
1415
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
1416
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
1417
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
1418
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
1419
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
1420
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
1421
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
1422
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
1423
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
1424
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
1425
+ 8CgHrTwXZoi1/baI
1426
+ -----END CERTIFICATE-----
1427
+
1428
+ NetLock Business (Class B) Root
1429
+ ===============================
1430
+ -----BEGIN CERTIFICATE-----
1431
+ MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1432
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1433
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
1434
+ VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
1435
+ VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
1436
+ bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
1437
+ VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1438
+ iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
1439
+ o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
1440
+ 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1441
+ HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
1442
+ RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
1443
+ dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
1444
+ ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
1445
+ c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
1446
+ YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
1447
+ c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
1448
+ Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
1449
+ bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
1450
+ IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
1451
+ YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
1452
+ cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
1453
+ 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
1454
+ stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
1455
+ -----END CERTIFICATE-----
1456
+
1457
+ NetLock Express (Class C) Root
1458
+ ==============================
1459
+ -----BEGIN CERTIFICATE-----
1460
+ MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1461
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1462
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
1463
+ KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
1464
+ BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1465
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
1466
+ ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
1467
+ jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
1468
+ W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
1469
+ euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
1470
+ DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
1471
+ RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
1472
+ YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
1473
+ IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
1474
+ aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
1475
+ ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
1476
+ ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
1477
+ dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
1478
+ emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
1479
+ IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
1480
+ UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
1481
+ YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
1482
+ xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
1483
+ gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
1484
+ -----END CERTIFICATE-----
1485
+
1486
+ XRamp Global CA Root
1487
+ ====================
1488
+ -----BEGIN CERTIFICATE-----
1489
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
1490
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
1491
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
1492
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
1493
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
1494
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1495
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
1496
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
1497
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
1498
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
1499
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
1500
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1501
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
1502
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
1503
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
1504
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
1505
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
1506
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
1507
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
1508
+ -----END CERTIFICATE-----
1509
+
1510
+ Go Daddy Class 2 CA
1511
+ ===================
1512
+ -----BEGIN CERTIFICATE-----
1513
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
1514
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
1515
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
1516
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
1517
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
1518
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
1519
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
1520
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
1521
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
1522
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
1523
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
1524
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
1525
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
1526
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
1527
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
1528
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
1529
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
1530
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
1531
+ vZ8=
1532
+ -----END CERTIFICATE-----
1533
+
1534
+ Starfield Class 2 CA
1535
+ ====================
1536
+ -----BEGIN CERTIFICATE-----
1537
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
1538
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
1539
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
1540
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
1541
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
1542
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
1543
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
1544
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
1545
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
1546
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
1547
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
1548
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
1549
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
1550
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
1551
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
1552
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1553
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
1554
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
1555
+ QBFGmh95DmK/D5fs4C8fF5Q=
1556
+ -----END CERTIFICATE-----
1557
+
1558
+ StartCom Certification Authority
1559
+ ================================
1560
+ -----BEGIN CERTIFICATE-----
1561
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
1562
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
1563
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
1564
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
1565
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
1566
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
1567
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
1568
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
1569
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
1570
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
1571
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
1572
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
1573
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
1574
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
1575
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
1576
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
1577
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
1578
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
1579
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
1580
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
1581
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
1582
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
1583
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
1584
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
1585
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
1586
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
1587
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
1588
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
1589
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
1590
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
1591
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
1592
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
1593
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
1594
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
1595
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
1596
+ g14=
1597
+ -----END CERTIFICATE-----
1598
+
1599
+ Taiwan GRCA
1600
+ ===========
1601
+ -----BEGIN CERTIFICATE-----
1602
+ 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
1627
+ -----END CERTIFICATE-----
1628
+
1629
+ Firmaprofesional Root CA
1630
+ ========================
1631
+ -----BEGIN CERTIFICATE-----
1632
+ MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
1633
+ GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
1634
+ Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
1635
+ ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
1636
+ MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
1637
+ OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
1638
+ ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
1639
+ AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
1640
+ j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
1641
+ lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
1642
+ 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
1643
+ NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
1644
+ KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
1645
+ AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
1646
+ DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
1647
+ ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
1648
+ u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
1649
+ wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
1650
+ 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
1651
+ VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
1652
+ -----END CERTIFICATE-----
1653
+
1654
+ Wells Fargo Root CA
1655
+ ===================
1656
+ -----BEGIN CERTIFICATE-----
1657
+ MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
1658
+ BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
1659
+ cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1660
+ MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
1661
+ bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
1662
+ MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
1663
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
1664
+ x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
1665
+ E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
1666
+ OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
1667
+ sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
1668
+ YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
1669
+ BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
1670
+ ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
1671
+ m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
1672
+ OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
1673
+ x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
1674
+ tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
1675
+ -----END CERTIFICATE-----
1676
+
1677
+ Swisscom Root CA 1
1678
+ ==================
1679
+ -----BEGIN CERTIFICATE-----
1680
+ MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
1681
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
1682
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
1683
+ MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
1684
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
1685
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
1686
+ MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
1687
+ NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
1688
+ AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
1689
+ b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
1690
+ 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
1691
+ cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
1692
+ WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
1693
+ haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
1694
+ MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
1695
+ HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
1696
+ BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
1697
+ MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
1698
+ jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
1699
+ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
1700
+ VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
1701
+ vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
1702
+ OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
1703
+ 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
1704
+ nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
1705
+ x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
1706
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
1707
+ -----END CERTIFICATE-----
1708
+
1709
+ DigiCert Assured ID Root CA
1710
+ ===========================
1711
+ -----BEGIN CERTIFICATE-----
1712
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
1713
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1714
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
1715
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1716
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
1717
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
1718
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
1719
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
1720
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
1721
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
1722
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
1723
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
1724
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
1725
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
1726
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
1727
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1728
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1729
+ -----END CERTIFICATE-----
1730
+
1731
+ DigiCert Global Root CA
1732
+ =======================
1733
+ -----BEGIN CERTIFICATE-----
1734
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
1735
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1736
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
1737
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1738
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
1739
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
1740
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
1741
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
1742
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
1743
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
1744
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
1745
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
1746
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
1747
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
1748
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
1749
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1750
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1751
+ -----END CERTIFICATE-----
1752
+
1753
+ DigiCert High Assurance EV Root CA
1754
+ ==================================
1755
+ -----BEGIN CERTIFICATE-----
1756
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
1757
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
1758
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
1759
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
1760
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
1761
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
1762
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
1763
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
1764
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
1765
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
1766
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
1767
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
1768
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
1769
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
1770
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
1771
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1772
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
1773
+ -----END CERTIFICATE-----
1774
+
1775
+ Certplus Class 2 Primary CA
1776
+ ===========================
1777
+ -----BEGIN CERTIFICATE-----
1778
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
1779
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
1780
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
1781
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
1782
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
1783
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
1784
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
1785
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
1786
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
1787
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
1788
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
1789
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
1790
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
1791
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
1792
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
1793
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
1794
+ l7+ijrRU
1795
+ -----END CERTIFICATE-----
1796
+
1797
+ DST Root CA X3
1798
+ ==============
1799
+ -----BEGIN CERTIFICATE-----
1800
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
1801
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
1802
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
1803
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
1804
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
1805
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
1806
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
1807
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
1808
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
1809
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
1810
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
1811
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
1812
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
1813
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
1814
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1815
+ -----END CERTIFICATE-----
1816
+
1817
+ DST ACES CA X6
1818
+ ==============
1819
+ -----BEGIN CERTIFICATE-----
1820
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1821
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1822
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1823
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1824
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1825
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1826
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1827
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1828
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1829
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1830
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1831
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1832
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1833
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1834
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1835
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1836
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1837
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1838
+ oKfN5XozNmr6mis=
1839
+ -----END CERTIFICATE-----
1840
+
1841
+ TURKTRUST Certificate Services Provider Root 1
1842
+ ==============================================
1843
+ -----BEGIN CERTIFICATE-----
1844
+ MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1845
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
1846
+ MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
1847
+ acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
1848
+ MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
1849
+ U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
1850
+ TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
1851
+ aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
1852
+ AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
1853
+ yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
1854
+ Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
1855
+ 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
1856
+ W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
1857
+ BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
1858
+ sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
1859
+ q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
1860
+ B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
1861
+ nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
1862
+ -----END CERTIFICATE-----
1863
+
1864
+ TURKTRUST Certificate Services Provider Root 2
1865
+ ==============================================
1866
+ -----BEGIN CERTIFICATE-----
1867
+ MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1868
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
1869
+ MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
1870
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
1871
+ MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
1872
+ dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
1873
+ A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
1874
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
1875
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
1876
+ LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
1877
+ x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
1878
+ QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
1879
+ 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
1880
+ AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
1881
+ A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
1882
+ Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
1883
+ Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
1884
+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
1885
+ 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
1886
+ UrbnBEI=
1887
+ -----END CERTIFICATE-----
1888
+
1889
+ SwissSign Platinum CA - G2
1890
+ ==========================
1891
+ -----BEGIN CERTIFICATE-----
1892
+ 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
1918
+ -----END CERTIFICATE-----
1919
+
1920
+ SwissSign Gold CA - G2
1921
+ ======================
1922
+ -----BEGIN CERTIFICATE-----
1923
+ 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
1949
+ -----END CERTIFICATE-----
1950
+
1951
+ SwissSign Silver CA - G2
1952
+ ========================
1953
+ -----BEGIN CERTIFICATE-----
1954
+ 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
1980
+ -----END CERTIFICATE-----
1981
+
1982
+ GeoTrust Primary Certification Authority
1983
+ ========================================
1984
+ -----BEGIN CERTIFICATE-----
1985
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
1986
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
1987
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
1988
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
1989
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1990
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
1991
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
1992
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
1993
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
1994
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
1995
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
1996
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
1997
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
1998
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
1999
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
2000
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
2001
+ -----END CERTIFICATE-----
2002
+
2003
+ thawte Primary Root CA
2004
+ ======================
2005
+ -----BEGIN CERTIFICATE-----
2006
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
2007
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2008
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2009
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
2010
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
2011
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
2012
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
2013
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
2014
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
2015
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
2016
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
2017
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
2018
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
2019
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
2020
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
2021
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
2022
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
2023
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
2024
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
2025
+ -----END CERTIFICATE-----
2026
+
2027
+ VeriSign Class 3 Public Primary Certification Authority - G5
2028
+ ============================================================
2029
+ -----BEGIN CERTIFICATE-----
2030
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
2031
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2032
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2033
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
2034
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
2035
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
2036
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
2037
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
2038
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2039
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
2040
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
2041
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
2042
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
2043
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
2044
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
2045
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
2046
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
2047
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
2048
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
2049
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
2050
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
2051
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
2052
+ -----END CERTIFICATE-----
2053
+
2054
+ SecureTrust CA
2055
+ ==============
2056
+ -----BEGIN CERTIFICATE-----
2057
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
2058
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
2059
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
2060
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
2061
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
2062
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
2063
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
2064
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
2065
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
2066
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
2067
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
2068
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2069
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
2070
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
2071
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
2072
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
2073
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
2074
+ -----END CERTIFICATE-----
2075
+
2076
+ Secure Global CA
2077
+ ================
2078
+ -----BEGIN CERTIFICATE-----
2079
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
2080
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
2081
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
2082
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
2083
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
2084
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
2085
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
2086
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
2087
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
2088
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
2089
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
2090
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
2091
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
2092
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
2093
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
2094
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
2095
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
2096
+ -----END CERTIFICATE-----
2097
+
2098
+ COMODO Certification Authority
2099
+ ==============================
2100
+ -----BEGIN CERTIFICATE-----
2101
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
2102
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
2103
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
2104
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
2105
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
2106
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
2107
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
2108
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
2109
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
2110
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
2111
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
2112
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
2113
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
2114
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
2115
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
2116
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
2117
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
2118
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
2119
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
2120
+ -----END CERTIFICATE-----
2121
+
2122
+ Network Solutions Certificate Authority
2123
+ =======================================
2124
+ -----BEGIN CERTIFICATE-----
2125
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
2126
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
2127
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
2128
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
2129
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
2130
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
2131
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
2132
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
2133
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
2134
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
2135
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
2136
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
2137
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
2138
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
2139
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
2140
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
2141
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
2142
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
2143
+ -----END CERTIFICATE-----
2144
+
2145
+ WellsSecure Public Root Certificate Authority
2146
+ =============================================
2147
+ -----BEGIN CERTIFICATE-----
2148
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
2149
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
2150
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
2151
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
2152
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
2153
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
2154
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
2155
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
2156
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
2157
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
2158
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
2159
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
2160
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
2161
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
2162
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
2163
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
2164
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
2165
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
2166
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
2167
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
2168
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
2169
+ tylv2G0xffX8oRAHh84vWdw+WNs=
2170
+ -----END CERTIFICATE-----
2171
+
2172
+ COMODO ECC Certification Authority
2173
+ ==================================
2174
+ -----BEGIN CERTIFICATE-----
2175
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
2176
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
2177
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
2178
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
2179
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
2180
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
2181
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
2182
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
2183
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
2184
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
2185
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
2186
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
2187
+ -----END CERTIFICATE-----
2188
+
2189
+ IGC/A
2190
+ =====
2191
+ -----BEGIN CERTIFICATE-----
2192
+ MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
2193
+ VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
2194
+ Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
2195
+ MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
2196
+ EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
2197
+ STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
2198
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
2199
+ TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
2200
+ So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
2201
+ HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
2202
+ frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
2203
+ tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
2204
+ egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
2205
+ iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
2206
+ q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
2207
+ MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
2208
+ Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
2209
+ lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
2210
+ 0mBWWg==
2211
+ -----END CERTIFICATE-----
2212
+
2213
+ Security Communication EV RootCA1
2214
+ =================================
2215
+ -----BEGIN CERTIFICATE-----
2216
+ MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
2217
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
2218
+ dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
2219
+ BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
2220
+ Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2221
+ AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
2222
+ /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
2223
+ WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
2224
+ ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
2225
+ bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
2226
+ 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
2227
+ SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
2228
+ iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
2229
+ Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
2230
+ mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
2231
+ T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
2232
+ -----END CERTIFICATE-----
2233
+
2234
+ OISTE WISeKey Global Root GA CA
2235
+ ===============================
2236
+ -----BEGIN CERTIFICATE-----
2237
+ MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
2238
+ BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
2239
+ A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
2240
+ bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
2241
+ VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
2242
+ IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
2243
+ IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
2244
+ Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
2245
+ Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
2246
+ d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
2247
+ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
2248
+ LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
2249
+ AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2250
+ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
2251
+ MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
2252
+ +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
2253
+ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
2254
+ okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
2255
+ -----END CERTIFICATE-----
2256
+
2257
+ S-TRUST Authentication and Encryption Root CA 2005 PN
2258
+ =====================================================
2259
+ -----BEGIN CERTIFICATE-----
2260
+ MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
2261
+ BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
2262
+ cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
2263
+ LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
2264
+ NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
2265
+ ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
2266
+ aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
2267
+ b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2268
+ MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
2269
+ 4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
2270
+ g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
2271
+ eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
2272
+ KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
2273
+ /wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
2274
+ bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
2275
+ D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
2276
+ pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
2277
+ P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
2278
+ nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
2279
+ F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
2280
+ Hz2eBIPdltkdOpQ=
2281
+ -----END CERTIFICATE-----
2282
+
2283
+ Microsec e-Szigno Root CA
2284
+ =========================
2285
+ -----BEGIN CERTIFICATE-----
2286
+ MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
2287
+ BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
2288
+ EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
2289
+ MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
2290
+ dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
2291
+ GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
2292
+ AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
2293
+ d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
2294
+ oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
2295
+ QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
2296
+ PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
2297
+ MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
2298
+ IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
2299
+ VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
2300
+ LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
2301
+ dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
2302
+ AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
2303
+ 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
2304
+ AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
2305
+ egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
2306
+ Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
2307
+ PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
2308
+ c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
2309
+ cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
2310
+ IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
2311
+ WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
2312
+ MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
2313
+ MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
2314
+ Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
2315
+ HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
2316
+ nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
2317
+ aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
2318
+ 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
2319
+ yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
2320
+ S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
2321
+ -----END CERTIFICATE-----
2322
+
2323
+ Certigna
2324
+ ========
2325
+ -----BEGIN CERTIFICATE-----
2326
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
2327
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
2328
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
2329
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
2330
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
2331
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
2332
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
2333
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
2334
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
2335
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
2336
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
2337
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
2338
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
2339
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
2340
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
2341
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
2342
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
2343
+ -----END CERTIFICATE-----
2344
+
2345
+ AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
2346
+ ======================================
2347
+ -----BEGIN CERTIFICATE-----
2348
+ MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
2349
+ AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
2350
+ LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
2351
+ HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
2352
+ U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
2353
+ IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
2354
+ AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
2355
+ yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
2356
+ 2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
2357
+ 4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
2358
+ 2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
2359
+ 8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
2360
+ HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
2361
+ Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
2362
+ 5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
2363
+ czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
2364
+ AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
2365
+ ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
2366
+ BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
2367
+ cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
2368
+ AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
2369
+ EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
2370
+ /zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
2371
+ MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
2372
+ 3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
2373
+ eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
2374
+ /RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
2375
+ RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
2376
+ Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
2377
+ -----END CERTIFICATE-----
2378
+
2379
+ TC TrustCenter Class 2 CA II
2380
+ ============================
2381
+ -----BEGIN CERTIFICATE-----
2382
+ MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2383
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2384
+ IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
2385
+ MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2386
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
2387
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2388
+ AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
2389
+ IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
2390
+ xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
2391
+ Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
2392
+ SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
2393
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
2394
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2395
+ Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2396
+ cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2397
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2398
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
2399
+ dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
2400
+ KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
2401
+ TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
2402
+ JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
2403
+ vQ==
2404
+ -----END CERTIFICATE-----
2405
+
2406
+ TC TrustCenter Class 3 CA II
2407
+ ============================
2408
+ -----BEGIN CERTIFICATE-----
2409
+ MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2410
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2411
+ IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
2412
+ MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2413
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
2414
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2415
+ AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
2416
+ yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
2417
+ 6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
2418
+ uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
2419
+ 2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
2420
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
2421
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2422
+ Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2423
+ cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2424
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2425
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
2426
+ O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
2427
+ yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
2428
+ IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
2429
+ 092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
2430
+ 5A==
2431
+ -----END CERTIFICATE-----
2432
+
2433
+ TC TrustCenter Universal CA I
2434
+ =============================
2435
+ -----BEGIN CERTIFICATE-----
2436
+ MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
2437
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
2438
+ IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
2439
+ MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
2440
+ VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
2441
+ JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
2442
+ ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
2443
+ qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
2444
+ xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
2445
+ ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
2446
+ gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
2447
+ BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2448
+ AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
2449
+ 1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
2450
+ vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
2451
+ ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
2452
+ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
2453
+ 7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
2454
+ -----END CERTIFICATE-----
2455
+
2456
+ Deutsche Telekom Root CA 2
2457
+ ==========================
2458
+ -----BEGIN CERTIFICATE-----
2459
+ MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
2460
+ RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
2461
+ A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
2462
+ MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
2463
+ A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
2464
+ b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
2465
+ bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
2466
+ KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
2467
+ AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
2468
+ Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
2469
+ jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
2470
+ HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
2471
+ E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
2472
+ zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
2473
+ rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
2474
+ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
2475
+ Cm26OWMohpLzGITY+9HPBVZkVw==
2476
+ -----END CERTIFICATE-----
2477
+
2478
+ ComSign CA
2479
+ ==========
2480
+ -----BEGIN CERTIFICATE-----
2481
+ MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
2482
+ EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
2483
+ MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
2484
+ Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
2485
+ ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
2486
+ P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
2487
+ GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
2488
+ YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
2489
+ rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
2490
+ oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
2491
+ AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
2492
+ VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
2493
+ QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
2494
+ mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
2495
+ /627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
2496
+ zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
2497
+ AGegcQCCSA==
2498
+ -----END CERTIFICATE-----
2499
+
2500
+ ComSign Secured CA
2501
+ ==================
2502
+ -----BEGIN CERTIFICATE-----
2503
+ MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
2504
+ AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
2505
+ NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
2506
+ QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2507
+ ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
2508
+ 49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
2509
+ 7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
2510
+ kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
2511
+ 9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
2512
+ AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
2513
+ U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
2514
+ j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
2515
+ AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
2516
+ BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
2517
+ FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
2518
+ 51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
2519
+ OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
2520
+ -----END CERTIFICATE-----
2521
+
2522
+ Cybertrust Global Root
2523
+ ======================
2524
+ -----BEGIN CERTIFICATE-----
2525
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
2526
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
2527
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
2528
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
2529
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
2530
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
2531
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
2532
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
2533
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
2534
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
2535
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
2536
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
2537
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
2538
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
2539
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
2540
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
2541
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
2542
+ -----END CERTIFICATE-----
2543
+
2544
+ ePKI Root Certification Authority
2545
+ =================================
2546
+ -----BEGIN CERTIFICATE-----
2547
+ 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
2573
+ -----END CERTIFICATE-----
2574
+
2575
+ 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
2576
+ =============================================================================================================================
2577
+ -----BEGIN CERTIFICATE-----
2578
+ MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
2579
+ DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
2580
+ aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
2581
+ b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
2582
+ BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
2583
+ S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
2584
+ MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
2585
+ IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
2586
+ n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
2587
+ IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
2588
+ dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
2589
+ cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
2590
+ AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
2591
+ Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
2592
+ xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
2593
+ 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
2594
+ hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
2595
+ BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
2596
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
2597
+ N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
2598
+ y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
2599
+ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
2600
+ dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
2601
+ -----END CERTIFICATE-----
2602
+
2603
+ Buypass Class 2 CA 1
2604
+ ====================
2605
+ -----BEGIN CERTIFICATE-----
2606
+ MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2607
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
2608
+ MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2609
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
2610
+ hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
2611
+ cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
2612
+ 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
2613
+ 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
2614
+ uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
2615
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
2616
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
2617
+ 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
2618
+ 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
2619
+ fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
2620
+ wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
2621
+ -----END CERTIFICATE-----
2622
+
2623
+ Buypass Class 3 CA 1
2624
+ ====================
2625
+ -----BEGIN CERTIFICATE-----
2626
+ MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2627
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
2628
+ MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2629
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
2630
+ hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
2631
+ ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
2632
+ n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
2633
+ AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
2634
+ 1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
2635
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
2636
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
2637
+ pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
2638
+ EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
2639
+ htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
2640
+ el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
2641
+ -----END CERTIFICATE-----
2642
+
2643
+ EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
2644
+ ==========================================================================
2645
+ -----BEGIN CERTIFICATE-----
2646
+ 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
2673
+ -----END CERTIFICATE-----
2674
+
2675
+ certSIGN ROOT CA
2676
+ ================
2677
+ -----BEGIN CERTIFICATE-----
2678
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
2679
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
2680
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
2681
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
2682
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
2683
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
2684
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
2685
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
2686
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
2687
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
2688
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
2689
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
2690
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
2691
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
2692
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
2693
+ -----END CERTIFICATE-----
2694
+
2695
+ CNNIC ROOT
2696
+ ==========
2697
+ -----BEGIN CERTIFICATE-----
2698
+ MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
2699
+ ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
2700
+ OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
2701
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
2702
+ o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
2703
+ VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
2704
+ VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
2705
+ czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
2706
+ y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
2707
+ wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
2708
+ lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
2709
+ Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
2710
+ O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
2711
+ BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
2712
+ G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
2713
+ mxE=
2714
+ -----END CERTIFICATE-----
2715
+
2716
+ ApplicationCA - Japanese Government
2717
+ ===================================
2718
+ -----BEGIN CERTIFICATE-----
2719
+ MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
2720
+ SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
2721
+ MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
2722
+ cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2723
+ CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
2724
+ fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
2725
+ wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
2726
+ jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
2727
+ nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
2728
+ WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
2729
+ BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
2730
+ vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
2731
+ o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
2732
+ /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
2733
+ io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
2734
+ dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
2735
+ rosot4LKGAfmt1t06SAZf7IbiVQ=
2736
+ -----END CERTIFICATE-----
2737
+
2738
+ GeoTrust Primary Certification Authority - G3
2739
+ =============================================
2740
+ -----BEGIN CERTIFICATE-----
2741
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
2742
+ BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
2743
+ IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
2744
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
2745
+ NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
2746
+ YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
2747
+ LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
2748
+ hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
2749
+ K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
2750
+ c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
2751
+ IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
2752
+ dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
2753
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
2754
+ 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
2755
+ cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
2756
+ Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
2757
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
2758
+ t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
2759
+ -----END CERTIFICATE-----
2760
+
2761
+ thawte Primary Root CA - G2
2762
+ ===========================
2763
+ -----BEGIN CERTIFICATE-----
2764
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
2765
+ VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
2766
+ IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
2767
+ Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
2768
+ MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
2769
+ b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
2770
+ IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
2771
+ LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
2772
+ 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
2773
+ mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
2774
+ G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
2775
+ rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
2776
+ -----END CERTIFICATE-----
2777
+
2778
+ thawte Primary Root CA - G3
2779
+ ===========================
2780
+ -----BEGIN CERTIFICATE-----
2781
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
2782
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2783
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2784
+ cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
2785
+ ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
2786
+ d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
2787
+ VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
2788
+ A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2789
+ MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
2790
+ P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
2791
+ +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
2792
+ 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
2793
+ vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
2794
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
2795
+ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
2796
+ A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
2797
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
2798
+ 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
2799
+ er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
2800
+ -----END CERTIFICATE-----
2801
+
2802
+ GeoTrust Primary Certification Authority - G2
2803
+ =============================================
2804
+ -----BEGIN CERTIFICATE-----
2805
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
2806
+ VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
2807
+ Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
2808
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
2809
+ OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
2810
+ MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
2811
+ b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
2812
+ BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
2813
+ KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
2814
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
2815
+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
2816
+ ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
2817
+ npaqBA+K
2818
+ -----END CERTIFICATE-----
2819
+
2820
+ VeriSign Universal Root Certification Authority
2821
+ ===============================================
2822
+ -----BEGIN CERTIFICATE-----
2823
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
2824
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2825
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2826
+ IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
2827
+ IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
2828
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
2829
+ cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
2830
+ IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
2831
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
2832
+ 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
2833
+ MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
2834
+ 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
2835
+ AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
2836
+ tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
2837
+ CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
2838
+ a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
2839
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
2840
+ Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
2841
+ Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
2842
+ P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
2843
+ wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
2844
+ mJO37M2CYfE45k+XmCpajQ==
2845
+ -----END CERTIFICATE-----
2846
+
2847
+ VeriSign Class 3 Public Primary Certification Authority - G4
2848
+ ============================================================
2849
+ -----BEGIN CERTIFICATE-----
2850
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
2851
+ VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
2852
+ b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
2853
+ ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
2854
+ YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
2855
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
2856
+ cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
2857
+ b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2858
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
2859
+ Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
2860
+ rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
2861
+ /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
2862
+ HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
2863
+ Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
2864
+ A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
2865
+ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
2866
+ -----END CERTIFICATE-----
2867
+
2868
+ NetLock Arany (Class Gold) Főtanúsítvány
2869
+ ============================================
2870
+ -----BEGIN CERTIFICATE-----
2871
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
2872
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
2873
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
2874
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
2875
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
2876
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
2877
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
2878
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
2879
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
2880
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
2881
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
2882
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
2883
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
2884
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
2885
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
2886
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
2887
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
2888
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
2889
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
2890
+ -----END CERTIFICATE-----
2891
+
2892
+ Staat der Nederlanden Root CA - G2
2893
+ ==================================
2894
+ -----BEGIN CERTIFICATE-----
2895
+ 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
2921
+ 66+KAQ==
2922
+ -----END CERTIFICATE-----
2923
+
2924
+ CA Disig
2925
+ ========
2926
+ -----BEGIN CERTIFICATE-----
2927
+ MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
2928
+ QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
2929
+ MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
2930
+ bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
2931
+ DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
2932
+ GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
2933
+ Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
2934
+ hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
2935
+ ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
2936
+ gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
2937
+ AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
2938
+ aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
2939
+ ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
2940
+ BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
2941
+ WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
2942
+ mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
2943
+ CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
2944
+ ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
2945
+ 4Z7CRneC9VkGjCFMhwnN5ag=
2946
+ -----END CERTIFICATE-----
2947
+
2948
+ Juur-SK
2949
+ =======
2950
+ -----BEGIN CERTIFICATE-----
2951
+ MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
2952
+ c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
2953
+ DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
2954
+ SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
2955
+ aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2956
+ ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
2957
+ TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
2958
+ +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
2959
+ UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
2960
+ Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
2961
+ MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
2962
+ HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
2963
+ AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
2964
+ cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
2965
+ AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
2966
+ cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
2967
+ FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
2968
+ A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
2969
+ ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
2970
+ abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
2971
+ IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
2972
+ Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
2973
+ yyqcjg==
2974
+ -----END CERTIFICATE-----
2975
+
2976
+ Hongkong Post Root CA 1
2977
+ =======================
2978
+ -----BEGIN CERTIFICATE-----
2979
+ MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
2980
+ DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
2981
+ NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
2982
+ IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
2983
+ AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
2984
+ ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
2985
+ auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
2986
+ qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
2987
+ V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
2988
+ HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
2989
+ h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
2990
+ l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
2991
+ IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
2992
+ T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
2993
+ c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
2994
+ -----END CERTIFICATE-----
2995
+
2996
+ SecureSign RootCA11
2997
+ ===================
2998
+ -----BEGIN CERTIFICATE-----
2999
+ MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
3000
+ SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
3001
+ b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
3002
+ KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
3003
+ cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
3004
+ TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
3005
+ wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
3006
+ g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
3007
+ O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
3008
+ bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
3009
+ t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
3010
+ OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
3011
+ bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
3012
+ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
3013
+ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
3014
+ lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
3015
+ -----END CERTIFICATE-----
3016
+
3017
+ ACEDICOM Root
3018
+ =============
3019
+ -----BEGIN CERTIFICATE-----
3020
+ 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
3046
+ -----END CERTIFICATE-----
3047
+
3048
+ Verisign Class 1 Public Primary Certification Authority
3049
+ =======================================================
3050
+ -----BEGIN CERTIFICATE-----
3051
+ MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
3052
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
3053
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
3054
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
3055
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
3056
+ A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
3057
+ VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
3058
+ yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
3059
+ XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
3060
+ 0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
3061
+ RjXZ+Hxb
3062
+ -----END CERTIFICATE-----
3063
+
3064
+ Verisign Class 3 Public Primary Certification Authority
3065
+ =======================================================
3066
+ -----BEGIN CERTIFICATE-----
3067
+ MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
3068
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
3069
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
3070
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
3071
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
3072
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
3073
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
3074
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
3075
+ CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
3076
+ bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
3077
+ D/xwzoiQ
3078
+ -----END CERTIFICATE-----
3079
+
3080
+ Microsec e-Szigno Root CA 2009
3081
+ ==============================
3082
+ -----BEGIN CERTIFICATE-----
3083
+ MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
3084
+ MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
3085
+ c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
3086
+ dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
3087
+ BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
3088
+ U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
3089
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
3090
+ fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
3091
+ 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
3092
+ pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
3093
+ 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
3094
+ AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
3095
+ QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
3096
+ FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
3097
+ lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
3098
+ I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
3099
+ tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
3100
+ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
3101
+ LXpUq3DDfSJlgnCW
3102
+ -----END CERTIFICATE-----
3103
+
3104
+ E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
3105
+ ===================================================
3106
+ -----BEGIN CERTIFICATE-----
3107
+ MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
3108
+ EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
3109
+ ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
3110
+ MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
3111
+ cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
3112
+ aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
3113
+ AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
3114
+ 8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
3115
+ jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
3116
+ JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
3117
+ 9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
3118
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
3119
+ SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
3120
+ F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
3121
+ D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
3122
+ Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
3123
+ fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
3124
+ -----END CERTIFICATE-----
3125
+
3126
+ GlobalSign Root CA - R3
3127
+ =======================
3128
+ -----BEGIN CERTIFICATE-----
3129
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
3130
+ YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
3131
+ bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
3132
+ aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
3133
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
3134
+ iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
3135
+ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
3136
+ rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
3137
+ OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
3138
+ xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
3139
+ FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
3140
+ lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
3141
+ EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
3142
+ bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
3143
+ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
3144
+ kpeDMdmztcpHWD9f
3145
+ -----END CERTIFICATE-----
3146
+
3147
+ TC TrustCenter Universal CA III
3148
+ ===============================
3149
+ -----BEGIN CERTIFICATE-----
3150
+ MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
3151
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
3152
+ IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
3153
+ Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
3154
+ QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
3155
+ KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
3156
+ AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
3157
+ QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
3158
+ juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
3159
+ CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
3160
+ M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
3161
+ A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
3162
+ BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
3163
+ g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
3164
+ KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
3165
+ BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
3166
+ CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
3167
+ woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
3168
+ -----END CERTIFICATE-----
3169
+
3170
+ Autoridad de Certificacion Firmaprofesional CIF A62634068
3171
+ =========================================================
3172
+ -----BEGIN CERTIFICATE-----
3173
+ MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
3174
+ BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
3175
+ MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
3176
+ QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
3177
+ NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
3178
+ Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
3179
+ B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
3180
+ 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
3181
+ ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
3182
+ plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
3183
+ MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
3184
+ LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
3185
+ bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
3186
+ vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
3187
+ EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
3188
+ DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
3189
+ cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
3190
+ bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
3191
+ ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
3192
+ 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
3193
+ R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
3194
+ T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
3195
+ Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
3196
+ osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
3197
+ crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
3198
+ saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
3199
+ KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
3200
+ 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
3201
+ -----END CERTIFICATE-----
3202
+
3203
+ Izenpe.com
3204
+ ==========
3205
+ -----BEGIN CERTIFICATE-----
3206
+ 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
3233
+ -----END CERTIFICATE-----
3234
+
3235
+ Chambers of Commerce Root - 2008
3236
+ ================================
3237
+ -----BEGIN CERTIFICATE-----
3238
+ MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
3239
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
3240
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
3241
+ QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
3242
+ Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
3243
+ ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
3244
+ EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
3245
+ cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
3246
+ AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
3247
+ XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
3248
+ h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
3249
+ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
3250
+ NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
3251
+ D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
3252
+ lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
3253
+ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
3254
+ ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
3255
+ EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
3256
+ G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
3257
+ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
3258
+ bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
3259
+ bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
3260
+ CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
3261
+ AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
3262
+ wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
3263
+ 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
3264
+ RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
3265
+ M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
3266
+ YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
3267
+ 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
3268
+ zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
3269
+ nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
3270
+ OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
3271
+ -----END CERTIFICATE-----
3272
+
3273
+ Global Chambersign Root - 2008
3274
+ ==============================
3275
+ -----BEGIN CERTIFICATE-----
3276
+ MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
3277
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
3278
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
3279
+ QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
3280
+ NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
3281
+ Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
3282
+ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
3283
+ aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
3284
+ VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
3285
+ XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
3286
+ ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
3287
+ /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
3288
+ TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
3289
+ H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
3290
+ Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
3291
+ HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
3292
+ wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
3293
+ AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
3294
+ BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
3295
+ BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
3296
+ aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
3297
+ aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
3298
+ 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
3299
+ dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
3300
+ /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
3301
+ ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
3302
+ dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
3303
+ 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
3304
+ foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
3305
+ qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
3306
+ P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
3307
+ c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
3308
+ 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
3309
+ -----END CERTIFICATE-----
3310
+
3311
+ Go Daddy Root Certificate Authority - G2
3312
+ ========================================
3313
+ -----BEGIN CERTIFICATE-----
3314
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3315
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
3316
+ MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
3317
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
3318
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
3319
+ A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
3320
+ hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
3321
+ 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
3322
+ +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
3323
+ fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
3324
+ NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
3325
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
3326
+ BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
3327
+ vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
3328
+ 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
3329
+ N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
3330
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
3331
+ -----END CERTIFICATE-----
3332
+
3333
+ Starfield Root Certificate Authority - G2
3334
+ =========================================
3335
+ -----BEGIN CERTIFICATE-----
3336
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3337
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3338
+ b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
3339
+ eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
3340
+ DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
3341
+ VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
3342
+ dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
3343
+ W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
3344
+ bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
3345
+ N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
3346
+ ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
3347
+ JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3348
+ AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
3349
+ TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
3350
+ 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
3351
+ F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
3352
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
3353
+ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
3354
+ -----END CERTIFICATE-----
3355
+
3356
+ Starfield Services Root Certificate Authority - G2
3357
+ ==================================================
3358
+ -----BEGIN CERTIFICATE-----
3359
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3360
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3361
+ b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
3362
+ IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
3363
+ BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
3364
+ dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
3365
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
3366
+ AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
3367
+ h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
3368
+ hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
3369
+ LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
3370
+ rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
3371
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
3372
+ SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
3373
+ E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
3374
+ xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
3375
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
3376
+ YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
3377
+ -----END CERTIFICATE-----
3378
+
3379
+ AffirmTrust Commercial
3380
+ ======================
3381
+ -----BEGIN CERTIFICATE-----
3382
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
3383
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
3384
+ MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3385
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
3386
+ AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
3387
+ DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
3388
+ C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
3389
+ BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
3390
+ MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
3391
+ HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3392
+ AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
3393
+ hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
3394
+ qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
3395
+ 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
3396
+ sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
3397
+ -----END CERTIFICATE-----
3398
+
3399
+ AffirmTrust Networking
3400
+ ======================
3401
+ -----BEGIN CERTIFICATE-----
3402
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
3403
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
3404
+ MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3405
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
3406
+ AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
3407
+ Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
3408
+ dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
3409
+ /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
3410
+ h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
3411
+ HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3412
+ AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
3413
+ UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
3414
+ 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
3415
+ WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
3416
+ /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
3417
+ -----END CERTIFICATE-----
3418
+
3419
+ AffirmTrust Premium
3420
+ ===================
3421
+ -----BEGIN CERTIFICATE-----
3422
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
3423
+ BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
3424
+ OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
3425
+ dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
3426
+ MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
3427
+ BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
3428
+ 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
3429
+ +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
3430
+ GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
3431
+ p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
3432
+ S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
3433
+ 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
3434
+ /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
3435
+ +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
3436
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
3437
+ MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
3438
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
3439
+ 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
3440
+ L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
3441
+ +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
3442
+ BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
3443
+ IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
3444
+ g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
3445
+ zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
3446
+ -----END CERTIFICATE-----
3447
+
3448
+ AffirmTrust Premium ECC
3449
+ =======================
3450
+ -----BEGIN CERTIFICATE-----
3451
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
3452
+ BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
3453
+ MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
3454
+ cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
3455
+ IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
3456
+ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
3457
+ BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
3458
+ BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
3459
+ 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
3460
+ eQ==
3461
+ -----END CERTIFICATE-----
3462
+
3463
+ Certum Trusted Network CA
3464
+ =========================
3465
+ -----BEGIN CERTIFICATE-----
3466
+ MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
3467
+ ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
3468
+ biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
3469
+ MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
3470
+ ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3471
+ MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
3472
+ AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
3473
+ l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
3474
+ J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
3475
+ fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
3476
+ cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
3477
+ Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
3478
+ DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
3479
+ jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
3480
+ mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
3481
+ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
3482
+ 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
3483
+ -----END CERTIFICATE-----
3484
+
3485
+ Certinomis - Autorité Racine
3486
+ =============================
3487
+ -----BEGIN CERTIFICATE-----
3488
+ MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
3489
+ Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
3490
+ LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
3491
+ A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
3492
+ JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
3493
+ ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
3494
+ wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
3495
+ Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
3496
+ 2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
3497
+ jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
3498
+ c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
3499
+ lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
3500
+ xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
3501
+ 530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
3502
+ 4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
3503
+ A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
3504
+ KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
3505
+ WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
3506
+ R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
3507
+ nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
3508
+ CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
3509
+ JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
3510
+ qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
3511
+ WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
3512
+ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
3513
+ vgt2Fl43N+bYdJeimUV5
3514
+ -----END CERTIFICATE-----
3515
+
3516
+ Root CA Generalitat Valenciana
3517
+ ==============================
3518
+ -----BEGIN CERTIFICATE-----
3519
+ MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
3520
+ ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
3521
+ IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
3522
+ WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
3523
+ CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
3524
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
3525
+ F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
3526
+ ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
3527
+ D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
3528
+ JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
3529
+ AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
3530
+ dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
3531
+ ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
3532
+ AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
3533
+ YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
3534
+ AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
3535
+ aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
3536
+ AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
3537
+ YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
3538
+ AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
3539
+ OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
3540
+ dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
3541
+ BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
3542
+ A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
3543
+ b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
3544
+ TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
3545
+ Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
3546
+ NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
3547
+ iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
3548
+ +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
3549
+ -----END CERTIFICATE-----
3550
+
3551
+ A-Trust-nQual-03
3552
+ ================
3553
+ -----BEGIN CERTIFICATE-----
3554
+ MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
3555
+ Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
3556
+ a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
3557
+ dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
3558
+ RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
3559
+ ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
3560
+ c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
3561
+ zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
3562
+ yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
3563
+ SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
3564
+ iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
3565
+ cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
3566
+ eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
3567
+ ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
3568
+ sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
3569
+ JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
3570
+ mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
3571
+ ahq97BvIxYSazQ==
3572
+ -----END CERTIFICATE-----
3573
+
3574
+ TWCA Root Certification Authority
3575
+ =================================
3576
+ -----BEGIN CERTIFICATE-----
3577
+ MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
3578
+ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
3579
+ dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
3580
+ EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
3581
+ IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3582
+ AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
3583
+ QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
3584
+ oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
3585
+ 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
3586
+ y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
3587
+ BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
3588
+ 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
3589
+ mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
3590
+ QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
3591
+ T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
3592
+ Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
3593
+ -----END CERTIFICATE-----
3594
+
3595
+ Security Communication RootCA2
3596
+ ==============================
3597
+ -----BEGIN CERTIFICATE-----
3598
+ MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
3599
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
3600
+ dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
3601
+ SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
3602
+ aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3603
+ ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
3604
+ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
3605
+ 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
3606
+ spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
3607
+ EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
3608
+ QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
3609
+ CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
3610
+ u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
3611
+ 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
3612
+ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
3613
+ mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
3614
+ -----END CERTIFICATE-----
3615
+
3616
+ EC-ACC
3617
+ ======
3618
+ -----BEGIN CERTIFICATE-----
3619
+ MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
3620
+ BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
3621
+ ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
3622
+ VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
3623
+ CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
3624
+ BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
3625
+ MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
3626
+ SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
3627
+ Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
3628
+ cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
3629
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
3630
+ w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
3631
+ ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
3632
+ HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
3633
+ E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
3634
+ 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
3635
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
3636
+ VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
3637
+ Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
3638
+ dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
3639
+ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
3640
+ Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
3641
+ l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
3642
+ E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
3643
+ 5EI=
3644
+ -----END CERTIFICATE-----
3645
+
3646
+ Hellenic Academic and Research Institutions RootCA 2011
3647
+ =======================================================
3648
+ -----BEGIN CERTIFICATE-----
3649
+ MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
3650
+ O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
3651
+ aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3652
+ IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
3653
+ AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3654
+ IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
3655
+ IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3656
+ AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
3657
+ 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
3658
+ 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
3659
+ 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
3660
+ 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
3661
+ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
3662
+ MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
3663
+ b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
3664
+ XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
3665
+ TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
3666
+ /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
3667
+ 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
3668
+ -----END CERTIFICATE-----
3669
+
3670
+ Actalis Authentication Root CA
3671
+ ==============================
3672
+ -----BEGIN CERTIFICATE-----
3673
+ MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
3674
+ BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
3675
+ AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
3676
+ MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
3677
+ IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
3678
+ IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
3679
+ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
3680
+ by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
3681
+ zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
3682
+ YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
3683
+ oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
3684
+ EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
3685
+ hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
3686
+ EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
3687
+ jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
3688
+ iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
3689
+ ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
3690
+ WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
3691
+ JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
3692
+ K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
3693
+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
3694
+ 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
3695
+ 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
3696
+ lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
3697
+ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
3698
+ vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
3699
+ -----END CERTIFICATE-----
3700
+
3701
+ Trustis FPS Root CA
3702
+ ===================
3703
+ -----BEGIN CERTIFICATE-----
3704
+ MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
3705
+ EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
3706
+ IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
3707
+ BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
3708
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
3709
+ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
3710
+ H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
3711
+ cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
3712
+ o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
3713
+ AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
3714
+ BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
3715
+ GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
3716
+ yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
3717
+ 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
3718
+ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
3719
+ iB6XzCGcKQENZetX2fNXlrtIzYE=
3720
+ -----END CERTIFICATE-----
3721
+
3722
+ StartCom Certification Authority
3723
+ ================================
3724
+ -----BEGIN CERTIFICATE-----
3725
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
3726
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
3727
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
3728
+ NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
3729
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
3730
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
3731
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
3732
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
3733
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
3734
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
3735
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
3736
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
3737
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
3738
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
3739
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
3740
+ 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
3741
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
3742
+ Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
3743
+ dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
3744
+ c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
3745
+ bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
3746
+ aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
3747
+ aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
3748
+ L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
3749
+ cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
3750
+ fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
3751
+ N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
3752
+ Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
3753
+ tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
3754
+ e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
3755
+ 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
3756
+ HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
3757
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
3758
+ D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
3759
+ -----END CERTIFICATE-----
3760
+
3761
+ StartCom Certification Authority G2
3762
+ ===================================
3763
+ -----BEGIN CERTIFICATE-----
3764
+ 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
3788
+ obp573PYtlNXLfbQ4ddI
3789
+ -----END CERTIFICATE-----
3790
+
3791
+ Buypass Class 2 Root CA
3792
+ =======================
3793
+ -----BEGIN CERTIFICATE-----
3794
+ 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
3818
+ rJgWVqA=
3819
+ -----END CERTIFICATE-----
3820
+
3821
+ Buypass Class 3 Root CA
3822
+ =======================
3823
+ -----BEGIN CERTIFICATE-----
3824
+ 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
3848
+ Cp/HuZc=
3849
+ -----END CERTIFICATE-----
3850
+
3851
+ TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı
3852
+ ======================================================
3853
+ -----BEGIN CERTIFICATE-----
3854
+ MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
3855
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
3856
+ MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
3857
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
3858
+ DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
3859
+ a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
3860
+ BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
3861
+ bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
3862
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
3863
+ YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
3864
+ KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
3865
+ KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
3866
+ rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
3867
+ AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
3868
+ BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
3869
+ Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
3870
+ aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
3871
+ Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
3872
+ BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
3873
+ poRq0Tl9
3874
+ -----END CERTIFICATE-----
3875
+
3876
+ T-TeleSec GlobalRoot Class 3
3877
+ ============================
3878
+ -----BEGIN CERTIFICATE-----
3879
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
3880
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
3881
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
3882
+ MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
3883
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
3884
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
3885
+ DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
3886
+ 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
3887
+ NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
3888
+ iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
3889
+ 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
3890
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
3891
+ AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
3892
+ fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
3893
+ ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
3894
+ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
3895
+ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
3896
+ -----END CERTIFICATE-----
3897
+
3898
+ EE Certification Centre Root CA
3899
+ ===============================
3900
+ -----BEGIN CERTIFICATE-----
3901
+ MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
3902
+ EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
3903
+ dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
3904
+ MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
3905
+ UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
3906
+ ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
3907
+ DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
3908
+ TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
3909
+ rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
3910
+ 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
3911
+ P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
3912
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
3913
+ MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
3914
+ BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
3915
+ xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
3916
+ lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
3917
+ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
3918
+ 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
3919
+ dcGWxZ0=
3920
+ -----END CERTIFICATE-----
google/Auth/Abstract.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
18
+
19
+ /**
20
+ * Abstract class for the Authentication in the API client
21
+ * @author Chris Chabot <chabotc@google.com>
22
+ *
23
+ */
24
+ abstract class Google_Auth_Abstract
25
+ {
26
+ /**
27
+ * An utility function that first calls $this->auth->sign($request) and then
28
+ * executes makeRequest() on that signed request. Used for when a request
29
+ * should be authenticated
30
+ * @param Google_Http_Request $request
31
+ * @return Google_Http_Request $request
32
+ */
33
+ abstract public function authenticatedRequest(Google_Http_Request $request);
34
+ abstract public function sign(Google_Http_Request $request);
35
+ }
google/Auth/AppIdentity.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /*
19
+ * WARNING - this class depends on the Google App Engine PHP library
20
+ * which is 5.3 and above only, so if you include this in a PHP 5.2
21
+ * setup or one without 5.3 things will blow up.
22
+ */
23
+ use google\appengine\api\app_identity\AppIdentityService;
24
+
25
+ require_once APSL_PLUGIN_DIR."google/Auth/Abstract.php";
26
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
27
+
28
+ /**
29
+ * Authentication via the Google App Engine App Identity service.
30
+ */
31
+ class Google_Auth_AppIdentity extends Google_Auth_Abstract
32
+ {
33
+ const CACHE_PREFIX = "Google_Auth_AppIdentity::";
34
+ const CACHE_LIFETIME = 1500;
35
+ private $key = null;
36
+ private $client;
37
+ private $token = false;
38
+ private $tokenScopes = false;
39
+
40
+ public function __construct(Google_Client $client, $config = null)
41
+ {
42
+ $this->client = $client;
43
+ }
44
+
45
+ /**
46
+ * Retrieve an access token for the scopes supplied.
47
+ */
48
+ public function authenticateForScope($scopes)
49
+ {
50
+ if ($this->token && $this->tokenScopes == $scopes) {
51
+ return $this->token;
52
+ }
53
+ $memcache = new Memcached();
54
+ $this->token = $memcache->get(self::CACHE_PREFIX . $scopes);
55
+ if (!$this->token) {
56
+ $this->token = AppIdentityService::getAccessToken($scopes);
57
+ if ($this->token) {
58
+ $memcache->set(self::CACHE_PREFIX . $scopes, $this->token, self::CACHE_LIFETIME);
59
+ }
60
+ }
61
+ $this->tokenScopes = $scopes;
62
+ return $this->token;
63
+ }
64
+
65
+ /**
66
+ * Perform an authenticated / signed apiHttpRequest.
67
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
68
+ * (which can modify the request in what ever way fits the auth mechanism)
69
+ * and then calls apiCurlIO::makeRequest on the signed request
70
+ *
71
+ * @param Google_Http_Request $request
72
+ * @return Google_Http_Request The resulting HTTP response including the
73
+ * responseHttpCode, responseHeaders and responseBody.
74
+ */
75
+ public function authenticatedRequest(Google_Http_Request $request)
76
+ {
77
+ $request = $this->sign($request);
78
+ return $this->io->makeRequest($request);
79
+ }
80
+
81
+ public function sign(Google_Http_Request $request)
82
+ {
83
+ if (!$this->token) {
84
+ // No token, so nothing to do.
85
+ return $request;
86
+ }
87
+ // Add the OAuth2 header to the request
88
+ $request->setRequestHeaders(
89
+ array('Authorization' => 'Bearer ' . $this->token['access_token'])
90
+ );
91
+
92
+ return $request;
93
+ }
94
+ }
google/Auth/AssertionCredentials.php ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Auth/OAuth2.php";
19
+ require_once APSL_PLUGIN_DIR."google/Signer/P12.php";
20
+ require_once APSL_PLUGIN_DIR."google/Utils.php";
21
+
22
+ /**
23
+ * Credentials object used for OAuth 2.0 Signed JWT assertion grants.
24
+ *
25
+ * @author Chirag Shah <chirags@google.com>
26
+ */
27
+ class Google_Auth_AssertionCredentials
28
+ {
29
+ const MAX_TOKEN_LIFETIME_SECS = 3600;
30
+
31
+ public $serviceAccountName;
32
+ public $scopes;
33
+ public $privateKey;
34
+ public $privateKeyPassword;
35
+ public $assertionType;
36
+ public $sub;
37
+ /**
38
+ * @deprecated
39
+ * @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
40
+ */
41
+ public $prn;
42
+ private $useCache;
43
+
44
+ /**
45
+ * @param $serviceAccountName
46
+ * @param $scopes array List of scopes
47
+ * @param $privateKey
48
+ * @param string $privateKeyPassword
49
+ * @param string $assertionType
50
+ * @param bool|string $sub The email address of the user for which the
51
+ * application is requesting delegated access.
52
+ * @param bool useCache Whether to generate a cache key and allow
53
+ * automatic caching of the generated token.
54
+ */
55
+ public function __construct(
56
+ $serviceAccountName,
57
+ $scopes,
58
+ $privateKey,
59
+ $privateKeyPassword = 'notasecret',
60
+ $assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
61
+ $sub = false,
62
+ $useCache = true
63
+ ) {
64
+ $this->serviceAccountName = $serviceAccountName;
65
+ $this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
66
+ $this->privateKey = $privateKey;
67
+ $this->privateKeyPassword = $privateKeyPassword;
68
+ $this->assertionType = $assertionType;
69
+ $this->sub = $sub;
70
+ $this->prn = $sub;
71
+ $this->useCache = $useCache;
72
+ }
73
+
74
+ /**
75
+ * Generate a unique key to represent this credential.
76
+ * @return string
77
+ */
78
+ public function getCacheKey()
79
+ {
80
+ if (!$this->useCache) {
81
+ return false;
82
+ }
83
+ $h = $this->sub;
84
+ $h .= $this->assertionType;
85
+ $h .= $this->privateKey;
86
+ $h .= $this->scopes;
87
+ $h .= $this->serviceAccountName;
88
+ return md5($h);
89
+ }
90
+
91
+ public function generateAssertion()
92
+ {
93
+ $now = time();
94
+
95
+ $jwtParams = array(
96
+ 'aud' => Google_Auth_OAuth2::OAUTH2_TOKEN_URI,
97
+ 'scope' => $this->scopes,
98
+ 'iat' => $now,
99
+ 'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
100
+ 'iss' => $this->serviceAccountName,
101
+ );
102
+
103
+ if ($this->sub !== false) {
104
+ $jwtParams['sub'] = $this->sub;
105
+ } else if ($this->prn !== false) {
106
+ $jwtParams['prn'] = $this->prn;
107
+ }
108
+
109
+ return $this->makeSignedJwt($jwtParams);
110
+ }
111
+
112
+ /**
113
+ * Creates a signed JWT.
114
+ * @param array $payload
115
+ * @return string The signed JWT.
116
+ */
117
+ private function makeSignedJwt($payload)
118
+ {
119
+ $header = array('typ' => 'JWT', 'alg' => 'RS256');
120
+
121
+ $payload = json_encode($payload);
122
+ // Handle some overzealous escaping in PHP json that seemed to cause some errors
123
+ // with claimsets.
124
+ $payload = str_replace('\/', '/', $payload);
125
+
126
+ $segments = array(
127
+ Google_Utils::urlSafeB64Encode(json_encode($header)),
128
+ Google_Utils::urlSafeB64Encode($payload)
129
+ );
130
+
131
+ $signingInput = implode('.', $segments);
132
+ $signer = new Google_Signer_P12($this->privateKey, $this->privateKeyPassword);
133
+ $signature = $signer->sign($signingInput);
134
+ $segments[] = Google_Utils::urlSafeB64Encode($signature);
135
+
136
+ return implode(".", $segments);
137
+ }
138
+ }
google/Auth/Exception.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Exception.php";
19
+
20
+ class Google_Auth_Exception extends Google_Exception
21
+ {
22
+ }
google/Auth/LoginTicket.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Auth/Exception.php";
19
+
20
+ /**
21
+ * Class to hold information about an authenticated login.
22
+ *
23
+ * @author Brian Eaton <beaton@google.com>
24
+ */
25
+ class Google_Auth_LoginTicket
26
+ {
27
+ const USER_ATTR = "sub";
28
+
29
+ // Information from id token envelope.
30
+ private $envelope;
31
+
32
+ // Information from id token payload.
33
+ private $payload;
34
+
35
+ /**
36
+ * Creates a user based on the supplied token.
37
+ *
38
+ * @param string $envelope Header from a verified authentication token.
39
+ * @param string $payload Information from a verified authentication token.
40
+ */
41
+ public function __construct($envelope, $payload)
42
+ {
43
+ $this->envelope = $envelope;
44
+ $this->payload = $payload;
45
+ }
46
+
47
+ /**
48
+ * Returns the numeric identifier for the user.
49
+ * @throws Google_Auth_Exception
50
+ * @return
51
+ */
52
+ public function getUserId()
53
+ {
54
+ if (array_key_exists(self::USER_ATTR, $this->payload)) {
55
+ return $this->payload[self::USER_ATTR];
56
+ }
57
+ throw new Google_Auth_Exception("No user_id in token");
58
+ }
59
+
60
+ /**
61
+ * Returns attributes from the login ticket. This can contain
62
+ * various information about the user session.
63
+ * @return array
64
+ */
65
+ public function getAttributes()
66
+ {
67
+ return array("envelope" => $this->envelope, "payload" => $this->payload);
68
+ }
69
+ }
google/Auth/OAuth2.php ADDED
@@ -0,0 +1,595 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Auth/Abstract.php";
19
+ require_once APSL_PLUGIN_DIR."google/Auth/AssertionCredentials.php";
20
+ require_once APSL_PLUGIN_DIR."google/Auth/Exception.php";
21
+ require_once APSL_PLUGIN_DIR."google/Auth/LoginTicket.php";
22
+ require_once APSL_PLUGIN_DIR."google/Client.php";
23
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
24
+ require_once APSL_PLUGIN_DIR."google/Utils.php";
25
+ require_once APSL_PLUGIN_DIR."google/Verifier/Pem.php";
26
+
27
+ /**
28
+ * Authentication class that deals with the OAuth 2 web-server authentication flow
29
+ *
30
+ * @author Chris Chabot <chabotc@google.com>
31
+ * @author Chirag Shah <chirags@google.com>
32
+ *
33
+ */
34
+ class Google_Auth_OAuth2 extends Google_Auth_Abstract
35
+ {
36
+ const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
37
+ const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
38
+ const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
39
+ const CLOCK_SKEW_SECS = 300; // five minutes in seconds
40
+ const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
41
+ const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
42
+ const OAUTH2_ISSUER = 'accounts.google.com';
43
+
44
+ /** @var Google_Auth_AssertionCredentials $assertionCredentials */
45
+ private $assertionCredentials;
46
+
47
+ /**
48
+ * @var string The state parameters for CSRF and other forgery protection.
49
+ */
50
+ private $state;
51
+
52
+ /**
53
+ * @var array The token bundle.
54
+ */
55
+ private $token = array();
56
+
57
+ /**
58
+ * @var Google_Client the base client
59
+ */
60
+ private $client;
61
+
62
+ /**
63
+ * Instantiates the class, but does not initiate the login flow, leaving it
64
+ * to the discretion of the caller.
65
+ */
66
+ public function __construct(Google_Client $client)
67
+ {
68
+ $this->client = $client;
69
+ }
70
+
71
+ /**
72
+ * Perform an authenticated / signed apiHttpRequest.
73
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
74
+ * (which can modify the request in what ever way fits the auth mechanism)
75
+ * and then calls apiCurlIO::makeRequest on the signed request
76
+ *
77
+ * @param Google_Http_Request $request
78
+ * @return Google_Http_Request The resulting HTTP response including the
79
+ * responseHttpCode, responseHeaders and responseBody.
80
+ */
81
+ public function authenticatedRequest(Google_Http_Request $request)
82
+ {
83
+ $request = $this->sign($request);
84
+ return $this->client->getIo()->makeRequest($request);
85
+ }
86
+
87
+ /**
88
+ * @param string $code
89
+ * @throws Google_Auth_Exception
90
+ * @return string
91
+ */
92
+ public function authenticate($code)
93
+ {
94
+ if (strlen($code) == 0) {
95
+ throw new Google_Auth_Exception("Invalid code");
96
+ }
97
+
98
+ // We got here from the redirect from a successful authorization grant,
99
+ // fetch the access token
100
+ $request = new Google_Http_Request(
101
+ self::OAUTH2_TOKEN_URI,
102
+ 'POST',
103
+ array(),
104
+ array(
105
+ 'code' => $code,
106
+ 'grant_type' => 'authorization_code',
107
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
108
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
109
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret')
110
+ )
111
+ );
112
+ $request->disableGzip();
113
+ $response = $this->client->getIo()->makeRequest($request);
114
+
115
+ if ($response->getResponseHttpCode() == 200) {
116
+ $this->setAccessToken($response->getResponseBody());
117
+ $this->token['created'] = time();
118
+ return $this->getAccessToken();
119
+ } else {
120
+ $decodedResponse = json_decode($response->getResponseBody(), true);
121
+ if ($decodedResponse != null && $decodedResponse['error']) {
122
+ $decodedResponse = $decodedResponse['error'];
123
+ }
124
+ throw new Google_Auth_Exception(
125
+ sprintf(
126
+ "Error fetching OAuth2 access token, message: '%s'",
127
+ $decodedResponse
128
+ ),
129
+ $response->getResponseHttpCode()
130
+ );
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Create a URL to obtain user authorization.
136
+ * The authorization endpoint allows the user to first
137
+ * authenticate, and then grant/deny the access request.
138
+ * @param string $scope The scope is expressed as a list of space-delimited strings.
139
+ * @return string
140
+ */
141
+ public function createAuthUrl($scope)
142
+ {
143
+ $params = array(
144
+ 'response_type' => 'code',
145
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
146
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
147
+ 'scope' => $scope,
148
+ 'access_type' => $this->client->getClassConfig($this, 'access_type'),
149
+ 'approval_prompt' => $this->client->getClassConfig($this, 'approval_prompt'),
150
+ );
151
+
152
+ $login_hint = $this->client->getClassConfig($this, 'login_hint');
153
+ if ($login_hint != '') {
154
+ $params['login_hint'] = $login_hint;
155
+ }
156
+
157
+ // If the list of scopes contains plus.login, add request_visible_actions
158
+ // to auth URL.
159
+ $rva = $this->client->getClassConfig($this, 'request_visible_actions');
160
+ if (strpos($scope, 'plus.login') && strlen($rva) > 0) {
161
+ $params['request_visible_actions'] = $rva;
162
+ }
163
+
164
+ if (isset($this->state)) {
165
+ $params['state'] = $this->state;
166
+ }
167
+
168
+ return self::OAUTH2_AUTH_URL . "?" . http_build_query($params, '', '&');
169
+ }
170
+
171
+ /**
172
+ * @param string $token
173
+ * @throws Google_Auth_Exception
174
+ */
175
+ public function setAccessToken($token)
176
+ {
177
+ $token = json_decode($token, true);
178
+ if ($token == null) {
179
+ throw new Google_Auth_Exception('Could not json decode the token');
180
+ }
181
+ if (! isset($token['access_token'])) {
182
+ throw new Google_Auth_Exception("Invalid token format");
183
+ }
184
+ $this->token = $token;
185
+ }
186
+
187
+ public function getAccessToken()
188
+ {
189
+ return json_encode($this->token);
190
+ }
191
+
192
+ public function setState($state)
193
+ {
194
+ $this->state = $state;
195
+ }
196
+
197
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
198
+ {
199
+ $this->assertionCredentials = $creds;
200
+ }
201
+
202
+ /**
203
+ * Include an accessToken in a given apiHttpRequest.
204
+ * @param Google_Http_Request $request
205
+ * @return Google_Http_Request
206
+ * @throws Google_Auth_Exception
207
+ */
208
+ public function sign(Google_Http_Request $request)
209
+ {
210
+ // add the developer key to the request before signing it
211
+ if ($this->client->getClassConfig($this, 'developer_key')) {
212
+ $request->setQueryParam('key', $this->client->getClassConfig($this, 'developer_key'));
213
+ }
214
+
215
+ // Cannot sign the request without an OAuth access token.
216
+ if (null == $this->token && null == $this->assertionCredentials) {
217
+ return $request;
218
+ }
219
+
220
+ // Check if the token is set to expire in the next 30 seconds
221
+ // (or has already expired).
222
+ if ($this->isAccessTokenExpired()) {
223
+ if ($this->assertionCredentials) {
224
+ $this->refreshTokenWithAssertion();
225
+ } else {
226
+ if (! array_key_exists('refresh_token', $this->token)) {
227
+ throw new Google_Auth_Exception(
228
+ "The OAuth 2.0 access token has expired,"
229
+ ." and a refresh token is not available. Refresh tokens"
230
+ ." are not returned for responses that were auto-approved."
231
+ );
232
+ }
233
+ $this->refreshToken($this->token['refresh_token']);
234
+ }
235
+ }
236
+
237
+ // Add the OAuth2 header to the request
238
+ $request->setRequestHeaders(
239
+ array('Authorization' => 'Bearer ' . $this->token['access_token'])
240
+ );
241
+
242
+ return $request;
243
+ }
244
+
245
+ /**
246
+ * Fetches a fresh access token with the given refresh token.
247
+ * @param string $refreshToken
248
+ * @return void
249
+ */
250
+ public function refreshToken($refreshToken)
251
+ {
252
+ $this->refreshTokenRequest(
253
+ array(
254
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
255
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret'),
256
+ 'refresh_token' => $refreshToken,
257
+ 'grant_type' => 'refresh_token'
258
+ )
259
+ );
260
+ }
261
+
262
+ /**
263
+ * Fetches a fresh access token with a given assertion token.
264
+ * @param Google_Auth_AssertionCredentials $assertionCredentials optional.
265
+ * @return void
266
+ */
267
+ public function refreshTokenWithAssertion($assertionCredentials = null)
268
+ {
269
+ if (!$assertionCredentials) {
270
+ $assertionCredentials = $this->assertionCredentials;
271
+ }
272
+
273
+ $cacheKey = $assertionCredentials->getCacheKey();
274
+
275
+ if ($cacheKey) {
276
+ // We can check whether we have a token available in the
277
+ // cache. If it is expired, we can retrieve a new one from
278
+ // the assertion.
279
+ $token = $this->client->getCache()->get($cacheKey);
280
+ if ($token) {
281
+ $this->setAccessToken($token);
282
+ }
283
+ if (!$this->isAccessTokenExpired()) {
284
+ return;
285
+ }
286
+ }
287
+
288
+ $this->refreshTokenRequest(
289
+ array(
290
+ 'grant_type' => 'assertion',
291
+ 'assertion_type' => $assertionCredentials->assertionType,
292
+ 'assertion' => $assertionCredentials->generateAssertion(),
293
+ )
294
+ );
295
+
296
+ if ($cacheKey) {
297
+ // Attempt to cache the token.
298
+ $this->client->getCache()->set(
299
+ $cacheKey,
300
+ $this->getAccessToken()
301
+ );
302
+ }
303
+ }
304
+
305
+ private function refreshTokenRequest($params)
306
+ {
307
+ $http = new Google_Http_Request(
308
+ self::OAUTH2_TOKEN_URI,
309
+ 'POST',
310
+ array(),
311
+ $params
312
+ );
313
+ $http->disableGzip();
314
+ $request = $this->client->getIo()->makeRequest($http);
315
+
316
+ $code = $request->getResponseHttpCode();
317
+ $body = $request->getResponseBody();
318
+ if (200 == $code) {
319
+ $token = json_decode($body, true);
320
+ if ($token == null) {
321
+ throw new Google_Auth_Exception("Could not json decode the access token");
322
+ }
323
+
324
+ if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
325
+ throw new Google_Auth_Exception("Invalid token format");
326
+ }
327
+
328
+ if (isset($token['id_token'])) {
329
+ $this->token['id_token'] = $token['id_token'];
330
+ }
331
+ $this->token['access_token'] = $token['access_token'];
332
+ $this->token['expires_in'] = $token['expires_in'];
333
+ $this->token['created'] = time();
334
+ } else {
335
+ throw new Google_Auth_Exception("Error refreshing the OAuth2 token, message: '$body'", $code);
336
+ }
337
+ }
338
+
339
+ /**
340
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
341
+ * token, if a token isn't provided.
342
+ * @throws Google_Auth_Exception
343
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
344
+ * @return boolean Returns True if the revocation was successful, otherwise False.
345
+ */
346
+ public function revokeToken($token = null)
347
+ {
348
+ if (!$token) {
349
+ if (!$this->token) {
350
+ // Not initialized, no token to actually revoke
351
+ return false;
352
+ } elseif (array_key_exists('refresh_token', $this->token)) {
353
+ $token = $this->token['refresh_token'];
354
+ } else {
355
+ $token = $this->token['access_token'];
356
+ }
357
+ }
358
+ $request = new Google_Http_Request(
359
+ self::OAUTH2_REVOKE_URI,
360
+ 'POST',
361
+ array(),
362
+ "token=$token"
363
+ );
364
+ $request->disableGzip();
365
+ $response = $this->client->getIo()->makeRequest($request);
366
+ $code = $response->getResponseHttpCode();
367
+ if ($code == 200) {
368
+ $this->token = null;
369
+ return true;
370
+ }
371
+
372
+ return false;
373
+ }
374
+
375
+ /**
376
+ * Returns if the access_token is expired.
377
+ * @return bool Returns True if the access_token is expired.
378
+ */
379
+ public function isAccessTokenExpired()
380
+ {
381
+ if (!$this->token || !isset($this->token['created'])) {
382
+ return true;
383
+ }
384
+
385
+ // If the token is set to expire in the next 30 seconds.
386
+ $expired = ($this->token['created']
387
+ + ($this->token['expires_in'] - 30)) < time();
388
+
389
+ return $expired;
390
+ }
391
+
392
+ // Gets federated sign-on certificates to use for verifying identity tokens.
393
+ // Returns certs as array structure, where keys are key ids, and values
394
+ // are PEM encoded certificates.
395
+ private function getFederatedSignOnCerts()
396
+ {
397
+ return $this->retrieveCertsFromLocation(
398
+ $this->client->getClassConfig($this, 'federated_signon_certs_url')
399
+ );
400
+ }
401
+
402
+ /**
403
+ * Retrieve and cache a certificates file.
404
+ * @param $url location
405
+ * @return array certificates
406
+ */
407
+ public function retrieveCertsFromLocation($url)
408
+ {
409
+ // If we're retrieving a local file, just grab it.
410
+ if ("http" != substr($url, 0, 4)) {
411
+ $file = file_get_contents($url);
412
+ if ($file) {
413
+ return json_decode($file, true);
414
+ } else {
415
+ throw new Google_Auth_Exception(
416
+ "Failed to retrieve verification certificates: '" .
417
+ $url . "'."
418
+ );
419
+ }
420
+ }
421
+
422
+ // This relies on makeRequest caching certificate responses.
423
+ $request = $this->client->getIo()->makeRequest(
424
+ new Google_Http_Request(
425
+ $url
426
+ )
427
+ );
428
+ if ($request->getResponseHttpCode() == 200) {
429
+ $certs = json_decode($request->getResponseBody(), true);
430
+ if ($certs) {
431
+ return $certs;
432
+ }
433
+ }
434
+ throw new Google_Auth_Exception(
435
+ "Failed to retrieve verification certificates: '" .
436
+ $request->getResponseBody() . "'.",
437
+ $request->getResponseHttpCode()
438
+ );
439
+ }
440
+
441
+ /**
442
+ * Verifies an id token and returns the authenticated apiLoginTicket.
443
+ * Throws an exception if the id token is not valid.
444
+ * The audience parameter can be used to control which id tokens are
445
+ * accepted. By default, the id token must have been issued to this OAuth2 client.
446
+ *
447
+ * @param $id_token
448
+ * @param $audience
449
+ * @return Google_Auth_LoginTicket
450
+ */
451
+ public function verifyIdToken($id_token = null, $audience = null)
452
+ {
453
+ if (!$id_token) {
454
+ $id_token = $this->token['id_token'];
455
+ }
456
+ $certs = $this->getFederatedSignonCerts();
457
+ if (!$audience) {
458
+ $audience = $this->client->getClassConfig($this, 'client_id');
459
+ }
460
+
461
+ return $this->verifySignedJwtWithCerts($id_token, $certs, $audience, self::OAUTH2_ISSUER);
462
+ }
463
+
464
+ /**
465
+ * Verifies the id token, returns the verified token contents.
466
+ *
467
+ * @param $jwt the token
468
+ * @param $certs array of certificates
469
+ * @param $required_audience the expected consumer of the token
470
+ * @param [$issuer] the expected issues, defaults to Google
471
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
472
+ * @return token information if valid, false if not
473
+ */
474
+ public function verifySignedJwtWithCerts(
475
+ $jwt,
476
+ $certs,
477
+ $required_audience,
478
+ $issuer = null,
479
+ $max_expiry = null
480
+ ) {
481
+ if (!$max_expiry) {
482
+ // Set the maximum time we will accept a token for.
483
+ $max_expiry = self::MAX_TOKEN_LIFETIME_SECS;
484
+ }
485
+
486
+ $segments = explode(".", $jwt);
487
+ if (count($segments) != 3) {
488
+ throw new Google_Auth_Exception("Wrong number of segments in token: $jwt");
489
+ }
490
+ $signed = $segments[0] . "." . $segments[1];
491
+ $signature = Google_Utils::urlSafeB64Decode($segments[2]);
492
+
493
+ // Parse envelope.
494
+ $envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
495
+ if (!$envelope) {
496
+ throw new Google_Auth_Exception("Can't parse token envelope: " . $segments[0]);
497
+ }
498
+
499
+ // Parse token
500
+ $json_body = Google_Utils::urlSafeB64Decode($segments[1]);
501
+ $payload = json_decode($json_body, true);
502
+ if (!$payload) {
503
+ throw new Google_Auth_Exception("Can't parse token payload: " . $segments[1]);
504
+ }
505
+
506
+ // Check signature
507
+ $verified = false;
508
+ foreach ($certs as $keyName => $pem) {
509
+ $public_key = new Google_Verifier_Pem($pem);
510
+ if ($public_key->verify($signed, $signature)) {
511
+ $verified = true;
512
+ break;
513
+ }
514
+ }
515
+
516
+ if (!$verified) {
517
+ throw new Google_Auth_Exception("Invalid token signature: $jwt");
518
+ }
519
+
520
+ // Check issued-at timestamp
521
+ $iat = 0;
522
+ if (array_key_exists("iat", $payload)) {
523
+ $iat = $payload["iat"];
524
+ }
525
+ if (!$iat) {
526
+ throw new Google_Auth_Exception("No issue time in token: $json_body");
527
+ }
528
+ $earliest = $iat - self::CLOCK_SKEW_SECS;
529
+
530
+ // Check expiration timestamp
531
+ $now = time();
532
+ $exp = 0;
533
+ if (array_key_exists("exp", $payload)) {
534
+ $exp = $payload["exp"];
535
+ }
536
+ if (!$exp) {
537
+ throw new Google_Auth_Exception("No expiration time in token: $json_body");
538
+ }
539
+ if ($exp >= $now + $max_expiry) {
540
+ throw new Google_Auth_Exception(
541
+ sprintf("Expiration time too far in future: %s", $json_body)
542
+ );
543
+ }
544
+
545
+ $latest = $exp + self::CLOCK_SKEW_SECS;
546
+ if ($now < $earliest) {
547
+ throw new Google_Auth_Exception(
548
+ sprintf(
549
+ "Token used too early, %s < %s: %s",
550
+ $now,
551
+ $earliest,
552
+ $json_body
553
+ )
554
+ );
555
+ }
556
+ if ($now > $latest) {
557
+ throw new Google_Auth_Exception(
558
+ sprintf(
559
+ "Token used too late, %s > %s: %s",
560
+ $now,
561
+ $latest,
562
+ $json_body
563
+ )
564
+ );
565
+ }
566
+
567
+ $iss = $payload['iss'];
568
+ if ($issuer && $iss != $issuer) {
569
+ throw new Google_Auth_Exception(
570
+ sprintf(
571
+ "Invalid issuer, %s != %s: %s",
572
+ $iss,
573
+ $issuer,
574
+ $json_body
575
+ )
576
+ );
577
+ }
578
+
579
+ // Check audience
580
+ $aud = $payload["aud"];
581
+ if ($aud != $required_audience) {
582
+ throw new Google_Auth_Exception(
583
+ sprintf(
584
+ "Wrong recipient, %s != %s:",
585
+ $aud,
586
+ $required_audience,
587
+ $json_body
588
+ )
589
+ );
590
+ }
591
+
592
+ // All good.
593
+ return new Google_Auth_LoginTicket($envelope, $payload);
594
+ }
595
+ }
google/Auth/Simple.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Auth/Abstract.php";
19
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
20
+
21
+ /**
22
+ * Simple API access implementation. Can either be used to make requests
23
+ * completely unauthenticated, or by using a Simple API Access developer
24
+ * key.
25
+ * @author Chris Chabot <chabotc@google.com>
26
+ * @author Chirag Shah <chirags@google.com>
27
+ */
28
+ class Google_Auth_Simple extends Google_Auth_Abstract
29
+ {
30
+ private $key = null;
31
+ private $client;
32
+
33
+ public function __construct(Google_Client $client, $config = null)
34
+ {
35
+ $this->client = $client;
36
+ }
37
+
38
+ /**
39
+ * Perform an authenticated / signed apiHttpRequest.
40
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
41
+ * (which can modify the request in what ever way fits the auth mechanism)
42
+ * and then calls apiCurlIO::makeRequest on the signed request
43
+ *
44
+ * @param Google_Http_Request $request
45
+ * @return Google_Http_Request The resulting HTTP response including the
46
+ * responseHttpCode, responseHeaders and responseBody.
47
+ */
48
+ public function authenticatedRequest(Google_Http_Request $request)
49
+ {
50
+ $request = $this->sign($request);
51
+ return $this->io->makeRequest($request);
52
+ }
53
+
54
+ public function sign(Google_Http_Request $request)
55
+ {
56
+ $key = $this->client->getClassConfig($this, 'developer_key');
57
+ if ($key) {
58
+ $request->setQueryParam('key', $key);
59
+ }
60
+ return $request;
61
+ }
62
+ }
google/Cache/Abstract.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Abstract storage class
20
+ *
21
+ * @author Chris Chabot <chabotc@google.com>
22
+ */
23
+ abstract class Google_Cache_Abstract
24
+ {
25
+
26
+ abstract public function __construct(Google_Client $client);
27
+
28
+ /**
29
+ * Retrieves the data for the given key, or false if they
30
+ * key is unknown or expired
31
+ *
32
+ * @param String $key The key who's data to retrieve
33
+ * @param boolean|int $expiration Expiration time in seconds
34
+ *
35
+ */
36
+ abstract public function get($key, $expiration = false);
37
+
38
+ /**
39
+ * Store the key => $value set. The $value is serialized
40
+ * by this function so can be of any type
41
+ *
42
+ * @param string $key Key of the data
43
+ * @param string $value data
44
+ */
45
+ abstract public function set($key, $value);
46
+
47
+ /**
48
+ * Removes the key/data pair for the given $key
49
+ *
50
+ * @param String $key
51
+ */
52
+ abstract public function delete($key);
53
+ }
google/Cache/Apc.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Cache/Abstract.php";
19
+ require_once APSL_PLUGIN_DIR."google/Cache/Exception.php";
20
+
21
+ /**
22
+ * A persistent storage class based on the APC cache, which is not
23
+ * really very persistent, as soon as you restart your web server
24
+ * the storage will be wiped, however for debugging and/or speed
25
+ * it can be useful, and cache is a lot cheaper then storage.
26
+ *
27
+ * @author Chris Chabot <chabotc@google.com>
28
+ */
29
+ class Google_Cache_Apc extends Google_Cache_Abstract
30
+ {
31
+ public function __construct(Google_Client $client)
32
+ {
33
+ if (! function_exists('apc_add') ) {
34
+ throw new Google_Cache_Exception("Apc functions not available");
35
+ }
36
+ }
37
+
38
+ /**
39
+ * @inheritDoc
40
+ */
41
+ public function get($key, $expiration = false)
42
+ {
43
+ $ret = apc_fetch($key);
44
+ if ($ret === false) {
45
+ return false;
46
+ }
47
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
48
+ $this->delete($key);
49
+ return false;
50
+ }
51
+ return $ret['data'];
52
+ }
53
+
54
+ /**
55
+ * @inheritDoc
56
+ */
57
+ public function set($key, $value)
58
+ {
59
+ $rc = apc_store($key, array('time' => time(), 'data' => $value));
60
+ if ($rc == false) {
61
+ throw new Google_Cache_Exception("Couldn't store data");
62
+ }
63
+ }
64
+
65
+ /**
66
+ * @inheritDoc
67
+ * @param String $key
68
+ */
69
+ public function delete($key)
70
+ {
71
+ apc_delete($key);
72
+ }
73
+ }
google/Cache/Exception.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ require_once APSL_PLUGIN_DIR."google/Exception.php";
18
+
19
+ class Google_Cache_Exception extends Google_Exception
20
+ {
21
+ }
google/Cache/File.php ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Cache/Abstract.php";
19
+ require_once APSL_PLUGIN_DIR."google/Cache/Exception.php";
20
+
21
+ /*
22
+ * This class implements a basic on disk storage. While that does
23
+ * work quite well it's not the most elegant and scalable solution.
24
+ * It will also get you into a heap of trouble when you try to run
25
+ * this in a clustered environment.
26
+ *
27
+ * @author Chris Chabot <chabotc@google.com>
28
+ */
29
+ class Google_Cache_File extends Google_Cache_Abstract
30
+ {
31
+ const MAX_LOCK_RETRIES = 10;
32
+ private $path;
33
+ private $fh;
34
+
35
+ public function __construct(Google_Client $client)
36
+ {
37
+ $this->path = $client->getClassConfig($this, 'directory');
38
+ }
39
+
40
+ public function get($key, $expiration = false)
41
+ {
42
+ $storageFile = $this->getCacheFile($key);
43
+ $data = false;
44
+
45
+ if (!file_exists($storageFile)) {
46
+ return false;
47
+ }
48
+
49
+ if ($expiration) {
50
+ $mtime = filemtime($storageFile);
51
+ if ((time() - $mtime) >= $expiration) {
52
+ $this->delete($key);
53
+ return false;
54
+ }
55
+ }
56
+
57
+ if ($this->acquireReadLock($storageFile)) {
58
+ $data = fread($this->fh, filesize($storageFile));
59
+ $data = unserialize($data);
60
+ $this->unlock($storageFile);
61
+ }
62
+
63
+ return $data;
64
+ }
65
+
66
+ public function set($key, $value)
67
+ {
68
+ $storageFile = $this->getWriteableCacheFile($key);
69
+ if ($this->acquireWriteLock($storageFile)) {
70
+ // We serialize the whole request object, since we don't only want the
71
+ // responseContent but also the postBody used, headers, size, etc.
72
+ $data = serialize($value);
73
+ $result = fwrite($this->fh, $data);
74
+ $this->unlock($storageFile);
75
+ }
76
+ }
77
+
78
+ public function delete($key)
79
+ {
80
+ $file = $this->getCacheFile($key);
81
+ if (file_exists($file) && !unlink($file)) {
82
+ throw new Google_Cache_Exception("Cache file could not be deleted");
83
+ }
84
+ }
85
+
86
+ private function getWriteableCacheFile($file)
87
+ {
88
+ return $this->getCacheFile($file, true);
89
+ }
90
+
91
+ private function getCacheFile($file, $forWrite = false)
92
+ {
93
+ return $this->getCacheDir($file, $forWrite) . '/' . md5($file);
94
+ }
95
+
96
+ private function getCacheDir($file, $forWrite)
97
+ {
98
+ // use the first 2 characters of the hash as a directory prefix
99
+ // this should prevent slowdowns due to huge directory listings
100
+ // and thus give some basic amount of scalability
101
+ $storageDir = $this->path . '/' . substr(md5($file), 0, 2);
102
+ if ($forWrite && ! is_dir($storageDir)) {
103
+ if (! mkdir($storageDir, 0755, true)) {
104
+ throw new Google_Cache_Exception("Could not create storage directory: $storageDir");
105
+ }
106
+ }
107
+ return $storageDir;
108
+ }
109
+
110
+ private function acquireReadLock($storageFile)
111
+ {
112
+ return $this->acquireLock(LOCK_SH, $storageFile);
113
+ }
114
+
115
+ private function acquireWriteLock($storageFile)
116
+ {
117
+ $rc = $this->acquireLock(LOCK_EX, $storageFile);
118
+ if (!$rc) {
119
+ $this->delete($storageFile);
120
+ }
121
+ return $rc;
122
+ }
123
+
124
+ private function acquireLock($type, $storageFile)
125
+ {
126
+ $mode = $type == LOCK_EX ? "w" : "r";
127
+ $this->fh = fopen($storageFile, $mode);
128
+ $count = 0;
129
+ while (!flock($this->fh, $type | LOCK_NB)) {
130
+ // Sleep for 10ms.
131
+ usleep(10000);
132
+ if (++$count < self::MAX_LOCK_RETRIES) {
133
+ return false;
134
+ }
135
+ }
136
+ return true;
137
+ }
138
+
139
+ public function unlock($storageFile)
140
+ {
141
+ if ($this->fh) {
142
+ flock($this->fh, LOCK_UN);
143
+ }
144
+ }
145
+ }
google/Cache/Memcache.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Cache/Abstract.php";
19
+ require_once APSL_PLUGIN_DIR."google/Cache/Exception.php";
20
+
21
+ /**
22
+ * A persistent storage class based on the memcache, which is not
23
+ * really very persistent, as soon as you restart your memcache daemon
24
+ * the storage will be wiped.
25
+ *
26
+ * Will use either the memcache or memcached extensions, preferring
27
+ * memcached.
28
+ *
29
+ * @author Chris Chabot <chabotc@google.com>
30
+ */
31
+ class Google_Cache_Memcache extends Google_Cache_Abstract
32
+ {
33
+ private $connection = false;
34
+ private $mc = false;
35
+ private $host;
36
+ private $port;
37
+
38
+ public function __construct(Google_Client $client)
39
+ {
40
+ if (!function_exists('memcache_connect') && !class_exists("Memcached")) {
41
+ throw new Google_Cache_Exception("Memcache functions not available");
42
+ }
43
+ if ($client->isAppEngine()) {
44
+ // No credentials needed for GAE.
45
+ $this->mc = new Memcached();
46
+ $this->connection = true;
47
+ } else {
48
+ $this->host = $client->getClassConfig($this, 'host');
49
+ $this->port = $client->getClassConfig($this, 'port');
50
+ if (empty($this->host) || empty($this->port)) {
51
+ throw new Google_Cache_Exception("You need to supply a valid memcache host and port");
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * @inheritDoc
58
+ */
59
+ public function get($key, $expiration = false)
60
+ {
61
+ $this->connect();
62
+ $ret = false;
63
+ if ($this->mc) {
64
+ $ret = $this->mc->get($key);
65
+ } else {
66
+ $ret = memcache_get($this->connection, $key);
67
+ }
68
+ if ($ret === false) {
69
+ return false;
70
+ }
71
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
72
+ $this->delete($key);
73
+ return false;
74
+ }
75
+ return $ret['data'];
76
+ }
77
+
78
+ /**
79
+ * @inheritDoc
80
+ * @param string $key
81
+ * @param string $value
82
+ * @throws Google_Cache_Exception
83
+ */
84
+ public function set($key, $value)
85
+ {
86
+ $this->connect();
87
+ // we store it with the cache_time default expiration so objects will at
88
+ // least get cleaned eventually.
89
+ $data = array('time' => time(), 'data' => $value);
90
+ $rc = false;
91
+ if ($this->mc) {
92
+ $rc = $this->mc->set($key, $data);
93
+ } else {
94
+ $rc = memcache_set($this->connection, $key, $data, false);
95
+ }
96
+ if ($rc == false) {
97
+ throw new Google_Cache_Exception("Couldn't store data in cache");
98
+ }
99
+ }
100
+
101
+ /**
102
+ * @inheritDoc
103
+ * @param String $key
104
+ */
105
+ public function delete($key)
106
+ {
107
+ $this->connect();
108
+ if ($this->mc) {
109
+ $this->mc->delete($key, 0);
110
+ } else {
111
+ memcache_delete($this->connection, $key, 0);
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Lazy initialiser for memcache connection. Uses pconnect for to take
117
+ * advantage of the persistence pool where possible.
118
+ */
119
+ private function connect()
120
+ {
121
+ if ($this->connection) {
122
+ return;
123
+ }
124
+
125
+ if (class_exists("Memcached")) {
126
+ $this->mc = new Memcached();
127
+ $this->mc->addServer($this->host, $this->port);
128
+ $this->connection = true;
129
+ } else {
130
+ $this->connection = memcache_pconnect($this->host, $this->port);
131
+ }
132
+
133
+ if (! $this->connection) {
134
+ throw new Google_Cache_Exception("Couldn't connect to memcache server");
135
+ }
136
+ }
137
+ }
google/Cache/Null.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Cache/Abstract.php";
19
+ require_once APSL_PLUGIN_DIR."google/Cache/Exception.php";
20
+
21
+ /**
22
+ * A blank storage class, for cases where caching is not
23
+ * required.
24
+ */
25
+ class Google_Cache_Null extends Google_Cache_Abstract
26
+ {
27
+ public function __construct(Google_Client $client)
28
+ {
29
+
30
+ }
31
+
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ public function get($key, $expiration = false)
36
+ {
37
+ return false;
38
+ }
39
+
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ public function set($key, $value)
44
+ {
45
+ // Nop.
46
+ }
47
+
48
+ /**
49
+ * @inheritDoc
50
+ * @param String $key
51
+ */
52
+ public function delete($key)
53
+ {
54
+ // Nop.
55
+ }
56
+ }
google/Client.php ADDED
@@ -0,0 +1,617 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR.'google/Auth/AssertionCredentials.php';
19
+ require_once APSL_PLUGIN_DIR.'google/Cache/File.php';
20
+ require_once APSL_PLUGIN_DIR.'google/Cache/Memcache.php';
21
+ require_once APSL_PLUGIN_DIR.'google/Config.php';
22
+ require_once APSL_PLUGIN_DIR.'google/Collection.php';
23
+ require_once APSL_PLUGIN_DIR.'google/Exception.php';
24
+ require_once APSL_PLUGIN_DIR.'google/IO/Curl.php';
25
+ require_once APSL_PLUGIN_DIR.'google/IO/Stream.php';
26
+ require_once APSL_PLUGIN_DIR.'google/Model.php';
27
+ require_once APSL_PLUGIN_DIR.'google/Service.php';
28
+ require_once APSL_PLUGIN_DIR.'google/Service/Resource.php';
29
+
30
+ /**
31
+ * The Google API Client
32
+ * http://code.google.com/p/google-api-php-client/
33
+ *
34
+ * @author Chris Chabot <chabotc@google.com>
35
+ * @author Chirag Shah <chirags@google.com>
36
+ */
37
+ class Google_Client
38
+ {
39
+ const LIBVER = "1.0.5-beta";
40
+ const USER_AGENT_SUFFIX = "google-api-php-client/";
41
+ /**
42
+ * @var Google_Auth_Abstract $auth
43
+ */
44
+ private $auth;
45
+
46
+ /**
47
+ * @var Google_IO_Abstract $io
48
+ */
49
+ private $io;
50
+
51
+ /**
52
+ * @var Google_Cache_Abstract $cache
53
+ */
54
+ private $cache;
55
+
56
+ /**
57
+ * @var Google_Config $config
58
+ */
59
+ private $config;
60
+
61
+ /**
62
+ * @var boolean $deferExecution
63
+ */
64
+ private $deferExecution = false;
65
+
66
+ /** @var array $scopes */
67
+ // Scopes requested by the client
68
+ protected $requestedScopes = array();
69
+
70
+ // definitions of services that are discovered.
71
+ protected $services = array();
72
+
73
+ // Used to track authenticated state, can't discover services after doing authenticate()
74
+ private $authenticated = false;
75
+
76
+ /**
77
+ * Construct the Google Client.
78
+ *
79
+ * @param $config Google_Config or string for the ini file to load
80
+ */
81
+ public function __construct($config = null)
82
+ {
83
+ if (! ini_get('date.timezone') &&
84
+ function_exists('date_default_timezone_set')) {
85
+ date_default_timezone_set('UTC');
86
+ }
87
+
88
+ if (is_string($config) && strlen($config)) {
89
+ $config = new Google_Config($config);
90
+ } else if ( !($config instanceof Google_Config)) {
91
+ $config = new Google_Config();
92
+
93
+ if ($this->isAppEngine()) {
94
+ // Automatically use Memcache if we're in AppEngine.
95
+ $config->setCacheClass('Google_Cache_Memcache');
96
+ }
97
+
98
+ if (version_compare(phpversion(), "5.3.4", "<=") || $this->isAppEngine()) {
99
+ // Automatically disable compress.zlib, as currently unsupported.
100
+ $config->setClassConfig('Google_Http_Request', 'disable_gzip', true);
101
+ }
102
+ }
103
+
104
+ if ($config->getIoClass() == Google_Config::USE_AUTO_IO_SELECTION) {
105
+ if (function_exists('curl_version') && function_exists('curl_exec')) {
106
+ $config->setIoClass("Google_IO_Curl");
107
+ } else {
108
+ $config->setIoClass("Google_IO_Stream");
109
+ }
110
+ }
111
+
112
+ $this->config = $config;
113
+ }
114
+
115
+ /**
116
+ * Get a string containing the version of the library.
117
+ *
118
+ * @return string
119
+ */
120
+ public function getLibraryVersion()
121
+ {
122
+ return self::LIBVER;
123
+ }
124
+
125
+ /**
126
+ * Attempt to exchange a code for an valid authentication token.
127
+ * Helper wrapped around the OAuth 2.0 implementation.
128
+ *
129
+ * @param $code string code from accounts.google.com
130
+ * @return string token
131
+ */
132
+ public function authenticate($code)
133
+ {
134
+ $this->authenticated = true;
135
+ return $this->getAuth()->authenticate($code);
136
+ }
137
+
138
+ /**
139
+ * Set the auth config from the JSON string provided.
140
+ * This structure should match the file downloaded from
141
+ * the "Download JSON" button on in the Google Developer
142
+ * Console.
143
+ * @param string $json the configuration json
144
+ */
145
+ public function setAuthConfig($json)
146
+ {
147
+ $data = json_decode($json);
148
+ $key = isset($data->installed) ? 'installed' : 'web';
149
+ if (!isset($data->$key)) {
150
+ throw new Google_Exception("Invalid client secret JSON file.");
151
+ }
152
+ $this->setClientId($data->$key->client_id);
153
+ $this->setClientSecret($data->$key->client_secret);
154
+ if (isset($data->$key->redirect_uris)) {
155
+ $this->setRedirectUri($data->$key->redirect_uris[0]);
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Set the auth config from the JSON file in the path
161
+ * provided. This should match the file downloaded from
162
+ * the "Download JSON" button on in the Google Developer
163
+ * Console.
164
+ * @param string $file the file location of the client json
165
+ */
166
+ public function setAuthConfigFile($file)
167
+ {
168
+ $this->setAuthConfig(file_get_contents($file));
169
+ }
170
+
171
+ /**
172
+ * @return array
173
+ * @visible For Testing
174
+ */
175
+ public function prepareScopes()
176
+ {
177
+ if (empty($this->requestedScopes)) {
178
+ throw new Google_Auth_Exception("No scopes specified");
179
+ }
180
+ $scopes = implode(' ', $this->requestedScopes);
181
+ return $scopes;
182
+ }
183
+
184
+ /**
185
+ * Set the OAuth 2.0 access token using the string that resulted from calling createAuthUrl()
186
+ * or Google_Client#getAccessToken().
187
+ * @param string $accessToken JSON encoded string containing in the following format:
188
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
189
+ * "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
190
+ */
191
+ public function setAccessToken($accessToken)
192
+ {
193
+ if ($accessToken == 'null') {
194
+ $accessToken = null;
195
+ }
196
+ $this->getAuth()->setAccessToken($accessToken);
197
+ }
198
+
199
+
200
+
201
+ /**
202
+ * Set the authenticator object
203
+ * @param Google_Auth_Abstract $auth
204
+ */
205
+ public function setAuth(Google_Auth_Abstract $auth)
206
+ {
207
+ $this->config->setAuthClass(get_class($auth));
208
+ $this->auth = $auth;
209
+ }
210
+
211
+ /**
212
+ * Set the IO object
213
+ * @param Google_Io_Abstract $auth
214
+ */
215
+ public function setIo(Google_Io_Abstract $io)
216
+ {
217
+ $this->config->setIoClass(get_class($io));
218
+ $this->io = $io;
219
+ }
220
+
221
+ /**
222
+ * Set the Cache object
223
+ * @param Google_Cache_Abstract $auth
224
+ */
225
+ public function setCache(Google_Cache_Abstract $cache)
226
+ {
227
+ $this->config->setCacheClass(get_class($cache));
228
+ $this->cache = $cache;
229
+ }
230
+
231
+ /**
232
+ * Construct the OAuth 2.0 authorization request URI.
233
+ * @return string
234
+ */
235
+ public function createAuthUrl()
236
+ {
237
+ $scopes = $this->prepareScopes();
238
+ return $this->getAuth()->createAuthUrl($scopes);
239
+ }
240
+
241
+ /**
242
+ * Get the OAuth 2.0 access token.
243
+ * @return string $accessToken JSON encoded string in the following format:
244
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
245
+ * "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
246
+ */
247
+ public function getAccessToken()
248
+ {
249
+ $token = $this->getAuth()->getAccessToken();
250
+ // The response is json encoded, so could be the string null.
251
+ // It is arguable whether this check should be here or lower
252
+ // in the library.
253
+ return (null == $token || 'null' == $token || '[]' == $token) ? null : $token;
254
+ }
255
+
256
+ /**
257
+ * Returns if the access_token is expired.
258
+ * @return bool Returns True if the access_token is expired.
259
+ */
260
+ public function isAccessTokenExpired()
261
+ {
262
+ return $this->getAuth()->isAccessTokenExpired();
263
+ }
264
+
265
+ /**
266
+ * Set OAuth 2.0 "state" parameter to achieve per-request customization.
267
+ * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
268
+ * @param string $state
269
+ */
270
+ public function setState($state)
271
+ {
272
+ $this->getAuth()->setState($state);
273
+ }
274
+
275
+ /**
276
+ * @param string $accessType Possible values for access_type include:
277
+ * {@code "offline"} to request offline access from the user.
278
+ * {@code "online"} to request online access from the user.
279
+ */
280
+ public function setAccessType($accessType)
281
+ {
282
+ $this->config->setAccessType($accessType);
283
+ }
284
+
285
+ /**
286
+ * @param string $approvalPrompt Possible values for approval_prompt include:
287
+ * {@code "force"} to force the approval UI to appear. (This is the default value)
288
+ * {@code "auto"} to request auto-approval when possible.
289
+ */
290
+ public function setApprovalPrompt($approvalPrompt)
291
+ {
292
+ $this->config->setApprovalPrompt($approvalPrompt);
293
+ }
294
+
295
+ /**
296
+ * Set the login hint, email address or sub id.
297
+ * @param string $loginHint
298
+ */
299
+ public function setLoginHint($loginHint)
300
+ {
301
+ $this->config->setLoginHint($loginHint);
302
+ }
303
+
304
+ /**
305
+ * Set the application name, this is included in the User-Agent HTTP header.
306
+ * @param string $applicationName
307
+ */
308
+ public function setApplicationName($applicationName)
309
+ {
310
+ $this->config->setApplicationName($applicationName);
311
+ }
312
+
313
+ /**
314
+ * Set the OAuth 2.0 Client ID.
315
+ * @param string $clientId
316
+ */
317
+ public function setClientId($clientId)
318
+ {
319
+ $this->config->setClientId($clientId);
320
+ }
321
+
322
+ /**
323
+ * Set the OAuth 2.0 Client Secret.
324
+ * @param string $clientSecret
325
+ */
326
+ public function setClientSecret($clientSecret)
327
+ {
328
+ $this->config->setClientSecret($clientSecret);
329
+ }
330
+
331
+ /**
332
+ * Set the OAuth 2.0 Redirect URI.
333
+ * @param string $redirectUri
334
+ */
335
+ public function setRedirectUri($redirectUri)
336
+ {
337
+ $this->config->setRedirectUri($redirectUri);
338
+ }
339
+
340
+ /**
341
+ * If 'plus.login' is included in the list of requested scopes, you can use
342
+ * this method to define types of app activities that your app will write.
343
+ * You can find a list of available types here:
344
+ * @link https://developers.google.com/+/api/moment-types
345
+ *
346
+ * @param array $requestVisibleActions Array of app activity types
347
+ */
348
+ public function setRequestVisibleActions($requestVisibleActions)
349
+ {
350
+ if (is_array($requestVisibleActions)) {
351
+ $requestVisibleActions = join(" ", $requestVisibleActions);
352
+ }
353
+ $this->config->setRequestVisibleActions($requestVisibleActions);
354
+ }
355
+
356
+ /**
357
+ * Set the developer key to use, these are obtained through the API Console.
358
+ * @see http://code.google.com/apis/console-help/#generatingdevkeys
359
+ * @param string $developerKey
360
+ */
361
+ public function setDeveloperKey($developerKey)
362
+ {
363
+ $this->config->setDeveloperKey($developerKey);
364
+ }
365
+
366
+ /**
367
+ * Fetches a fresh OAuth 2.0 access token with the given refresh token.
368
+ * @param string $refreshToken
369
+ * @return void
370
+ */
371
+ public function refreshToken($refreshToken)
372
+ {
373
+ return $this->getAuth()->refreshToken($refreshToken);
374
+ }
375
+
376
+ /**
377
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
378
+ * token, if a token isn't provided.
379
+ * @throws Google_Auth_Exception
380
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
381
+ * @return boolean Returns True if the revocation was successful, otherwise False.
382
+ */
383
+ public function revokeToken($token = null)
384
+ {
385
+ return $this->getAuth()->revokeToken($token);
386
+ }
387
+
388
+ /**
389
+ * Verify an id_token. This method will verify the current id_token, if one
390
+ * isn't provided.
391
+ * @throws Google_Auth_Exception
392
+ * @param string|null $token The token (id_token) that should be verified.
393
+ * @return Google_Auth_LoginTicket Returns an apiLoginTicket if the verification was
394
+ * successful.
395
+ */
396
+ public function verifyIdToken($token = null)
397
+ {
398
+ return $this->getAuth()->verifyIdToken($token);
399
+ }
400
+
401
+ /**
402
+ * Verify a JWT that was signed with your own certificates.
403
+ *
404
+ * @param $jwt the token
405
+ * @param $certs array of certificates
406
+ * @param $required_audience the expected consumer of the token
407
+ * @param [$issuer] the expected issues, defaults to Google
408
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
409
+ * @return token information if valid, false if not
410
+ */
411
+ public function verifySignedJwt($id_token, $cert_location, $audience, $issuer, $max_expiry = null)
412
+ {
413
+ $auth = new Google_Auth_OAuth2($this);
414
+ $certs = $auth->retrieveCertsFromLocation($cert_location);
415
+ return $auth->verifySignedJwtWithCerts($id_token, $certs, $audience, $issuer, $max_expiry);
416
+ }
417
+
418
+ /**
419
+ * @param Google_Auth_AssertionCredentials $creds
420
+ * @return void
421
+ */
422
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
423
+ {
424
+ $this->getAuth()->setAssertionCredentials($creds);
425
+ }
426
+
427
+ /**
428
+ * Set the scopes to be requested. Must be called before createAuthUrl().
429
+ * Will remove any previously configured scopes.
430
+ * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.login',
431
+ * 'https://www.googleapis.com/auth/moderator')
432
+ */
433
+ public function setScopes($scopes)
434
+ {
435
+ $this->requestedScopes = array();
436
+ $this->addScope($scopes);
437
+ }
438
+
439
+ /**
440
+ * This functions adds a scope to be requested as part of the OAuth2.0 flow.
441
+ * Will append any scopes not previously requested to the scope parameter.
442
+ * A single string will be treated as a scope to request. An array of strings
443
+ * will each be appended.
444
+ * @param $scope_or_scopes string|array e.g. "profile"
445
+ */
446
+ public function addScope($scope_or_scopes)
447
+ {
448
+ if (is_string($scope_or_scopes) && !in_array($scope_or_scopes, $this->requestedScopes)) {
449
+ $this->requestedScopes[] = $scope_or_scopes;
450
+ } else if (is_array($scope_or_scopes)) {
451
+ foreach ($scope_or_scopes as $scope) {
452
+ $this->addScope($scope);
453
+ }
454
+ }
455
+ }
456
+
457
+ /**
458
+ * Returns the list of scopes requested by the client
459
+ * @return array the list of scopes
460
+ *
461
+ */
462
+ public function getScopes()
463
+ {
464
+ return $this->requestedScopes;
465
+ }
466
+
467
+ /**
468
+ * Declare whether batch calls should be used. This may increase throughput
469
+ * by making multiple requests in one connection.
470
+ *
471
+ * @param boolean $useBatch True if the batch support should
472
+ * be enabled. Defaults to False.
473
+ */
474
+ public function setUseBatch($useBatch)
475
+ {
476
+ // This is actually an alias for setDefer.
477
+ $this->setDefer($useBatch);
478
+ }
479
+
480
+ /**
481
+ * Declare whether making API calls should make the call immediately, or
482
+ * return a request which can be called with ->execute();
483
+ *
484
+ * @param boolean $defer True if calls should not be executed right away.
485
+ */
486
+ public function setDefer($defer)
487
+ {
488
+ $this->deferExecution = $defer;
489
+ }
490
+
491
+ /**
492
+ * Helper method to execute deferred HTTP requests.
493
+ *
494
+ * @returns object of the type of the expected class or array.
495
+ */
496
+ public function execute($request)
497
+ {
498
+ if ($request instanceof Google_Http_Request) {
499
+ $request->setUserAgent(
500
+ $this->getApplicationName()
501
+ . " " . self::USER_AGENT_SUFFIX
502
+ . $this->getLibraryVersion()
503
+ );
504
+ if (!$this->getClassConfig("Google_Http_Request", "disable_gzip")) {
505
+ $request->enableGzip();
506
+ }
507
+ $request->maybeMoveParametersToBody();
508
+ return Google_Http_REST::execute($this, $request);
509
+ } else if ($request instanceof Google_Http_Batch) {
510
+ return $request->execute();
511
+ } else {
512
+ throw new Google_Exception("Do not know how to execute this type of object.");
513
+ }
514
+ }
515
+
516
+ /**
517
+ * Whether or not to return raw requests
518
+ * @return boolean
519
+ */
520
+ public function shouldDefer()
521
+ {
522
+ return $this->deferExecution;
523
+ }
524
+
525
+ /**
526
+ * @return Google_Auth_Abstract Authentication implementation
527
+ */
528
+ public function getAuth()
529
+ {
530
+ if (!isset($this->auth)) {
531
+ $class = $this->config->getAuthClass();
532
+ $this->auth = new $class($this);
533
+ }
534
+ return $this->auth;
535
+ }
536
+
537
+ /**
538
+ * @return Google_IO_Abstract IO implementation
539
+ */
540
+ public function getIo()
541
+ {
542
+ if (!isset($this->io)) {
543
+ $class = $this->config->getIoClass();
544
+ $this->io = new $class($this);
545
+ }
546
+ return $this->io;
547
+ }
548
+
549
+ /**
550
+ * @return Google_Cache_Abstract Cache implementation
551
+ */
552
+ public function getCache()
553
+ {
554
+ if (!isset($this->cache)) {
555
+ $class = $this->config->getCacheClass();
556
+ $this->cache = new $class($this);
557
+ }
558
+ return $this->cache;
559
+ }
560
+
561
+ /**
562
+ * Retrieve custom configuration for a specific class.
563
+ * @param $class string|object - class or instance of class to retrieve
564
+ * @param $key string optional - key to retrieve
565
+ */
566
+ public function getClassConfig($class, $key = null)
567
+ {
568
+ if (!is_string($class)) {
569
+ $class = get_class($class);
570
+ }
571
+ return $this->config->getClassConfig($class, $key);
572
+ }
573
+
574
+ /**
575
+ * Set configuration specific to a given class.
576
+ * $config->setClassConfig('Google_Cache_File',
577
+ * array('directory' => '/tmp/cache'));
578
+ * @param $class The class name for the configuration
579
+ * @param $config string key or an array of configuration values
580
+ * @param $value optional - if $config is a key, the value
581
+ *
582
+ */
583
+ public function setClassConfig($class, $config, $value = null)
584
+ {
585
+ if (!is_string($class)) {
586
+ $class = get_class($class);
587
+ }
588
+ return $this->config->setClassConfig($class, $config, $value);
589
+
590
+ }
591
+
592
+ /**
593
+ * @return string the base URL to use for calls to the APIs
594
+ */
595
+ public function getBasePath()
596
+ {
597
+ return $this->config->getBasePath();
598
+ }
599
+
600
+ /**
601
+ * @return string the name of the application
602
+ */
603
+ public function getApplicationName()
604
+ {
605
+ return $this->config->getApplicationName();
606
+ }
607
+
608
+ /**
609
+ * Are we running in Google AppEngine?
610
+ * return bool
611
+ */
612
+ public function isAppEngine()
613
+ {
614
+ return (isset($_SERVER['SERVER_SOFTWARE']) &&
615
+ strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false);
616
+ }
617
+ }
google/Collection.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once APSL_PLUGIN_DIR."google/Model.php";
4
+
5
+ /**
6
+ * Extension to the regular Google_Model that automatically
7
+ * exposes the items array for iteration, so you can just
8
+ * iterate over the object rather than a reference inside.
9
+ */
10
+ class Google_Collection extends Google_Model implements Iterator, Countable
11
+ {
12
+ protected $collection_key = 'items';
13
+
14
+ public function rewind()
15
+ {
16
+ if (isset($this->modelData[$this->collection_key])
17
+ && is_array($this->modelData[$this->collection_key])) {
18
+ reset($this->modelData[$this->collection_key]);
19
+ }
20
+ }
21
+
22
+ public function current()
23
+ {
24
+ $this->coerceType($this->key());
25
+ if (is_array($this->modelData[$this->collection_key])) {
26
+ return current($this->modelData[$this->collection_key]);
27
+ }
28
+ }
29
+
30
+ public function key()
31
+ {
32
+ if (isset($this->modelData[$this->collection_key])
33
+ && is_array($this->modelData[$this->collection_key])) {
34
+ return key($this->modelData[$this->collection_key]);
35
+ }
36
+ }
37
+
38
+ public function next()
39
+ {
40
+ return next($this->modelData[$this->collection_key]);
41
+ }
42
+
43
+ public function valid()
44
+ {
45
+ $key = $this->key();
46
+ return $key !== null && $key !== false;
47
+ }
48
+
49
+ public function count()
50
+ {
51
+ return count($this->modelData[$this->collection_key]);
52
+ }
53
+
54
+ public function offsetExists ($offset)
55
+ {
56
+ if (!is_numeric($offset)) {
57
+ return parent::offsetExists($offset);
58
+ }
59
+ return isset($this->modelData[$this->collection_key][$offset]);
60
+ }
61
+
62
+ public function offsetGet($offset)
63
+ {
64
+ if (!is_numeric($offset)) {
65
+ return parent::offsetGet($offset);
66
+ }
67
+ $this->coerceType($offset);
68
+ return $this->modelData[$this->collection_key][$offset];
69
+ }
70
+
71
+ public function offsetSet($offset, $value)
72
+ {
73
+ if (!is_numeric($offset)) {
74
+ return parent::offsetSet($offset, $value);
75
+ }
76
+ $this->modelData[$this->collection_key][$offset] = $value;
77
+ }
78
+
79
+ public function offsetUnset($offset)
80
+ {
81
+ if (!is_numeric($offset)) {
82
+ return parent::offsetUnset($offset);
83
+ }
84
+ unset($this->modelData[$this->collection_key][$offset]);
85
+ }
86
+
87
+ private function coerceType($offset)
88
+ {
89
+ $typeKey = $this->keyType($this->collection_key);
90
+ if (isset($this->$typeKey) && !is_object($this->modelData[$this->collection_key][$offset])) {
91
+ $type = $this->$typeKey;
92
+ $this->modelData[$this->collection_key][$offset] =
93
+ new $type($this->modelData[$this->collection_key][$offset]);
94
+ }
95
+ }
96
+ }
google/Config.php ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * A class to contain the library configuration for the Google API client.
20
+ */
21
+ class Google_Config
22
+ {
23
+ const GZIP_DISABLED = true;
24
+ const GZIP_ENABLED = false;
25
+ const GZIP_UPLOADS_ENABLED = true;
26
+ const GZIP_UPLOADS_DISABLED = false;
27
+ const USE_AUTO_IO_SELECTION = "auto";
28
+ private $configuration;
29
+
30
+ /**
31
+ * Create a new Google_Config. Can accept an ini file location with the
32
+ * local configuration. For example:
33
+ * application_name: "My App";
34
+ *
35
+ * @param [$ini_file_location] - optional - The location of the ini file to load
36
+ */
37
+ public function __construct($ini_file_location = null)
38
+ {
39
+ $this->configuration = array(
40
+ // The application_name is included in the User-Agent HTTP header.
41
+ 'application_name' => '',
42
+
43
+ // Which Authentication, Storage and HTTP IO classes to use.
44
+ 'auth_class' => 'Google_Auth_OAuth2',
45
+ 'io_class' => self::USE_AUTO_IO_SELECTION,
46
+ 'cache_class' => 'Google_Cache_File',
47
+
48
+ // Don't change these unless you're working against a special development
49
+ // or testing environment.
50
+ 'base_path' => 'https://www.googleapis.com',
51
+
52
+ // Definition of class specific values, like file paths and so on.
53
+ 'classes' => array(
54
+ 'Google_IO_Abstract' => array(
55
+ 'request_timeout_seconds' => 100,
56
+ ),
57
+ 'Google_Http_Request' => array(
58
+ // Disable the use of gzip on calls if set to true. Defaults to false.
59
+ 'disable_gzip' => self::GZIP_ENABLED,
60
+
61
+ // We default gzip to disabled on uploads even if gzip is otherwise
62
+ // enabled, due to some issues seen with small packet sizes for uploads.
63
+ // Please test with this option before enabling gzip for uploads in
64
+ // a production environment.
65
+ 'enable_gzip_for_uploads' => self::GZIP_UPLOADS_DISABLED,
66
+ ),
67
+ // If you want to pass in OAuth 2.0 settings, they will need to be
68
+ // structured like this.
69
+ 'Google_Auth_OAuth2' => array(
70
+ // Keys for OAuth 2.0 access, see the API console at
71
+ // https://developers.google.com/console
72
+ 'client_id' => '',
73
+ 'client_secret' => '',
74
+ 'redirect_uri' => '',
75
+
76
+ // Simple API access key, also from the API console. Ensure you get
77
+ // a Server key, and not a Browser key.
78
+ 'developer_key' => '',
79
+
80
+ // Other parameters.
81
+ 'access_type' => 'online',
82
+ 'approval_prompt' => 'auto',
83
+ 'login_hint' => '',
84
+ 'request_visible_actions' => '',
85
+ 'federated_signon_certs_url' =>
86
+ 'https://www.googleapis.com/oauth2/v1/certs',
87
+ ),
88
+ // Set a default directory for the file cache.
89
+ 'Google_Cache_File' => array(
90
+ 'directory' => sys_get_temp_dir() . '/Google_Client'
91
+ )
92
+ ),
93
+
94
+ // Definition of service specific values like scopes, oauth token URLs,
95
+ // etc. Example:
96
+ 'services' => array(
97
+ ),
98
+ );
99
+ if ($ini_file_location) {
100
+ $ini = parse_ini_file($ini_file_location, true);
101
+ if (is_array($ini) && count($ini)) {
102
+ $this->configuration = array_merge($this->configuration, $ini);
103
+ }
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Set configuration specific to a given class.
109
+ * $config->setClassConfig('Google_Cache_File',
110
+ * array('directory' => '/tmp/cache'));
111
+ * @param $class The class name for the configuration
112
+ * @param $config string key or an array of configuration values
113
+ * @param $value optional - if $config is a key, the value
114
+ */
115
+ public function setClassConfig($class, $config, $value = null)
116
+ {
117
+ if (!is_array($config)) {
118
+ if (!isset($this->configuration['classes'][$class])) {
119
+ $this->configuration['classes'][$class] = array();
120
+ }
121
+ $this->configuration['classes'][$class][$config] = $value;
122
+ } else {
123
+ $this->configuration['classes'][$class] = $config;
124
+ }
125
+ }
126
+
127
+ public function getClassConfig($class, $key = null)
128
+ {
129
+ if (!isset($this->configuration['classes'][$class])) {
130
+ return null;
131
+ }
132
+ if ($key === null) {
133
+ return $this->configuration['classes'][$class];
134
+ } else {
135
+ return $this->configuration['classes'][$class][$key];
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Return the configured cache class.
141
+ * @return string
142
+ */
143
+ public function getCacheClass()
144
+ {
145
+ return $this->configuration['cache_class'];
146
+ }
147
+
148
+ /**
149
+ * Return the configured Auth class.
150
+ * @return string
151
+ */
152
+ public function getAuthClass()
153
+ {
154
+ return $this->configuration['auth_class'];
155
+ }
156
+
157
+ /**
158
+ * Set the auth class.
159
+ *
160
+ * @param $class the class name to set
161
+ */
162
+ public function setAuthClass($class)
163
+ {
164
+ $prev = $this->configuration['auth_class'];
165
+ if (!isset($this->configuration['classes'][$class]) &&
166
+ isset($this->configuration['classes'][$prev])) {
167
+ $this->configuration['classes'][$class] =
168
+ $this->configuration['classes'][$prev];
169
+ }
170
+ $this->configuration['auth_class'] = $class;
171
+ }
172
+
173
+ /**
174
+ * Set the IO class.
175
+ *
176
+ * @param $class the class name to set
177
+ */
178
+ public function setIoClass($class)
179
+ {
180
+ $prev = $this->configuration['io_class'];
181
+ if (!isset($this->configuration['classes'][$class]) &&
182
+ isset($this->configuration['classes'][$prev])) {
183
+ $this->configuration['classes'][$class] =
184
+ $this->configuration['classes'][$prev];
185
+ }
186
+ $this->configuration['io_class'] = $class;
187
+ }
188
+
189
+ /**
190
+ * Set the cache class.
191
+ *
192
+ * @param $class the class name to set
193
+ */
194
+ public function setCacheClass($class)
195
+ {
196
+ $prev = $this->configuration['cache_class'];
197
+ if (!isset($this->configuration['classes'][$class]) &&
198
+ isset($this->configuration['classes'][$prev])) {
199
+ $this->configuration['classes'][$class] =
200
+ $this->configuration['classes'][$prev];
201
+ }
202
+ $this->configuration['cache_class'] = $class;
203
+ }
204
+
205
+ /**
206
+ * Return the configured IO class.
207
+ * @return string
208
+ */
209
+ public function getIoClass()
210
+ {
211
+ return $this->configuration['io_class'];
212
+ }
213
+
214
+ /**
215
+ * Set the application name, this is included in the User-Agent HTTP header.
216
+ * @param string $name
217
+ */
218
+ public function setApplicationName($name)
219
+ {
220
+ $this->configuration['application_name'] = $name;
221
+ }
222
+
223
+ /**
224
+ * @return string the name of the application
225
+ */
226
+ public function getApplicationName()
227
+ {
228
+ return $this->configuration['application_name'];
229
+ }
230
+
231
+ /**
232
+ * Set the client ID for the auth class.
233
+ * @param $key string - the API console client ID
234
+ */
235
+ public function setClientId($clientId)
236
+ {
237
+ $this->setAuthConfig('client_id', $clientId);
238
+ }
239
+
240
+ /**
241
+ * Set the client secret for the auth class.
242
+ * @param $key string - the API console client secret
243
+ */
244
+ public function setClientSecret($secret)
245
+ {
246
+ $this->setAuthConfig('client_secret', $secret);
247
+ }
248
+
249
+ /**
250
+ * Set the redirect uri for the auth class. Note that if using the
251
+ * Javascript based sign in flow, this should be the string 'postmessage'.
252
+ * @param $key string - the URI that users should be redirected to
253
+ */
254
+ public function setRedirectUri($uri)
255
+ {
256
+ $this->setAuthConfig('redirect_uri', $uri);
257
+ }
258
+
259
+ /**
260
+ * Set the app activities for the auth class.
261
+ * @param $rva string a space separated list of app activity types
262
+ */
263
+ public function setRequestVisibleActions($rva)
264
+ {
265
+ $this->setAuthConfig('request_visible_actions', $rva);
266
+ }
267
+
268
+ /**
269
+ * Set the the access type requested (offline or online.)
270
+ * @param $access string - the access type
271
+ */
272
+ public function setAccessType($access)
273
+ {
274
+ $this->setAuthConfig('access_type', $access);
275
+ }
276
+
277
+ /**
278
+ * Set when to show the approval prompt (auto or force)
279
+ * @param $approval string - the approval request
280
+ */
281
+ public function setApprovalPrompt($approval)
282
+ {
283
+ $this->setAuthConfig('approval_prompt', $approval);
284
+ }
285
+
286
+ /**
287
+ * Set the login hint (email address or sub identifier)
288
+ * @param $hint string
289
+ */
290
+ public function setLoginHint($hint)
291
+ {
292
+ $this->setAuthConfig('login_hint', $hint);
293
+ }
294
+
295
+ /**
296
+ * Set the developer key for the auth class. Note that this is separate value
297
+ * from the client ID - if it looks like a URL, its a client ID!
298
+ * @param $key string - the API console developer key
299
+ */
300
+ public function setDeveloperKey($key)
301
+ {
302
+ $this->setAuthConfig('developer_key', $key);
303
+ }
304
+
305
+ /**
306
+ * @return string the base URL to use for API calls
307
+ */
308
+ public function getBasePath()
309
+ {
310
+ return $this->configuration['base_path'];
311
+ }
312
+
313
+ /**
314
+ * Set the auth configuration for the current auth class.
315
+ * @param $key - the key to set
316
+ * @param $value - the parameter value
317
+ */
318
+ private function setAuthConfig($key, $value)
319
+ {
320
+ if (!isset($this->configuration['classes'][$this->getAuthClass()])) {
321
+ $this->configuration['classes'][$this->getAuthClass()] = array();
322
+ }
323
+ $this->configuration['classes'][$this->getAuthClass()][$key] = $value;
324
+ }
325
+ }
google/Exception.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ class Google_Exception extends Exception
19
+ {
20
+ }
google/Http/Batch.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Client.php";
19
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
20
+ require_once APSL_PLUGIN_DIR."google/Http/REST.php";
21
+
22
+ /**
23
+ * @author Chirag Shah <chirags@google.com>
24
+ */
25
+ class Google_Http_Batch
26
+ {
27
+ /** @var string Multipart Boundary. */
28
+ private $boundary;
29
+
30
+ /** @var array service requests to be executed. */
31
+ private $requests = array();
32
+
33
+ /** @var Google_Client */
34
+ private $client;
35
+
36
+ private $expected_classes = array();
37
+
38
+ private $base_path;
39
+
40
+ public function __construct(Google_Client $client, $boundary = false)
41
+ {
42
+ $this->client = $client;
43
+ $this->base_path = $this->client->getBasePath();
44
+ $this->expected_classes = array();
45
+ $boundary = (false == $boundary) ? mt_rand() : $boundary;
46
+ $this->boundary = str_replace('"', '', $boundary);
47
+ }
48
+
49
+ public function add(Google_Http_Request $request, $key = false)
50
+ {
51
+ if (false == $key) {
52
+ $key = mt_rand();
53
+ }
54
+
55
+ $this->requests[$key] = $request;
56
+ }
57
+
58
+ public function execute()
59
+ {
60
+ $body = '';
61
+
62
+ /** @var Google_Http_Request $req */
63
+ foreach ($this->requests as $key => $req) {
64
+ $body .= "--{$this->boundary}\n";
65
+ $body .= $req->toBatchString($key) . "\n";
66
+ $this->expected_classes["response-" . $key] = $req->getExpectedClass();
67
+ }
68
+
69
+ $body = rtrim($body);
70
+ $body .= "\n--{$this->boundary}--";
71
+
72
+ $url = $this->base_path . '/batch';
73
+ $httpRequest = new Google_Http_Request($url, 'POST');
74
+ $httpRequest->setRequestHeaders(
75
+ array('Content-Type' => 'multipart/mixed; boundary=' . $this->boundary)
76
+ );
77
+
78
+ $httpRequest->setPostBody($body);
79
+ $response = $this->client->getIo()->makeRequest($httpRequest);
80
+
81
+ return $this->parseResponse($response);
82
+ }
83
+
84
+ public function parseResponse(Google_Http_Request $response)
85
+ {
86
+ $contentType = $response->getResponseHeader('content-type');
87
+ $contentType = explode(';', $contentType);
88
+ $boundary = false;
89
+ foreach ($contentType as $part) {
90
+ $part = (explode('=', $part, 2));
91
+ if (isset($part[0]) && 'boundary' == trim($part[0])) {
92
+ $boundary = $part[1];
93
+ }
94
+ }
95
+
96
+ $body = $response->getResponseBody();
97
+ if ($body) {
98
+ $body = str_replace("--$boundary--", "--$boundary", $body);
99
+ $parts = explode("--$boundary", $body);
100
+ $responses = array();
101
+
102
+ foreach ($parts as $part) {
103
+ $part = trim($part);
104
+ if (!empty($part)) {
105
+ list($metaHeaders, $part) = explode("\r\n\r\n", $part, 2);
106
+ $metaHeaders = $this->client->getIo()->getHttpResponseHeaders($metaHeaders);
107
+
108
+ $status = substr($part, 0, strpos($part, "\n"));
109
+ $status = explode(" ", $status);
110
+ $status = $status[1];
111
+
112
+ list($partHeaders, $partBody) = $this->client->getIo()->ParseHttpResponse($part, false);
113
+ $response = new Google_Http_Request("");
114
+ $response->setResponseHttpCode($status);
115
+ $response->setResponseHeaders($partHeaders);
116
+ $response->setResponseBody($partBody);
117
+
118
+ // Need content id.
119
+ $key = $metaHeaders['content-id'];
120
+
121
+ if (isset($this->expected_classes[$key]) &&
122
+ strlen($this->expected_classes[$key]) > 0) {
123
+ $class = $this->expected_classes[$key];
124
+ $response->setExpectedClass($class);
125
+ }
126
+
127
+ try {
128
+ $response = Google_Http_REST::decodeHttpResponse($response);
129
+ $responses[$key] = $response;
130
+ } catch (Google_Service_Exception $e) {
131
+ // Store the exception as the response, so succesful responses
132
+ // can be processed.
133
+ $responses[$key] = $e;
134
+ }
135
+ }
136
+ }
137
+
138
+ return $responses;
139
+ }
140
+
141
+ return null;
142
+ }
143
+ }
google/Http/CacheParser.php ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
19
+
20
+ /**
21
+ * Implement the caching directives specified in rfc2616. This
22
+ * implementation is guided by the guidance offered in rfc2616-sec13.
23
+ * @author Chirag Shah <chirags@google.com>
24
+ */
25
+ class Google_Http_CacheParser
26
+ {
27
+ public static $CACHEABLE_HTTP_METHODS = array('GET', 'HEAD');
28
+ public static $CACHEABLE_STATUS_CODES = array('200', '203', '300', '301');
29
+
30
+ /**
31
+ * Check if an HTTP request can be cached by a private local cache.
32
+ *
33
+ * @static
34
+ * @param Google_Http_Request $resp
35
+ * @return bool True if the request is cacheable.
36
+ * False if the request is uncacheable.
37
+ */
38
+ public static function isRequestCacheable(Google_Http_Request $resp)
39
+ {
40
+ $method = $resp->getRequestMethod();
41
+ if (! in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
42
+ return false;
43
+ }
44
+
45
+ // Don't cache authorized requests/responses.
46
+ // [rfc2616-14.8] When a shared cache receives a request containing an
47
+ // Authorization field, it MUST NOT return the corresponding response
48
+ // as a reply to any other request...
49
+ if ($resp->getRequestHeader("authorization")) {
50
+ return false;
51
+ }
52
+
53
+ return true;
54
+ }
55
+
56
+ /**
57
+ * Check if an HTTP response can be cached by a private local cache.
58
+ *
59
+ * @static
60
+ * @param Google_Http_Request $resp
61
+ * @return bool True if the response is cacheable.
62
+ * False if the response is un-cacheable.
63
+ */
64
+ public static function isResponseCacheable(Google_Http_Request $resp)
65
+ {
66
+ // First, check if the HTTP request was cacheable before inspecting the
67
+ // HTTP response.
68
+ if (false == self::isRequestCacheable($resp)) {
69
+ return false;
70
+ }
71
+
72
+ $code = $resp->getResponseHttpCode();
73
+ if (! in_array($code, self::$CACHEABLE_STATUS_CODES)) {
74
+ return false;
75
+ }
76
+
77
+ // The resource is uncacheable if the resource is already expired and
78
+ // the resource doesn't have an ETag for revalidation.
79
+ $etag = $resp->getResponseHeader("etag");
80
+ if (self::isExpired($resp) && $etag == false) {
81
+ return false;
82
+ }
83
+
84
+ // [rfc2616-14.9.2] If [no-store is] sent in a response, a cache MUST NOT
85
+ // store any part of either this response or the request that elicited it.
86
+ $cacheControl = $resp->getParsedCacheControl();
87
+ if (isset($cacheControl['no-store'])) {
88
+ return false;
89
+ }
90
+
91
+ // Pragma: no-cache is an http request directive, but is occasionally
92
+ // used as a response header incorrectly.
93
+ $pragma = $resp->getResponseHeader('pragma');
94
+ if ($pragma == 'no-cache' || strpos($pragma, 'no-cache') !== false) {
95
+ return false;
96
+ }
97
+
98
+ // [rfc2616-14.44] Vary: * is extremely difficult to cache. "It implies that
99
+ // a cache cannot determine from the request headers of a subsequent request
100
+ // whether this response is the appropriate representation."
101
+ // Given this, we deem responses with the Vary header as uncacheable.
102
+ $vary = $resp->getResponseHeader('vary');
103
+ if ($vary) {
104
+ return false;
105
+ }
106
+
107
+ return true;
108
+ }
109
+
110
+ /**
111
+ * @static
112
+ * @param Google_Http_Request $resp
113
+ * @return bool True if the HTTP response is considered to be expired.
114
+ * False if it is considered to be fresh.
115
+ */
116
+ public static function isExpired(Google_Http_Request $resp)
117
+ {
118
+ // HTTP/1.1 clients and caches MUST treat other invalid date formats,
119
+ // especially including the value “0”, as in the past.
120
+ $parsedExpires = false;
121
+ $responseHeaders = $resp->getResponseHeaders();
122
+
123
+ if (isset($responseHeaders['expires'])) {
124
+ $rawExpires = $responseHeaders['expires'];
125
+ // Check for a malformed expires header first.
126
+ if (empty($rawExpires) || (is_numeric($rawExpires) && $rawExpires <= 0)) {
127
+ return true;
128
+ }
129
+
130
+ // See if we can parse the expires header.
131
+ $parsedExpires = strtotime($rawExpires);
132
+ if (false == $parsedExpires || $parsedExpires <= 0) {
133
+ return true;
134
+ }
135
+ }
136
+
137
+ // Calculate the freshness of an http response.
138
+ $freshnessLifetime = false;
139
+ $cacheControl = $resp->getParsedCacheControl();
140
+ if (isset($cacheControl['max-age'])) {
141
+ $freshnessLifetime = $cacheControl['max-age'];
142
+ }
143
+
144
+ $rawDate = $resp->getResponseHeader('date');
145
+ $parsedDate = strtotime($rawDate);
146
+
147
+ if (empty($rawDate) || false == $parsedDate) {
148
+ // We can't default this to now, as that means future cache reads
149
+ // will always pass with the logic below, so we will require a
150
+ // date be injected if not supplied.
151
+ throw new Google_Exception("All cacheable requests must have creation dates.");
152
+ }
153
+
154
+ if (false == $freshnessLifetime && isset($responseHeaders['expires'])) {
155
+ $freshnessLifetime = $parsedExpires - $parsedDate;
156
+ }
157
+
158
+ if (false == $freshnessLifetime) {
159
+ return true;
160
+ }
161
+
162
+ // Calculate the age of an http response.
163
+ $age = max(0, time() - $parsedDate);
164
+ if (isset($responseHeaders['age'])) {
165
+ $age = max($age, strtotime($responseHeaders['age']));
166
+ }
167
+
168
+ return $freshnessLifetime <= $age;
169
+ }
170
+
171
+ /**
172
+ * Determine if a cache entry should be revalidated with by the origin.
173
+ *
174
+ * @param Google_Http_Request $response
175
+ * @return bool True if the entry is expired, else return false.
176
+ */
177
+ public static function mustRevalidate(Google_Http_Request $response)
178
+ {
179
+ // [13.3] When a cache has a stale entry that it would like to use as a
180
+ // response to a client's request, it first has to check with the origin
181
+ // server to see if its cached entry is still usable.
182
+ return self::isExpired($response);
183
+ }
184
+ }
google/Http/MediaFileUpload.php ADDED
@@ -0,0 +1,292 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Client.php";
19
+ require_once APSL_PLUGIN_DIR."google/Exception.php";
20
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
21
+ require_once APSL_PLUGIN_DIR."google/Http/REST.php";
22
+ require_once APSL_PLUGIN_DIR."google/Utils.php";
23
+
24
+ /**
25
+ * @author Chirag Shah <chirags@google.com>
26
+ *
27
+ */
28
+ class Google_Http_MediaFileUpload
29
+ {
30
+ const UPLOAD_MEDIA_TYPE = 'media';
31
+ const UPLOAD_MULTIPART_TYPE = 'multipart';
32
+ const UPLOAD_RESUMABLE_TYPE = 'resumable';
33
+
34
+ /** @var string $mimeType */
35
+ private $mimeType;
36
+
37
+ /** @var string $data */
38
+ private $data;
39
+
40
+ /** @var bool $resumable */
41
+ private $resumable;
42
+
43
+ /** @var int $chunkSize */
44
+ private $chunkSize;
45
+
46
+ /** @var int $size */
47
+ private $size;
48
+
49
+ /** @var string $resumeUri */
50
+ private $resumeUri;
51
+
52
+ /** @var int $progress */
53
+ private $progress;
54
+
55
+ /** @var Google_Client */
56
+ private $client;
57
+
58
+ /** @var Google_Http_Request */
59
+ private $request;
60
+
61
+ /** @var string */
62
+ private $boundary;
63
+
64
+ /**
65
+ * Result code from last HTTP call
66
+ * @var int
67
+ */
68
+ private $httpResultCode;
69
+
70
+ /**
71
+ * @param $mimeType string
72
+ * @param $data string The bytes you want to upload.
73
+ * @param $resumable bool
74
+ * @param bool $chunkSize File will be uploaded in chunks of this many bytes.
75
+ * only used if resumable=True
76
+ */
77
+ public function __construct(
78
+ Google_Client $client,
79
+ Google_Http_Request $request,
80
+ $mimeType,
81
+ $data,
82
+ $resumable = false,
83
+ $chunkSize = false,
84
+ $boundary = false
85
+ ) {
86
+ $this->client = $client;
87
+ $this->request = $request;
88
+ $this->mimeType = $mimeType;
89
+ $this->data = $data;
90
+ $this->size = strlen($this->data);
91
+ $this->resumable = $resumable;
92
+ if (!$chunkSize) {
93
+ $chunkSize = 256 * 1024;
94
+ }
95
+ $this->chunkSize = $chunkSize;
96
+ $this->progress = 0;
97
+ $this->boundary = $boundary;
98
+
99
+ // Process Media Request
100
+ $this->process();
101
+ }
102
+
103
+ /**
104
+ * Set the size of the file that is being uploaded.
105
+ * @param $size - int file size in bytes
106
+ */
107
+ public function setFileSize($size)
108
+ {
109
+ $this->size = $size;
110
+ }
111
+
112
+ /**
113
+ * Return the progress on the upload
114
+ * @return int progress in bytes uploaded.
115
+ */
116
+ public function getProgress()
117
+ {
118
+ return $this->progress;
119
+ }
120
+
121
+ /**
122
+ * Return the HTTP result code from the last call made.
123
+ * @return int code
124
+ */
125
+ public function getHttpResultCode()
126
+ {
127
+ return $this->httpResultCode;
128
+ }
129
+
130
+ /**
131
+ * Send the next part of the file to upload.
132
+ * @param [$chunk] the next set of bytes to send. If false will used $data passed
133
+ * at construct time.
134
+ */
135
+ public function nextChunk($chunk = false)
136
+ {
137
+ if (false == $this->resumeUri) {
138
+ $this->resumeUri = $this->getResumeUri();
139
+ }
140
+
141
+ if (false == $chunk) {
142
+ $chunk = substr($this->data, $this->progress, $this->chunkSize);
143
+ }
144
+
145
+ $lastBytePos = $this->progress + strlen($chunk) - 1;
146
+ $headers = array(
147
+ 'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
148
+ 'content-type' => $this->request->getRequestHeader('content-type'),
149
+ 'content-length' => $this->chunkSize,
150
+ 'expect' => '',
151
+ );
152
+
153
+ $httpRequest = new Google_Http_Request(
154
+ $this->resumeUri,
155
+ 'PUT',
156
+ $headers,
157
+ $chunk
158
+ );
159
+
160
+ if ($this->client->getClassConfig("Google_Http_Request", "enable_gzip_for_uploads")) {
161
+ $httpRequest->enableGzip();
162
+ } else {
163
+ $httpRequest->disableGzip();
164
+ }
165
+
166
+ $response = $this->client->getIo()->makeRequest($httpRequest);
167
+ $response->setExpectedClass($this->request->getExpectedClass());
168
+ $code = $response->getResponseHttpCode();
169
+ $this->httpResultCode = $code;
170
+
171
+ if (308 == $code) {
172
+ // Track the amount uploaded.
173
+ $range = explode('-', $response->getResponseHeader('range'));
174
+ $this->progress = $range[1] + 1;
175
+
176
+ // Allow for changing upload URLs.
177
+ $location = $response->getResponseHeader('location');
178
+ if ($location) {
179
+ $this->resumeUri = $location;
180
+ }
181
+
182
+ // No problems, but upload not complete.
183
+ return false;
184
+ } else {
185
+ return Google_Http_REST::decodeHttpResponse($response);
186
+ }
187
+ }
188
+
189
+ /**
190
+ * @param $meta
191
+ * @param $params
192
+ * @return array|bool
193
+ * @visible for testing
194
+ */
195
+ private function process()
196
+ {
197
+ $postBody = false;
198
+ $contentType = false;
199
+
200
+ $meta = $this->request->getPostBody();
201
+ $meta = is_string($meta) ? json_decode($meta, true) : $meta;
202
+
203
+ $uploadType = $this->getUploadType($meta);
204
+ $this->request->setQueryParam('uploadType', $uploadType);
205
+ $this->transformToUploadUrl();
206
+ $mimeType = $this->mimeType ?
207
+ $this->mimeType :
208
+ $this->request->getRequestHeader('content-type');
209
+
210
+ if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
211
+ $contentType = $mimeType;
212
+ $postBody = is_string($meta) ? $meta : json_encode($meta);
213
+ } else if (self::UPLOAD_MEDIA_TYPE == $uploadType) {
214
+ $contentType = $mimeType;
215
+ $postBody = $this->data;
216
+ } else if (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
217
+ // This is a multipart/related upload.
218
+ $boundary = $this->boundary ? $this->boundary : mt_rand();
219
+ $boundary = str_replace('"', '', $boundary);
220
+ $contentType = 'multipart/related; boundary=' . $boundary;
221
+ $related = "--$boundary\r\n";
222
+ $related .= "Content-Type: application/json; charset=UTF-8\r\n";
223
+ $related .= "\r\n" . json_encode($meta) . "\r\n";
224
+ $related .= "--$boundary\r\n";
225
+ $related .= "Content-Type: $mimeType\r\n";
226
+ $related .= "Content-Transfer-Encoding: base64\r\n";
227
+ $related .= "\r\n" . base64_encode($this->data) . "\r\n";
228
+ $related .= "--$boundary--";
229
+ $postBody = $related;
230
+ }
231
+
232
+ $this->request->setPostBody($postBody);
233
+
234
+ if (isset($contentType) && $contentType) {
235
+ $contentTypeHeader['content-type'] = $contentType;
236
+ $this->request->setRequestHeaders($contentTypeHeader);
237
+ }
238
+ }
239
+
240
+ private function transformToUploadUrl()
241
+ {
242
+ $base = $this->request->getBaseComponent();
243
+ $this->request->setBaseComponent($base . '/upload');
244
+ }
245
+
246
+ /**
247
+ * Valid upload types:
248
+ * - resumable (UPLOAD_RESUMABLE_TYPE)
249
+ * - media (UPLOAD_MEDIA_TYPE)
250
+ * - multipart (UPLOAD_MULTIPART_TYPE)
251
+ * @param $meta
252
+ * @return string
253
+ * @visible for testing
254
+ */
255
+ public function getUploadType($meta)
256
+ {
257
+ if ($this->resumable) {
258
+ return self::UPLOAD_RESUMABLE_TYPE;
259
+ }
260
+
261
+ if (false == $meta && $this->data) {
262
+ return self::UPLOAD_MEDIA_TYPE;
263
+ }
264
+
265
+ return self::UPLOAD_MULTIPART_TYPE;
266
+ }
267
+
268
+ private function getResumeUri()
269
+ {
270
+ $result = null;
271
+ $body = $this->request->getPostBody();
272
+ if ($body) {
273
+ $headers = array(
274
+ 'content-type' => 'application/json; charset=UTF-8',
275
+ 'content-length' => Google_Utils::getStrLen($body),
276
+ 'x-upload-content-type' => $this->mimeType,
277
+ 'x-upload-content-length' => $this->size,
278
+ 'expect' => '',
279
+ );
280
+ $this->request->setRequestHeaders($headers);
281
+ }
282
+
283
+ $response = $this->client->getIo()->makeRequest($this->request);
284
+ $location = $response->getResponseHeader('location');
285
+ $code = $response->getResponseHttpCode();
286
+
287
+ if (200 == $code && true == $location) {
288
+ return $location;
289
+ }
290
+ throw new Google_Exception("Failed to start the resumable upload");
291
+ }
292
+ }
google/Http/REST.php ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Client.php";
19
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
20
+ require_once APSL_PLUGIN_DIR."google/Service/Exception.php";
21
+ require_once APSL_PLUGIN_DIR."google/Utils/URITemplate.php";
22
+
23
+ /**
24
+ * This class implements the RESTful transport of apiServiceRequest()'s
25
+ *
26
+ * @author Chris Chabot <chabotc@google.com>
27
+ * @author Chirag Shah <chirags@google.com>
28
+ */
29
+ class Google_Http_REST
30
+ {
31
+ /**
32
+ * Executes a Google_Http_Request
33
+ *
34
+ * @param Google_Client $client
35
+ * @param Google_Http_Request $req
36
+ * @return array decoded result
37
+ * @throws Google_Service_Exception on server side error (ie: not authenticated,
38
+ * invalid or malformed post body, invalid url)
39
+ */
40
+ public static function execute(Google_Client $client, Google_Http_Request $req)
41
+ {
42
+ $httpRequest = $client->getIo()->makeRequest($req);
43
+ $httpRequest->setExpectedClass($req->getExpectedClass());
44
+ return self::decodeHttpResponse($httpRequest);
45
+ }
46
+
47
+ /**
48
+ * Decode an HTTP Response.
49
+ * @static
50
+ * @throws Google_Service_Exception
51
+ * @param Google_Http_Request $response The http response to be decoded.
52
+ * @return mixed|null
53
+ */
54
+ public static function decodeHttpResponse($response)
55
+ {
56
+ $code = $response->getResponseHttpCode();
57
+ $body = $response->getResponseBody();
58
+ $decoded = null;
59
+
60
+ if ((intVal($code)) >= 300) {
61
+ $decoded = json_decode($body, true);
62
+ $err = 'Error calling ' . $response->getRequestMethod() . ' ' . $response->getUrl();
63
+ if (isset($decoded['error']) &&
64
+ isset($decoded['error']['message']) &&
65
+ isset($decoded['error']['code'])) {
66
+ // if we're getting a json encoded error definition, use that instead of the raw response
67
+ // body for improved readability
68
+ $err .= ": ({$decoded['error']['code']}) {$decoded['error']['message']}";
69
+ } else {
70
+ $err .= ": ($code) $body";
71
+ }
72
+
73
+ $errors = null;
74
+ // Specific check for APIs which don't return error details, such as Blogger.
75
+ if (isset($decoded['error']) && isset($decoded['error']['errors'])) {
76
+ $errors = $decoded['error']['errors'];
77
+ }
78
+
79
+ throw new Google_Service_Exception($err, $code, null, $errors);
80
+ }
81
+
82
+ // Only attempt to decode the response, if the response code wasn't (204) 'no content'
83
+ if ($code != '204') {
84
+ $decoded = json_decode($body, true);
85
+ if ($decoded === null || $decoded === "") {
86
+ throw new Google_Service_Exception("Invalid json in service response: $body");
87
+ }
88
+
89
+ if ($response->getExpectedClass()) {
90
+ $class = $response->getExpectedClass();
91
+ $decoded = new $class($decoded);
92
+ }
93
+ }
94
+ return $decoded;
95
+ }
96
+
97
+ /**
98
+ * Parse/expand request parameters and create a fully qualified
99
+ * request uri.
100
+ * @static
101
+ * @param string $servicePath
102
+ * @param string $restPath
103
+ * @param array $params
104
+ * @return string $requestUrl
105
+ */
106
+ public static function createRequestUri($servicePath, $restPath, $params)
107
+ {
108
+ $requestUrl = $servicePath . $restPath;
109
+ $uriTemplateVars = array();
110
+ $queryVars = array();
111
+ foreach ($params as $paramName => $paramSpec) {
112
+ if ($paramSpec['type'] == 'boolean') {
113
+ $paramSpec['value'] = ($paramSpec['value']) ? 'true' : 'false';
114
+ }
115
+ if ($paramSpec['location'] == 'path') {
116
+ $uriTemplateVars[$paramName] = $paramSpec['value'];
117
+ } else if ($paramSpec['location'] == 'query') {
118
+ if (isset($paramSpec['repeated']) && is_array($paramSpec['value'])) {
119
+ foreach ($paramSpec['value'] as $value) {
120
+ $queryVars[] = $paramName . '=' . rawurlencode($value);
121
+ }
122
+ } else {
123
+ $queryVars[] = $paramName . '=' . rawurlencode($paramSpec['value']);
124
+ }
125
+ }
126
+ }
127
+
128
+ if (count($uriTemplateVars)) {
129
+ $uriTemplateParser = new Google_Utils_URITemplate();
130
+ $requestUrl = $uriTemplateParser->parse($requestUrl, $uriTemplateVars);
131
+ }
132
+
133
+ if (count($queryVars)) {
134
+ $requestUrl .= '?' . implode($queryVars, '&');
135
+ }
136
+
137
+ return $requestUrl;
138
+ }
139
+ }
google/Http/Request.php ADDED
@@ -0,0 +1,476 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Utils.php";
19
+
20
+ /**
21
+ * HTTP Request to be executed by IO classes. Upon execution, the
22
+ * responseHttpCode, responseHeaders and responseBody will be filled in.
23
+ *
24
+ * @author Chris Chabot <chabotc@google.com>
25
+ * @author Chirag Shah <chirags@google.com>
26
+ *
27
+ */
28
+ class Google_Http_Request
29
+ {
30
+ const GZIP_UA = " (gzip)";
31
+
32
+ private $batchHeaders = array(
33
+ 'Content-Type' => 'application/http',
34
+ 'Content-Transfer-Encoding' => 'binary',
35
+ 'MIME-Version' => '1.0',
36
+ );
37
+
38
+ protected $queryParams;
39
+ protected $requestMethod;
40
+ protected $requestHeaders;
41
+ protected $baseComponent = null;
42
+ protected $path;
43
+ protected $postBody;
44
+ protected $userAgent;
45
+ protected $canGzip = null;
46
+
47
+ protected $responseHttpCode;
48
+ protected $responseHeaders;
49
+ protected $responseBody;
50
+
51
+ protected $expectedClass;
52
+
53
+ public $accessKey;
54
+
55
+ public function __construct(
56
+ $url,
57
+ $method = 'GET',
58
+ $headers = array(),
59
+ $postBody = null
60
+ ) {
61
+ $this->setUrl($url);
62
+ $this->setRequestMethod($method);
63
+ $this->setRequestHeaders($headers);
64
+ $this->setPostBody($postBody);
65
+ }
66
+
67
+ /**
68
+ * Misc function that returns the base url component of the $url
69
+ * used by the OAuth signing class to calculate the base string
70
+ * @return string The base url component of the $url.
71
+ */
72
+ public function getBaseComponent()
73
+ {
74
+ return $this->baseComponent;
75
+ }
76
+
77
+ /**
78
+ * Set the base URL that path and query parameters will be added to.
79
+ * @param $baseComponent string
80
+ */
81
+ public function setBaseComponent($baseComponent)
82
+ {
83
+ $this->baseComponent = $baseComponent;
84
+ }
85
+
86
+ /**
87
+ * Enable support for gzipped responses with this request.
88
+ */
89
+ public function enableGzip()
90
+ {
91
+ $this->setRequestHeaders(array("Accept-Encoding" => "gzip"));
92
+ $this->canGzip = true;
93
+ $this->setUserAgent($this->userAgent);
94
+ }
95
+
96
+ /**
97
+ * Disable support for gzip responses with this request.
98
+ */
99
+ public function disableGzip()
100
+ {
101
+ if (
102
+ isset($this->requestHeaders['accept-encoding']) &&
103
+ $this->requestHeaders['accept-encoding'] == "gzip"
104
+ ) {
105
+ unset($this->requestHeaders['accept-encoding']);
106
+ }
107
+ $this->canGzip = false;
108
+ $this->userAgent = str_replace(self::GZIP_UA, "", $this->userAgent);
109
+ }
110
+
111
+ /**
112
+ * Can this request accept a gzip response?
113
+ * @return bool
114
+ */
115
+ public function canGzip()
116
+ {
117
+ return $this->canGzip;
118
+ }
119
+
120
+ /**
121
+ * Misc function that returns an array of the query parameters of the current
122
+ * url used by the OAuth signing class to calculate the signature
123
+ * @return array Query parameters in the query string.
124
+ */
125
+ public function getQueryParams()
126
+ {
127
+ return $this->queryParams;
128
+ }
129
+
130
+ /**
131
+ * Set a new query parameter.
132
+ * @param $key - string to set, does not need to be URL encoded
133
+ * @param $value - string to set, does not need to be URL encoded
134
+ */
135
+ public function setQueryParam($key, $value)
136
+ {
137
+ $this->queryParams[$key] = $value;
138
+ }
139
+
140
+ /**
141
+ * @return string HTTP Response Code.
142
+ */
143
+ public function getResponseHttpCode()
144
+ {
145
+ return (int) $this->responseHttpCode;
146
+ }
147
+
148
+ /**
149
+ * @param int $responseHttpCode HTTP Response Code.
150
+ */
151
+ public function setResponseHttpCode($responseHttpCode)
152
+ {
153
+ $this->responseHttpCode = $responseHttpCode;
154
+ }
155
+
156
+ /**
157
+ * @return $responseHeaders (array) HTTP Response Headers.
158
+ */
159
+ public function getResponseHeaders()
160
+ {
161
+ return $this->responseHeaders;
162
+ }
163
+
164
+ /**
165
+ * @return string HTTP Response Body
166
+ */
167
+ public function getResponseBody()
168
+ {
169
+ return $this->responseBody;
170
+ }
171
+
172
+ /**
173
+ * Set the class the response to this request should expect.
174
+ *
175
+ * @param $class string the class name
176
+ */
177
+ public function setExpectedClass($class)
178
+ {
179
+ $this->expectedClass = $class;
180
+ }
181
+
182
+ /**
183
+ * Retrieve the expected class the response should expect.
184
+ * @return string class name
185
+ */
186
+ public function getExpectedClass()
187
+ {
188
+ return $this->expectedClass;
189
+ }
190
+
191
+ /**
192
+ * @param array $headers The HTTP response headers
193
+ * to be normalized.
194
+ */
195
+ public function setResponseHeaders($headers)
196
+ {
197
+ $headers = Google_Utils::normalize($headers);
198
+ if ($this->responseHeaders) {
199
+ $headers = array_merge($this->responseHeaders, $headers);
200
+ }
201
+
202
+ $this->responseHeaders = $headers;
203
+ }
204
+
205
+ /**
206
+ * @param string $key
207
+ * @return array|boolean Returns the requested HTTP header or
208
+ * false if unavailable.
209
+ */
210
+ public function getResponseHeader($key)
211
+ {
212
+ return isset($this->responseHeaders[$key])
213
+ ? $this->responseHeaders[$key]
214
+ : false;
215
+ }
216
+
217
+ /**
218
+ * @param string $responseBody The HTTP response body.
219
+ */
220
+ public function setResponseBody($responseBody)
221
+ {
222
+ $this->responseBody = $responseBody;
223
+ }
224
+
225
+ /**
226
+ * @return string $url The request URL.
227
+ */
228
+ public function getUrl()
229
+ {
230
+ return $this->baseComponent . $this->path .
231
+ (count($this->queryParams) ?
232
+ "?" . $this->buildQuery($this->queryParams) :
233
+ '');
234
+ }
235
+
236
+ /**
237
+ * @return string $method HTTP Request Method.
238
+ */
239
+ public function getRequestMethod()
240
+ {
241
+ return $this->requestMethod;
242
+ }
243
+
244
+ /**
245
+ * @return array $headers HTTP Request Headers.
246
+ */
247
+ public function getRequestHeaders()
248
+ {
249
+ return $this->requestHeaders;
250
+ }
251
+
252
+ /**
253
+ * @param string $key
254
+ * @return array|boolean Returns the requested HTTP header or
255
+ * false if unavailable.
256
+ */
257
+ public function getRequestHeader($key)
258
+ {
259
+ return isset($this->requestHeaders[$key])
260
+ ? $this->requestHeaders[$key]
261
+ : false;
262
+ }
263
+
264
+ /**
265
+ * @return string $postBody HTTP Request Body.
266
+ */
267
+ public function getPostBody()
268
+ {
269
+ return $this->postBody;
270
+ }
271
+
272
+ /**
273
+ * @param string $url the url to set
274
+ */
275
+ public function setUrl($url)
276
+ {
277
+ if (substr($url, 0, 4) != 'http') {
278
+ // Force the path become relative.
279
+ if (substr($url, 0, 1) !== '/') {
280
+ $url = '/' . $url;
281
+ }
282
+ }
283
+ $parts = parse_url($url);
284
+ if (isset($parts['host'])) {
285
+ $this->baseComponent = sprintf(
286
+ "%s%s%s",
287
+ isset($parts['scheme']) ? $parts['scheme'] . "://" : '',
288
+ isset($parts['host']) ? $parts['host'] : '',
289
+ isset($parts['port']) ? ":" . $parts['port'] : ''
290
+ );
291
+ }
292
+ $this->path = isset($parts['path']) ? $parts['path'] : '';
293
+ $this->queryParams = array();
294
+ if (isset($parts['query'])) {
295
+ $this->queryParams = $this->parseQuery($parts['query']);
296
+ }
297
+ }
298
+
299
+ /**
300
+ * @param string $method Set he HTTP Method and normalize
301
+ * it to upper-case, as required by HTTP.
302
+ *
303
+ */
304
+ public function setRequestMethod($method)
305
+ {
306
+ $this->requestMethod = strtoupper($method);
307
+ }
308
+
309
+ /**
310
+ * @param array $headers The HTTP request headers
311
+ * to be set and normalized.
312
+ */
313
+ public function setRequestHeaders($headers)
314
+ {
315
+ $headers = Google_Utils::normalize($headers);
316
+ if ($this->requestHeaders) {
317
+ $headers = array_merge($this->requestHeaders, $headers);
318
+ }
319
+ $this->requestHeaders = $headers;
320
+ }
321
+
322
+ /**
323
+ * @param string $postBody the postBody to set
324
+ */
325
+ public function setPostBody($postBody)
326
+ {
327
+ $this->postBody = $postBody;
328
+ }
329
+
330
+ /**
331
+ * Set the User-Agent Header.
332
+ * @param string $userAgent The User-Agent.
333
+ */
334
+ public function setUserAgent($userAgent)
335
+ {
336
+ $this->userAgent = $userAgent;
337
+ if ($this->canGzip) {
338
+ $this->userAgent = $userAgent . self::GZIP_UA;
339
+ }
340
+ }
341
+
342
+ /**
343
+ * @return string The User-Agent.
344
+ */
345
+ public function getUserAgent()
346
+ {
347
+ return $this->userAgent;
348
+ }
349
+
350
+ /**
351
+ * Returns a cache key depending on if this was an OAuth signed request
352
+ * in which case it will use the non-signed url and access key to make this
353
+ * cache key unique per authenticated user, else use the plain request url
354
+ * @return string The md5 hash of the request cache key.
355
+ */
356
+ public function getCacheKey()
357
+ {
358
+ $key = $this->getUrl();
359
+
360
+ if (isset($this->accessKey)) {
361
+ $key .= $this->accessKey;
362
+ }
363
+
364
+ if (isset($this->requestHeaders['authorization'])) {
365
+ $key .= $this->requestHeaders['authorization'];
366
+ }
367
+
368
+ return md5($key);
369
+ }
370
+
371
+ public function getParsedCacheControl()
372
+ {
373
+ $parsed = array();
374
+ $rawCacheControl = $this->getResponseHeader('cache-control');
375
+ if ($rawCacheControl) {
376
+ $rawCacheControl = str_replace(', ', '&', $rawCacheControl);
377
+ parse_str($rawCacheControl, $parsed);
378
+ }
379
+
380
+ return $parsed;
381
+ }
382
+
383
+ /**
384
+ * @param string $id
385
+ * @return string A string representation of the HTTP Request.
386
+ */
387
+ public function toBatchString($id)
388
+ {
389
+ $str = '';
390
+ $path = parse_url($this->getUrl(), PHP_URL_PATH) . "?" .
391
+ http_build_query($this->queryParams);
392
+ $str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
393
+
394
+ foreach ($this->getRequestHeaders() as $key => $val) {
395
+ $str .= $key . ': ' . $val . "\n";
396
+ }
397
+
398
+ if ($this->getPostBody()) {
399
+ $str .= "\n";
400
+ $str .= $this->getPostBody();
401
+ }
402
+
403
+ $headers = '';
404
+ foreach ($this->batchHeaders as $key => $val) {
405
+ $headers .= $key . ': ' . $val . "\n";
406
+ }
407
+
408
+ $headers .= "Content-ID: $id\n";
409
+ $str = $headers . "\n" . $str;
410
+
411
+ return $str;
412
+ }
413
+
414
+ /**
415
+ * Our own version of parse_str that allows for multiple variables
416
+ * with the same name.
417
+ * @param $string - the query string to parse
418
+ */
419
+ private function parseQuery($string)
420
+ {
421
+ $return = array();
422
+ $parts = explode("&", $string);
423
+ foreach ($parts as $part) {
424
+ list($key, $value) = explode('=', $part, 2);
425
+ $value = urldecode($value);
426
+ if (isset($return[$key])) {
427
+ if (!is_array($return[$key])) {
428
+ $return[$key] = array($return[$key]);
429
+ }
430
+ $return[$key][] = $value;
431
+ } else {
432
+ $return[$key] = $value;
433
+ }
434
+ }
435
+ return $return;
436
+ }
437
+
438
+ /**
439
+ * A version of build query that allows for multiple
440
+ * duplicate keys.
441
+ * @param $parts array of key value pairs
442
+ */
443
+ private function buildQuery($parts)
444
+ {
445
+ $return = array();
446
+ foreach ($parts as $key => $value) {
447
+ if (is_array($value)) {
448
+ foreach ($value as $v) {
449
+ $return[] = urlencode($key) . "=" . urlencode($v);
450
+ }
451
+ } else {
452
+ $return[] = urlencode($key) . "=" . urlencode($value);
453
+ }
454
+ }
455
+ return implode('&', $return);
456
+ }
457
+
458
+ /**
459
+ * If we're POSTing and have no body to send, we can send the query
460
+ * parameters in there, which avoids length issues with longer query
461
+ * params.
462
+ */
463
+ public function maybeMoveParametersToBody()
464
+ {
465
+ if ($this->getRequestMethod() == "POST" && empty($this->postBody)) {
466
+ $this->setRequestHeaders(
467
+ array(
468
+ "content-type" =>
469
+ "application/x-www-form-urlencoded; charset=UTF-8"
470
+ )
471
+ );
472
+ $this->setPostBody($this->buildQuery($this->queryParams));
473
+ $this->queryParams = array();
474
+ }
475
+ }
476
+ }
google/IO/Abstract.php ADDED
@@ -0,0 +1,322 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Abstract IO base class
20
+ */
21
+
22
+ require_once APSL_PLUGIN_DIR."google/Client.php";
23
+ require_once APSL_PLUGIN_DIR."google/IO/Exception.php";
24
+ require_once APSL_PLUGIN_DIR."google/Http/CacheParser.php";
25
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
26
+
27
+ abstract class Google_IO_Abstract
28
+ {
29
+ const UNKNOWN_CODE = 0;
30
+ const FORM_URLENCODED = 'application/x-www-form-urlencoded';
31
+ const CONNECTION_ESTABLISHED = "HTTP/1.0 200 Connection established\r\n\r\n";
32
+ private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
33
+
34
+ /** @var Google_Client */
35
+ protected $client;
36
+
37
+ public function __construct(Google_Client $client)
38
+ {
39
+ $this->client = $client;
40
+ $timeout = $client->getClassConfig('Google_IO_Abstract', 'request_timeout_seconds');
41
+ if ($timeout > 0) {
42
+ $this->setTimeout($timeout);
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Executes a Google_Http_Request and returns the resulting populated Google_Http_Request
48
+ * @param Google_Http_Request $request
49
+ * @return Google_Http_Request $request
50
+ */
51
+ abstract public function executeRequest(Google_Http_Request $request);
52
+
53
+ /**
54
+ * Set options that update the transport implementation's behavior.
55
+ * @param $options
56
+ */
57
+ abstract public function setOptions($options);
58
+
59
+ /**
60
+ * Set the maximum request time in seconds.
61
+ * @param $timeout in seconds
62
+ */
63
+ abstract public function setTimeout($timeout);
64
+
65
+ /**
66
+ * Get the maximum request time in seconds.
67
+ * @return timeout in seconds
68
+ */
69
+ abstract public function getTimeout();
70
+
71
+ /**
72
+ * Test for the presence of a cURL header processing bug
73
+ *
74
+ * The cURL bug was present in versions prior to 7.30.0 and caused the header
75
+ * length to be miscalculated when a "Connection established" header added by
76
+ * some proxies was present.
77
+ *
78
+ * @return boolean
79
+ */
80
+ abstract protected function needsQuirk();
81
+
82
+ /**
83
+ * @visible for testing.
84
+ * Cache the response to an HTTP request if it is cacheable.
85
+ * @param Google_Http_Request $request
86
+ * @return bool Returns true if the insertion was successful.
87
+ * Otherwise, return false.
88
+ */
89
+ public function setCachedRequest(Google_Http_Request $request)
90
+ {
91
+ // Determine if the request is cacheable.
92
+ if (Google_Http_CacheParser::isResponseCacheable($request)) {
93
+ $this->client->getCache()->set($request->getCacheKey(), $request);
94
+ return true;
95
+ }
96
+
97
+ return false;
98
+ }
99
+
100
+ /**
101
+ * Execute an HTTP Request
102
+ *
103
+ * @param Google_HttpRequest $request the http request to be executed
104
+ * @return Google_HttpRequest http request with the response http code,
105
+ * response headers and response body filled in
106
+ * @throws Google_IO_Exception on curl or IO error
107
+ */
108
+ public function makeRequest(Google_Http_Request $request)
109
+ {
110
+ // First, check to see if we have a valid cached version.
111
+ $cached = $this->getCachedRequest($request);
112
+ if ($cached !== false && $cached instanceof Google_Http_Request) {
113
+ if (!$this->checkMustRevalidateCachedRequest($cached, $request)) {
114
+ return $cached;
115
+ }
116
+ }
117
+
118
+ if (array_key_exists($request->getRequestMethod(), self::$ENTITY_HTTP_METHODS)) {
119
+ $request = $this->processEntityRequest($request);
120
+ }
121
+
122
+ list($responseData, $responseHeaders, $respHttpCode) = $this->executeRequest($request);
123
+
124
+ if ($respHttpCode == 304 && $cached) {
125
+ // If the server responded NOT_MODIFIED, return the cached request.
126
+ $this->updateCachedRequest($cached, $responseHeaders);
127
+ return $cached;
128
+ }
129
+
130
+ if (!isset($responseHeaders['Date']) && !isset($responseHeaders['date'])) {
131
+ $responseHeaders['Date'] = date("r");
132
+ }
133
+
134
+ $request->setResponseHttpCode($respHttpCode);
135
+ $request->setResponseHeaders($responseHeaders);
136
+ $request->setResponseBody($responseData);
137
+ // Store the request in cache (the function checks to see if the request
138
+ // can actually be cached)
139
+ $this->setCachedRequest($request);
140
+ return $request;
141
+ }
142
+
143
+ /**
144
+ * @visible for testing.
145
+ * @param Google_Http_Request $request
146
+ * @return Google_Http_Request|bool Returns the cached object or
147
+ * false if the operation was unsuccessful.
148
+ */
149
+ public function getCachedRequest(Google_Http_Request $request)
150
+ {
151
+ if (false === Google_Http_CacheParser::isRequestCacheable($request)) {
152
+ return false;
153
+ }
154
+
155
+ return $this->client->getCache()->get($request->getCacheKey());
156
+ }
157
+
158
+ /**
159
+ * @visible for testing
160
+ * Process an http request that contains an enclosed entity.
161
+ * @param Google_Http_Request $request
162
+ * @return Google_Http_Request Processed request with the enclosed entity.
163
+ */
164
+ public function processEntityRequest(Google_Http_Request $request)
165
+ {
166
+ $postBody = $request->getPostBody();
167
+ $contentType = $request->getRequestHeader("content-type");
168
+
169
+ // Set the default content-type as application/x-www-form-urlencoded.
170
+ if (false == $contentType) {
171
+ $contentType = self::FORM_URLENCODED;
172
+ $request->setRequestHeaders(array('content-type' => $contentType));
173
+ }
174
+
175
+ // Force the payload to match the content-type asserted in the header.
176
+ if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
177
+ $postBody = http_build_query($postBody, '', '&');
178
+ $request->setPostBody($postBody);
179
+ }
180
+
181
+ // Make sure the content-length header is set.
182
+ if (!$postBody || is_string($postBody)) {
183
+ $postsLength = strlen($postBody);
184
+ $request->setRequestHeaders(array('content-length' => $postsLength));
185
+ }
186
+
187
+ return $request;
188
+ }
189
+
190
+ /**
191
+ * Check if an already cached request must be revalidated, and if so update
192
+ * the request with the correct ETag headers.
193
+ * @param Google_Http_Request $cached A previously cached response.
194
+ * @param Google_Http_Request $request The outbound request.
195
+ * return bool If the cached object needs to be revalidated, false if it is
196
+ * still current and can be re-used.
197
+ */
198
+ protected function checkMustRevalidateCachedRequest($cached, $request)
199
+ {
200
+ if (Google_Http_CacheParser::mustRevalidate($cached)) {
201
+ $addHeaders = array();
202
+ if ($cached->getResponseHeader('etag')) {
203
+ // [13.3.4] If an entity tag has been provided by the origin server,
204
+ // we must use that entity tag in any cache-conditional request.
205
+ $addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
206
+ } elseif ($cached->getResponseHeader('date')) {
207
+ $addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
208
+ }
209
+
210
+ $request->setRequestHeaders($addHeaders);
211
+ return true;
212
+ } else {
213
+ return false;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Update a cached request, using the headers from the last response.
219
+ * @param Google_HttpRequest $cached A previously cached response.
220
+ * @param mixed Associative array of response headers from the last request.
221
+ */
222
+ protected function updateCachedRequest($cached, $responseHeaders)
223
+ {
224
+ if (isset($responseHeaders['connection'])) {
225
+ $hopByHop = array_merge(
226
+ self::$HOP_BY_HOP,
227
+ explode(
228
+ ',',
229
+ $responseHeaders['connection']
230
+ )
231
+ );
232
+
233
+ $endToEnd = array();
234
+ foreach ($hopByHop as $key) {
235
+ if (isset($responseHeaders[$key])) {
236
+ $endToEnd[$key] = $responseHeaders[$key];
237
+ }
238
+ }
239
+ $cached->setResponseHeaders($endToEnd);
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Used by the IO lib and also the batch processing.
245
+ *
246
+ * @param $respData
247
+ * @param $headerSize
248
+ * @return array
249
+ */
250
+ public function parseHttpResponse($respData, $headerSize)
251
+ {
252
+ if (stripos($respData, self::CONNECTION_ESTABLISHED) !== false) {
253
+ $respData = str_ireplace(self::CONNECTION_ESTABLISHED, '', $respData);
254
+
255
+ // Subtract the proxy header size unless the cURL bug prior to 7.30.0
256
+ // is present which prevented the proxy header size from being taken into
257
+ // account.
258
+ if (!$this->needsQuirk()) {
259
+ $headerSize -= strlen(self::CONNECTION_ESTABLISHED);
260
+ }
261
+ }
262
+
263
+ if ($headerSize) {
264
+ $responseBody = substr($respData, $headerSize);
265
+ $responseHeaders = substr($respData, 0, $headerSize);
266
+ } else {
267
+ list($responseHeaders, $responseBody) = explode("\r\n\r\n", $respData, 2);
268
+ }
269
+
270
+ $responseHeaders = $this->getHttpResponseHeaders($responseHeaders);
271
+ return array($responseHeaders, $responseBody);
272
+ }
273
+
274
+ /**
275
+ * Parse out headers from raw headers
276
+ * @param rawHeaders array or string
277
+ * @return array
278
+ */
279
+ public function getHttpResponseHeaders($rawHeaders)
280
+ {
281
+ if (is_array($rawHeaders)) {
282
+ return $this->parseArrayHeaders($rawHeaders);
283
+ } else {
284
+ return $this->parseStringHeaders($rawHeaders);
285
+ }
286
+ }
287
+
288
+ private function parseStringHeaders($rawHeaders)
289
+ {
290
+ $headers = array();
291
+ $responseHeaderLines = explode("\r\n", $rawHeaders);
292
+ foreach ($responseHeaderLines as $headerLine) {
293
+ if ($headerLine && strpos($headerLine, ':') !== false) {
294
+ list($header, $value) = explode(': ', $headerLine, 2);
295
+ $header = strtolower($header);
296
+ if (isset($responseHeaders[$header])) {
297
+ $headers[$header] .= "\n" . $value;
298
+ } else {
299
+ $headers[$header] = $value;
300
+ }
301
+ }
302
+ }
303
+ return $headers;
304
+ }
305
+
306
+ private function parseArrayHeaders($rawHeaders)
307
+ {
308
+ $header_count = count($rawHeaders);
309
+ $headers = array();
310
+
311
+ for ($i = 0; $i < $header_count; $i++) {
312
+ $header = $rawHeaders[$i];
313
+ // Times will have colons in - so we just want the first match.
314
+ $header_parts = explode(': ', $header, 2);
315
+ if (count($header_parts) == 2) {
316
+ $headers[$header_parts[0]] = $header_parts[1];
317
+ }
318
+ }
319
+
320
+ return $headers;
321
+ }
322
+ }
google/IO/Curl.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Curl based implementation of Google_IO.
20
+ *
21
+ * @author Stuart Langley <slangley@google.com>
22
+ */
23
+
24
+ require_once APSL_PLUGIN_DIR."google/IO/Abstract.php";
25
+
26
+ class Google_IO_Curl extends Google_IO_Abstract
27
+ {
28
+ // cURL hex representation of version 7.30.0
29
+ const NO_QUIRK_VERSION = 0x071E00;
30
+
31
+ private $options = array();
32
+ /**
33
+ * Execute an HTTP Request
34
+ *
35
+ * @param Google_HttpRequest $request the http request to be executed
36
+ * @return Google_HttpRequest http request with the response http code,
37
+ * response headers and response body filled in
38
+ * @throws Google_IO_Exception on curl or IO error
39
+ */
40
+ public function executeRequest(Google_Http_Request $request)
41
+ {
42
+ $curl = curl_init();
43
+
44
+ if ($request->getPostBody()) {
45
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getPostBody());
46
+ }
47
+
48
+ $requestHeaders = $request->getRequestHeaders();
49
+ if ($requestHeaders && is_array($requestHeaders)) {
50
+ $curlHeaders = array();
51
+ foreach ($requestHeaders as $k => $v) {
52
+ $curlHeaders[] = "$k: $v";
53
+ }
54
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $curlHeaders);
55
+ }
56
+
57
+ curl_setopt($curl, CURLOPT_URL, $request->getUrl());
58
+
59
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
60
+ curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent());
61
+
62
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
63
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
64
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
65
+ curl_setopt($curl, CURLOPT_HEADER, true);
66
+
67
+ if ($request->canGzip()) {
68
+ curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
69
+ }
70
+
71
+ foreach ($this->options as $key => $var) {
72
+ curl_setopt($curl, $key, $var);
73
+ }
74
+
75
+ if (!isset($this->options[CURLOPT_CAINFO])) {
76
+ curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
77
+ }
78
+
79
+ $response = curl_exec($curl);
80
+ if ($response === false) {
81
+ throw new Google_IO_Exception(curl_error($curl));
82
+ }
83
+ $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
84
+
85
+ list($responseHeaders, $responseBody) = $this->parseHttpResponse($response, $headerSize);
86
+
87
+ $responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
88
+
89
+ return array($responseBody, $responseHeaders, $responseCode);
90
+ }
91
+
92
+ /**
93
+ * Set options that update the transport implementation's behavior.
94
+ * @param $options
95
+ */
96
+ public function setOptions($options)
97
+ {
98
+ $this->options = $options + $this->options;
99
+ }
100
+
101
+ /**
102
+ * Set the maximum request time in seconds.
103
+ * @param $timeout in seconds
104
+ */
105
+ public function setTimeout($timeout)
106
+ {
107
+ // Since this timeout is really for putting a bound on the time
108
+ // we'll set them both to the same. If you need to specify a longer
109
+ // CURLOPT_TIMEOUT, or a tigher CONNECTTIMEOUT, the best thing to
110
+ // do is use the setOptions method for the values individually.
111
+ $this->options[CURLOPT_CONNECTTIMEOUT] = $timeout;
112
+ $this->options[CURLOPT_TIMEOUT] = $timeout;
113
+ }
114
+
115
+ /**
116
+ * Get the maximum request time in seconds.
117
+ * @return timeout in seconds
118
+ */
119
+ public function getTimeout()
120
+ {
121
+ return $this->options[CURLOPT_TIMEOUT];
122
+ }
123
+
124
+ /**
125
+ * Test for the presence of a cURL header processing bug
126
+ *
127
+ * {@inheritDoc}
128
+ *
129
+ * @return boolean
130
+ */
131
+ protected function needsQuirk()
132
+ {
133
+ $ver = curl_version();
134
+ $versionNum = $ver['version_number'];
135
+ return $versionNum < Google_IO_Curl::NO_QUIRK_VERSION;
136
+ }
137
+ }
google/IO/Exception.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Exception.php";
19
+
20
+ class Google_IO_Exception extends Google_Exception
21
+ {
22
+ }
google/IO/Stream.php ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Http Streams based implementation of Google_IO.
20
+ *
21
+ * @author Stuart Langley <slangley@google.com>
22
+ */
23
+
24
+ require_once APSL_PLUGIN_DIR."google/IO/Abstract.php";
25
+
26
+ class Google_IO_Stream extends Google_IO_Abstract
27
+ {
28
+ const TIMEOUT = "timeout";
29
+ const ZLIB = "compress.zlib://";
30
+ private $options = array();
31
+ private $trappedErrorNumber;
32
+ private $trappedErrorString;
33
+
34
+ private static $DEFAULT_HTTP_CONTEXT = array(
35
+ "follow_location" => 0,
36
+ "ignore_errors" => 1,
37
+ );
38
+
39
+ private static $DEFAULT_SSL_CONTEXT = array(
40
+ "verify_peer" => true,
41
+ );
42
+
43
+ /**
44
+ * Execute an HTTP Request
45
+ *
46
+ * @param Google_HttpRequest $request the http request to be executed
47
+ * @return Google_HttpRequest http request with the response http code,
48
+ * response headers and response body filled in
49
+ * @throws Google_IO_Exception on curl or IO error
50
+ */
51
+ public function executeRequest(Google_Http_Request $request)
52
+ {
53
+ $default_options = stream_context_get_options(stream_context_get_default());
54
+
55
+ $requestHttpContext = array_key_exists('http', $default_options) ?
56
+ $default_options['http'] : array();
57
+
58
+ if ($request->getPostBody()) {
59
+ $requestHttpContext["content"] = $request->getPostBody();
60
+ }
61
+
62
+ $requestHeaders = $request->getRequestHeaders();
63
+ if ($requestHeaders && is_array($requestHeaders)) {
64
+ $headers = "";
65
+ foreach ($requestHeaders as $k => $v) {
66
+ $headers .= "$k: $v\r\n";
67
+ }
68
+ $requestHttpContext["header"] = $headers;
69
+ }
70
+
71
+ $requestHttpContext["method"] = $request->getRequestMethod();
72
+ $requestHttpContext["user_agent"] = $request->getUserAgent();
73
+
74
+ $requestSslContext = array_key_exists('ssl', $default_options) ?
75
+ $default_options['ssl'] : array();
76
+
77
+ if (!array_key_exists("cafile", $requestSslContext)) {
78
+ $requestSslContext["cafile"] = dirname(__FILE__) . '/cacerts.pem';
79
+ }
80
+
81
+ $options = array(
82
+ "http" => array_merge(
83
+ self::$DEFAULT_HTTP_CONTEXT,
84
+ $requestHttpContext
85
+ ),
86
+ "ssl" => array_merge(
87
+ self::$DEFAULT_SSL_CONTEXT,
88
+ $requestSslContext
89
+ )
90
+ );
91
+
92
+ $context = stream_context_create($options);
93
+
94
+ $url = $request->getUrl();
95
+
96
+ if ($request->canGzip()) {
97
+ $url = self::ZLIB . $url;
98
+ }
99
+
100
+ // We are trapping any thrown errors in this method only and
101
+ // throwing an exception.
102
+ $this->trappedErrorNumber = null;
103
+ $this->trappedErrorString = null;
104
+
105
+ // START - error trap.
106
+ set_error_handler(array($this, 'trapError'));
107
+ $fh = fopen($url, 'r', false, $context);
108
+ restore_error_handler();
109
+ // END - error trap.
110
+
111
+ if ($this->trappedErrorNumber) {
112
+ throw new Google_IO_Exception(
113
+ sprintf(
114
+ "HTTP Error: Unable to connect: '%s'",
115
+ $this->trappedErrorString
116
+ ),
117
+ $this->trappedErrorNumber
118
+ );
119
+ }
120
+
121
+ $response_data = false;
122
+ $respHttpCode = self::UNKNOWN_CODE;
123
+ if ($fh) {
124
+ if (isset($this->options[self::TIMEOUT])) {
125
+ stream_set_timeout($fh, $this->options[self::TIMEOUT]);
126
+ }
127
+
128
+ $response_data = stream_get_contents($fh);
129
+ fclose($fh);
130
+
131
+ $respHttpCode = $this->getHttpResponseCode($http_response_header);
132
+ }
133
+
134
+ if (false === $response_data) {
135
+ throw new Google_IO_Exception(
136
+ sprintf(
137
+ "HTTP Error: Unable to connect: '%s'",
138
+ $respHttpCode
139
+ ),
140
+ $respHttpCode
141
+ );
142
+ }
143
+
144
+ $responseHeaders = $this->getHttpResponseHeaders($http_response_header);
145
+
146
+ return array($response_data, $responseHeaders, $respHttpCode);
147
+ }
148
+
149
+ /**
150
+ * Set options that update the transport implementation's behavior.
151
+ * @param $options
152
+ */
153
+ public function setOptions($options)
154
+ {
155
+ $this->options = $options + $this->options;
156
+ }
157
+
158
+ /**
159
+ * Method to handle errors, used for error handling around
160
+ * stream connection methods.
161
+ */
162
+ public function trapError($errno, $errstr)
163
+ {
164
+ $this->trappedErrorNumber = $errno;
165
+ $this->trappedErrorString = $errstr;
166
+ }
167
+
168
+ /**
169
+ * Set the maximum request time in seconds.
170
+ * @param $timeout in seconds
171
+ */
172
+ public function setTimeout($timeout)
173
+ {
174
+ $this->options[self::TIMEOUT] = $timeout;
175
+ }
176
+
177
+ /**
178
+ * Get the maximum request time in seconds.
179
+ * @return timeout in seconds
180
+ */
181
+ public function getTimeout()
182
+ {
183
+ return $this->options[self::TIMEOUT];
184
+ }
185
+
186
+ /**
187
+ * Test for the presence of a cURL header processing bug
188
+ *
189
+ * {@inheritDoc}
190
+ *
191
+ * @return boolean
192
+ */
193
+ protected function needsQuirk()
194
+ {
195
+ return false;
196
+ }
197
+
198
+ protected function getHttpResponseCode($response_headers)
199
+ {
200
+ $header_count = count($response_headers);
201
+
202
+ for ($i = 0; $i < $header_count; $i++) {
203
+ $header = $response_headers[$i];
204
+ if (strncasecmp("HTTP", $header, strlen("HTTP")) == 0) {
205
+ $response = explode(' ', $header);
206
+ return $response[1];
207
+ }
208
+ }
209
+ return self::UNKNOWN_CODE;
210
+ }
211
+ }
google/IO/cacerts.pem ADDED
@@ -0,0 +1,2183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
2
+ # Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
3
+ # Label: "GTE CyberTrust Global Root"
4
+ # Serial: 421
5
+ # MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db
6
+ # SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74
7
+ # SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36
8
+ -----BEGIN CERTIFICATE-----
9
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
10
+ VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
11
+ bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
12
+ b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
13
+ UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
14
+ cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
15
+ b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
16
+ iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
17
+ r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
18
+ 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
19
+ GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
20
+ 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
21
+ lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
22
+ -----END CERTIFICATE-----
23
+
24
+ # Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
25
+ # Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
26
+ # Label: "Thawte Server CA"
27
+ # Serial: 1
28
+ # MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d
29
+ # SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c
30
+ # SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9
31
+ -----BEGIN CERTIFICATE-----
32
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
33
+ FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
34
+ VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
35
+ biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
36
+ MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
37
+ MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
38
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
39
+ dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
40
+ cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
41
+ DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
42
+ gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
43
+ yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
44
+ L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
45
+ EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
46
+ 7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
47
+ QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
48
+ qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
49
+ -----END CERTIFICATE-----
50
+
51
+ # Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
52
+ # Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
53
+ # Label: "Thawte Premium Server CA"
54
+ # Serial: 1
55
+ # MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a
56
+ # SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a
57
+ # SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72
58
+ -----BEGIN CERTIFICATE-----
59
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
60
+ FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
61
+ VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
62
+ biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
63
+ dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
64
+ MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
65
+ MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
66
+ A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
67
+ b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
68
+ cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
69
+ bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
70
+ VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
71
+ ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
72
+ uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
73
+ 9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
74
+ hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
75
+ pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
76
+ -----END CERTIFICATE-----
77
+
78
+ # Issuer: O=Equifax OU=Equifax Secure Certificate Authority
79
+ # Subject: O=Equifax OU=Equifax Secure Certificate Authority
80
+ # Label: "Equifax Secure CA"
81
+ # Serial: 903804111
82
+ # MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
83
+ # SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
84
+ # SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
85
+ -----BEGIN CERTIFICATE-----
86
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
87
+ UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
88
+ dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
89
+ MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
90
+ dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
91
+ AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
92
+ BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
93
+ cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
94
+ AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
95
+ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
96
+ aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
97
+ ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
98
+ IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
99
+ MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
100
+ A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
101
+ 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
102
+ 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
103
+ -----END CERTIFICATE-----
104
+
105
+ # Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
106
+ # Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
107
+ # Label: "Verisign Class 3 Public Primary Certification Authority"
108
+ # Serial: 149843929435818692848040365716851702463
109
+ # MD5 Fingerprint: 10:fc:63:5d:f6:26:3e:0d:f3:25:be:5f:79:cd:67:67
110
+ # SHA1 Fingerprint: 74:2c:31:92:e6:07:e4:24:eb:45:49:54:2b:e1:bb:c5:3e:61:74:e2
111
+ # SHA256 Fingerprint: e7:68:56:34:ef:ac:f6:9a:ce:93:9a:6b:25:5b:7b:4f:ab:ef:42:93:5b:50:a2:65:ac:b5:cb:60:27:e4:4e:70
112
+ -----BEGIN CERTIFICATE-----
113
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
114
+ A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
115
+ cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
116
+ MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
117
+ BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
118
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
119
+ ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
120
+ BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
121
+ I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
122
+ CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
123
+ lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
124
+ AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
125
+ -----END CERTIFICATE-----
126
+
127
+ # Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
128
+ # Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
129
+ # Label: "Verisign Class 3 Public Primary Certification Authority - G2"
130
+ # Serial: 167285380242319648451154478808036881606
131
+ # MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9
132
+ # SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f
133
+ # SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b
134
+ -----BEGIN CERTIFICATE-----
135
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
136
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
137
+ c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
138
+ MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
139
+ emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
140
+ DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
141
+ FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
142
+ UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
143
+ YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
144
+ MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
145
+ AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
146
+ pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
147
+ 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
148
+ AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
149
+ U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
150
+ F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
151
+ oJ2daZH9
152
+ -----END CERTIFICATE-----
153
+
154
+ # Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
155
+ # Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
156
+ # Label: "GlobalSign Root CA"
157
+ # Serial: 4835703278459707669005204
158
+ # MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a
159
+ # SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c
160
+ # SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99
161
+ -----BEGIN CERTIFICATE-----
162
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
163
+ A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
164
+ b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
165
+ MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
166
+ YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
167
+ aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
168
+ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
169
+ xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
170
+ 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
171
+ snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
172
+ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
173
+ 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
174
+ BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
175
+ AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
176
+ yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
177
+ 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
178
+ AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
179
+ DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
180
+ HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
181
+ -----END CERTIFICATE-----
182
+
183
+ # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
184
+ # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
185
+ # Label: "GlobalSign Root CA - R2"
186
+ # Serial: 4835703278459682885658125
187
+ # MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30
188
+ # SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe
189
+ # SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e
190
+ -----BEGIN CERTIFICATE-----
191
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
192
+ A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
193
+ Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
194
+ MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
195
+ A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
196
+ hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
197
+ v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
198
+ eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
199
+ tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
200
+ C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
201
+ zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
202
+ mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
203
+ V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
204
+ bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
205
+ 3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
206
+ J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
207
+ 291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
208
+ ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
209
+ AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
210
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
211
+ -----END CERTIFICATE-----
212
+
213
+ # Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
214
+ # Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
215
+ # Label: "ValiCert Class 1 VA"
216
+ # Serial: 1
217
+ # MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb
218
+ # SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e
219
+ # SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04
220
+ -----BEGIN CERTIFICATE-----
221
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
222
+ IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
223
+ BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
224
+ aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
225
+ 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
226
+ NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
227
+ azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
228
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
229
+ Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
230
+ cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
231
+ LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
232
+ TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
233
+ TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
234
+ LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
235
+ I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
236
+ nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
237
+ -----END CERTIFICATE-----
238
+
239
+ # Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
240
+ # Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
241
+ # Label: "ValiCert Class 2 VA"
242
+ # Serial: 1
243
+ # MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87
244
+ # SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6
245
+ # SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b
246
+ -----BEGIN CERTIFICATE-----
247
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
248
+ IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
249
+ BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
250
+ aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
251
+ 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
252
+ NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
253
+ azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
254
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
255
+ Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
256
+ cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
257
+ dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
258
+ WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
259
+ v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
260
+ UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
261
+ IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
262
+ W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
263
+ -----END CERTIFICATE-----
264
+
265
+ # Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
266
+ # Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
267
+ # Label: "RSA Root Certificate 1"
268
+ # Serial: 1
269
+ # MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72
270
+ # SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb
271
+ # SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a
272
+ -----BEGIN CERTIFICATE-----
273
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
274
+ IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
275
+ BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
276
+ aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
277
+ 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
278
+ NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
279
+ azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
280
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
281
+ Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
282
+ cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
283
+ cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
284
+ 2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
285
+ JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
286
+ Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
287
+ n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
288
+ PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
289
+ -----END CERTIFICATE-----
290
+
291
+ # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
292
+ # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
293
+ # Label: "Verisign Class 3 Public Primary Certification Authority - G3"
294
+ # Serial: 206684696279472310254277870180966723415
295
+ # MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09
296
+ # SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6
297
+ # SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44
298
+ -----BEGIN CERTIFICATE-----
299
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
300
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
301
+ cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
302
+ LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
303
+ aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
304
+ dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
305
+ VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
306
+ aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
307
+ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
308
+ IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
309
+ LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
310
+ N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
311
+ KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
312
+ kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
313
+ CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
314
+ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
315
+ imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
316
+ 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
317
+ DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
318
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
319
+ F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
320
+ TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
321
+ -----END CERTIFICATE-----
322
+
323
+ # Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
324
+ # Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
325
+ # Label: "Verisign Class 4 Public Primary Certification Authority - G3"
326
+ # Serial: 314531972711909413743075096039378935511
327
+ # MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df
328
+ # SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d
329
+ # SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06
330
+ -----BEGIN CERTIFICATE-----
331
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
332
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
333
+ cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
334
+ LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
335
+ aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
336
+ dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
337
+ VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
338
+ aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
339
+ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
340
+ IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
341
+ LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
342
+ GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
343
+ +mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
344
+ U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
345
+ NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
346
+ ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
347
+ ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
348
+ CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
349
+ g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
350
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
351
+ 2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
352
+ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
353
+ -----END CERTIFICATE-----
354
+
355
+ # Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
356
+ # Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
357
+ # Label: "Entrust.net Secure Server CA"
358
+ # Serial: 927650371
359
+ # MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee
360
+ # SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39
361
+ # SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50
362
+ -----BEGIN CERTIFICATE-----
363
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
364
+ VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
365
+ ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
366
+ KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
367
+ ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
368
+ MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
369
+ ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
370
+ b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
371
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
372
+ U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
373
+ A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
374
+ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
375
+ wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
376
+ AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
377
+ oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
378
+ BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
379
+ dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
380
+ MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
381
+ b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
382
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
383
+ MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
384
+ E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
385
+ MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
386
+ hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
387
+ 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
388
+ 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
389
+ -----END CERTIFICATE-----
390
+
391
+ # Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
392
+ # Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
393
+ # Label: "Entrust.net Premium 2048 Secure Server CA"
394
+ # Serial: 946059622
395
+ # MD5 Fingerprint: ba:21:ea:20:d6:dd:db:8f:c1:57:8b:40:ad:a1:fc:fc
396
+ # SHA1 Fingerprint: 80:1d:62:d0:7b:44:9d:5c:5c:03:5c:98:ea:61:fa:44:3c:2a:58:fe
397
+ # SHA256 Fingerprint: d1:c3:39:ea:27:84:eb:87:0f:93:4f:c5:63:4e:4a:a9:ad:55:05:01:64:01:f2:64:65:d3:7a:57:46:63:35:9f
398
+ -----BEGIN CERTIFICATE-----
399
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
400
+ RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
401
+ bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
402
+ IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
403
+ ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
404
+ MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
405
+ LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
406
+ YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
407
+ A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
408
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
409
+ K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
410
+ sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
411
+ MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
412
+ XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
413
+ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
414
+ 4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
415
+ vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
416
+ CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
417
+ WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
418
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
419
+ h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
420
+ f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
421
+ B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
422
+ vUxFnmG6v4SBkgPR0ml8xQ==
423
+ -----END CERTIFICATE-----
424
+
425
+ # Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
426
+ # Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
427
+ # Label: "Baltimore CyberTrust Root"
428
+ # Serial: 33554617
429
+ # MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4
430
+ # SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74
431
+ # SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb
432
+ -----BEGIN CERTIFICATE-----
433
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
434
+ RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
435
+ VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
436
+ DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
437
+ ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
438
+ VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
439
+ mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
440
+ IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
441
+ mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
442
+ XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
443
+ dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
444
+ jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
445
+ BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
446
+ DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
447
+ 9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
448
+ jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
449
+ Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
450
+ ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
451
+ R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
452
+ -----END CERTIFICATE-----
453
+
454
+ # Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
455
+ # Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
456
+ # Label: "Equifax Secure Global eBusiness CA"
457
+ # Serial: 1
458
+ # MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc
459
+ # SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45
460
+ # SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07
461
+ -----BEGIN CERTIFICATE-----
462
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
463
+ MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
464
+ ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
465
+ MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
466
+ dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
467
+ c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
468
+ UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
469
+ 58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
470
+ o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
471
+ MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
472
+ aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
473
+ A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
474
+ Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
475
+ 8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
476
+ -----END CERTIFICATE-----
477
+
478
+ # Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
479
+ # Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
480
+ # Label: "Equifax Secure eBusiness CA 1"
481
+ # Serial: 4
482
+ # MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d
483
+ # SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41
484
+ # SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73
485
+ -----BEGIN CERTIFICATE-----
486
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
487
+ MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
488
+ ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
489
+ MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
490
+ LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
491
+ KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
492
+ RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
493
+ WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
494
+ Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
495
+ AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
496
+ eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
497
+ zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
498
+ WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
499
+ /Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
500
+ -----END CERTIFICATE-----
501
+
502
+ # Issuer: O=Equifax Secure OU=Equifax Secure eBusiness CA-2
503
+ # Subject: O=Equifax Secure OU=Equifax Secure eBusiness CA-2
504
+ # Label: "Equifax Secure eBusiness CA 2"
505
+ # Serial: 930140085
506
+ # MD5 Fingerprint: aa:bf:bf:64:97:da:98:1d:6f:c6:08:3a:95:70:33:ca
507
+ # SHA1 Fingerprint: 39:4f:f6:85:0b:06:be:52:e5:18:56:cc:10:e1:80:e8:82:b3:85:cc
508
+ # SHA256 Fingerprint: 2f:27:4e:48:ab:a4:ac:7b:76:59:33:10:17:75:50:6d:c3:0e:e3:8e:f6:ac:d5:c0:49:32:cf:e0:41:23:42:20
509
+ -----BEGIN CERTIFICATE-----
510
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
511
+ UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
512
+ dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
513
+ NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
514
+ VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
515
+ AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
516
+ vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
517
+ BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
518
+ AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
519
+ MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
520
+ IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
521
+ NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
522
+ y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
523
+ MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
524
+ A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
525
+ 0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
526
+ E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
527
+ -----END CERTIFICATE-----
528
+
529
+ # Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
530
+ # Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
531
+ # Label: "AddTrust Low-Value Services Root"
532
+ # Serial: 1
533
+ # MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc
534
+ # SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d
535
+ # SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7
536
+ -----BEGIN CERTIFICATE-----
537
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
538
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
539
+ b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
540
+ MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
541
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
542
+ VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
543
+ A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
544
+ CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
545
+ tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
546
+ dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
547
+ PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
548
+ +Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
549
+ BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
550
+ BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
551
+ MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
552
+ ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
553
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
554
+ 7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
555
+ 43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
556
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
557
+ pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
558
+ WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
559
+ -----END CERTIFICATE-----
560
+
561
+ # Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
562
+ # Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
563
+ # Label: "AddTrust External Root"
564
+ # Serial: 1
565
+ # MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f
566
+ # SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68
567
+ # SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2
568
+ -----BEGIN CERTIFICATE-----
569
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
570
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
571
+ IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
572
+ MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
573
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
574
+ bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
575
+ dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
576
+ H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
577
+ uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
578
+ mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
579
+ a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
580
+ E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
581
+ WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
582
+ VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
583
+ Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
584
+ cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
585
+ IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
586
+ AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
587
+ YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
588
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
589
+ Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
590
+ c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
591
+ mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
592
+ -----END CERTIFICATE-----
593
+
594
+ # Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
595
+ # Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
596
+ # Label: "AddTrust Public Services Root"
597
+ # Serial: 1
598
+ # MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f
599
+ # SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5
600
+ # SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27
601
+ -----BEGIN CERTIFICATE-----
602
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
603
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
604
+ b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
605
+ MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
606
+ ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
607
+ BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
608
+ AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
609
+ 6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
610
+ GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
611
+ dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
612
+ 1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
613
+ 62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
614
+ BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
615
+ AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
616
+ MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
617
+ cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
618
+ b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
619
+ IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
620
+ iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
621
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
622
+ 4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
623
+ XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
624
+ -----END CERTIFICATE-----
625
+
626
+ # Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
627
+ # Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
628
+ # Label: "AddTrust Qualified Certificates Root"
629
+ # Serial: 1
630
+ # MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb
631
+ # SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf
632
+ # SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16
633
+ -----BEGIN CERTIFICATE-----
634
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
635
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
636
+ b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
637
+ MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
638
+ EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
639
+ BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
640
+ AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
641
+ xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
642
+ 87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
643
+ 2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
644
+ WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
645
+ 0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
646
+ A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
647
+ AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
648
+ pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
649
+ ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
650
+ aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
651
+ hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
652
+ hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
653
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
654
+ P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
655
+ iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
656
+ xqE=
657
+ -----END CERTIFICATE-----
658
+
659
+ # Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
660
+ # Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
661
+ # Label: "Entrust Root Certification Authority"
662
+ # Serial: 1164660820
663
+ # MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4
664
+ # SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9
665
+ # SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c
666
+ -----BEGIN CERTIFICATE-----
667
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
668
+ VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
669
+ Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
670
+ KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
671
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
672
+ NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
673
+ NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
674
+ ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
675
+ BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
676
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
677
+ Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
678
+ 4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
679
+ KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
680
+ rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
681
+ 94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
682
+ sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
683
+ gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
684
+ kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
685
+ vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
686
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
687
+ O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
688
+ AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
689
+ 9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
690
+ eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
691
+ 0vdXcDazv/wor3ElhVsT/h5/WrQ8
692
+ -----END CERTIFICATE-----
693
+
694
+ # Issuer: CN=GeoTrust Global CA O=GeoTrust Inc.
695
+ # Subject: CN=GeoTrust Global CA O=GeoTrust Inc.
696
+ # Label: "GeoTrust Global CA"
697
+ # Serial: 144470
698
+ # MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5
699
+ # SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12
700
+ # SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a
701
+ -----BEGIN CERTIFICATE-----
702
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
703
+ MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
704
+ YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
705
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
706
+ R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
707
+ 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
708
+ fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
709
+ iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
710
+ 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
711
+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
712
+ MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
713
+ ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
714
+ uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
715
+ Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
716
+ tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
717
+ PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
718
+ hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
719
+ 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
720
+ -----END CERTIFICATE-----
721
+
722
+ # Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
723
+ # Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
724
+ # Label: "GeoTrust Global CA 2"
725
+ # Serial: 1
726
+ # MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9
727
+ # SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d
728
+ # SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85
729
+ -----BEGIN CERTIFICATE-----
730
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
731
+ MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
732
+ IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
733
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
734
+ R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
735
+ PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
736
+ Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
737
+ TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
738
+ 5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
739
+ S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
740
+ 2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
741
+ FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
742
+ EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
743
+ EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
744
+ /NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
745
+ A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
746
+ abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
747
+ I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
748
+ 4iIprn2DQKi6bA==
749
+ -----END CERTIFICATE-----
750
+
751
+ # Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc.
752
+ # Subject: CN=GeoTrust Universal CA O=GeoTrust Inc.
753
+ # Label: "GeoTrust Universal CA"
754
+ # Serial: 1
755
+ # MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48
756
+ # SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79
757
+ # SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12
758
+ -----BEGIN CERTIFICATE-----
759
+ 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
788
+ -----END CERTIFICATE-----
789
+
790
+ # Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
791
+ # Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
792
+ # Label: "GeoTrust Universal CA 2"
793
+ # Serial: 1
794
+ # MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7
795
+ # SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79
796
+ # SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b
797
+ -----BEGIN CERTIFICATE-----
798
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
799
+ MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
800
+ c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
801
+ VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
802
+ c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
803
+ AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
804
+ WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
805
+ FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
806
+ XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
807
+ se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
808
+ KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
809
+ IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
810
+ y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
811
+ hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
812
+ QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
813
+ Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
814
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
815
+ HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
816
+ KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
817
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
818
+ L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
819
+ Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
820
+ ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
821
+ T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
822
+ GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
823
+ 1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
824
+ OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
825
+ 6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
826
+ QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
827
+ -----END CERTIFICATE-----
828
+
829
+ # Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc.
830
+ # Subject: CN=America Online Root Certification Authority 1 O=America Online Inc.
831
+ # Label: "America Online Root Certification Authority 1"
832
+ # Serial: 1
833
+ # MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e
834
+ # SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a
835
+ # SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3
836
+ -----BEGIN CERTIFICATE-----
837
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
838
+ MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
839
+ bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
840
+ MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
841
+ ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
842
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
843
+ ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
844
+ hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
845
+ 1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
846
+ OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
847
+ 2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
848
+ O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
849
+ AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
850
+ AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
851
+ BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
852
+ Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
853
+ LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
854
+ oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
855
+ MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
856
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
857
+ -----END CERTIFICATE-----
858
+
859
+ # Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc.
860
+ # Subject: CN=America Online Root Certification Authority 2 O=America Online Inc.
861
+ # Label: "America Online Root Certification Authority 2"
862
+ # Serial: 1
863
+ # MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf
864
+ # SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84
865
+ # SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd
866
+ -----BEGIN CERTIFICATE-----
867
+ MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
868
+ MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
869
+ bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
870
+ MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
871
+ ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
872
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
873
+ ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
874
+ 206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
875
+ KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
876
+ JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
877
+ BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
878
+ Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
879
+ PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
880
+ Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
881
+ Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
882
+ o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
883
+ +L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
884
+ YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
885
+ FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
886
+ AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
887
+ xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
888
+ LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
889
+ obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
890
+ CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
891
+ IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
892
+ DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
893
+ AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
894
+ Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
895
+ AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
896
+ Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
897
+ RY8mkaKO/qk=
898
+ -----END CERTIFICATE-----
899
+
900
+ # Issuer: CN=AAA Certificate Services O=Comodo CA Limited
901
+ # Subject: CN=AAA Certificate Services O=Comodo CA Limited
902
+ # Label: "Comodo AAA Services root"
903
+ # Serial: 1
904
+ # MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0
905
+ # SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49
906
+ # SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4
907
+ -----BEGIN CERTIFICATE-----
908
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
909
+ MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
910
+ GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
911
+ YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
912
+ MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
913
+ BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
914
+ GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
915
+ ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
916
+ BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
917
+ 3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
918
+ YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
919
+ rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
920
+ ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
921
+ oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
922
+ MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
923
+ QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
924
+ b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
925
+ AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
926
+ GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
927
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
928
+ G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
929
+ l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
930
+ smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
931
+ -----END CERTIFICATE-----
932
+
933
+ # Issuer: CN=Secure Certificate Services O=Comodo CA Limited
934
+ # Subject: CN=Secure Certificate Services O=Comodo CA Limited
935
+ # Label: "Comodo Secure Services root"
936
+ # Serial: 1
937
+ # MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd
938
+ # SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1
939
+ # SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8
940
+ -----BEGIN CERTIFICATE-----
941
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
942
+ MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
943
+ GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
944
+ ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
945
+ fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
946
+ A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
947
+ BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
948
+ BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
949
+ cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
950
+ HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
951
+ CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
952
+ 3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
953
+ 6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
954
+ HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
955
+ EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
956
+ Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
957
+ Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
958
+ DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
959
+ 5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
960
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
961
+ gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
962
+ aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
963
+ izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
964
+ -----END CERTIFICATE-----
965
+
966
+ # Issuer: CN=Trusted Certificate Services O=Comodo CA Limited
967
+ # Subject: CN=Trusted Certificate Services O=Comodo CA Limited
968
+ # Label: "Comodo Trusted Services root"
969
+ # Serial: 1
970
+ # MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27
971
+ # SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd
972
+ # SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69
973
+ -----BEGIN CERTIFICATE-----
974
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
975
+ MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
976
+ GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
977
+ aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
978
+ MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
979
+ BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
980
+ VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
981
+ AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
982
+ fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
983
+ TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
984
+ fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
985
+ 1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
986
+ kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
987
+ A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
988
+ VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
989
+ ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
990
+ dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
991
+ Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
992
+ HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
993
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
994
+ jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
995
+ xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
996
+ dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
997
+ -----END CERTIFICATE-----
998
+
999
+ # Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
1000
+ # Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
1001
+ # Label: "UTN DATACorp SGC Root CA"
1002
+ # Serial: 91374294542884689855167577680241077609
1003
+ # MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06
1004
+ # SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4
1005
+ # SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48
1006
+ -----BEGIN CERTIFICATE-----
1007
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
1008
+ kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
1009
+ Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1010
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
1011
+ IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
1012
+ EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
1013
+ VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
1014
+ dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
1015
+ BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
1016
+ E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
1017
+ D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
1018
+ 4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
1019
+ lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
1020
+ bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
1021
+ o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
1022
+ MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
1023
+ LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
1024
+ BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
1025
+ AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
1026
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
1027
+ j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
1028
+ KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
1029
+ 2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
1030
+ mfnGV/TJVTl4uix5yaaIK/QI
1031
+ -----END CERTIFICATE-----
1032
+
1033
+ # Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
1034
+ # Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
1035
+ # Label: "UTN USERFirst Hardware Root CA"
1036
+ # Serial: 91374294542884704022267039221184531197
1037
+ # MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39
1038
+ # SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7
1039
+ # SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37
1040
+ -----BEGIN CERTIFICATE-----
1041
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
1042
+ lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
1043
+ Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1044
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
1045
+ SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
1046
+ A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
1047
+ MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
1048
+ d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
1049
+ cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
1050
+ 0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
1051
+ M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
1052
+ MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
1053
+ oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
1054
+ DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
1055
+ oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
1056
+ VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
1057
+ dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
1058
+ bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
1059
+ BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
1060
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
1061
+ CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
1062
+ CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
1063
+ 3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
1064
+ KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
1065
+ -----END CERTIFICATE-----
1066
+
1067
+ # Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
1068
+ # Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
1069
+ # Label: "XRamp Global CA Root"
1070
+ # Serial: 107108908803651509692980124233745014957
1071
+ # MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1
1072
+ # SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6
1073
+ # SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2
1074
+ -----BEGIN CERTIFICATE-----
1075
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
1076
+ gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
1077
+ MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
1078
+ UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
1079
+ NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
1080
+ dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
1081
+ dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
1082
+ dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
1083
+ 38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
1084
+ KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
1085
+ DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
1086
+ qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
1087
+ JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
1088
+ PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
1089
+ BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
1090
+ jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
1091
+ eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
1092
+ ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
1093
+ vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
1094
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
1095
+ IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
1096
+ i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
1097
+ O+7ETPTsJ3xCwnR8gooJybQDJbw=
1098
+ -----END CERTIFICATE-----
1099
+
1100
+ # Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
1101
+ # Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
1102
+ # Label: "Go Daddy Class 2 CA"
1103
+ # Serial: 0
1104
+ # MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67
1105
+ # SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4
1106
+ # SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4
1107
+ -----BEGIN CERTIFICATE-----
1108
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
1109
+ MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
1110
+ YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
1111
+ MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
1112
+ ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
1113
+ MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
1114
+ ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
1115
+ PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
1116
+ wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
1117
+ EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
1118
+ avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
1119
+ YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
1120
+ sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
1121
+ /t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
1122
+ IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
1123
+ YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
1124
+ ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
1125
+ OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
1126
+ TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
1127
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
1128
+ dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
1129
+ ReYNnyicsbkqWletNw+vHX/bvZ8=
1130
+ -----END CERTIFICATE-----
1131
+
1132
+ # Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
1133
+ # Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
1134
+ # Label: "Starfield Class 2 CA"
1135
+ # Serial: 0
1136
+ # MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24
1137
+ # SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a
1138
+ # SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58
1139
+ -----BEGIN CERTIFICATE-----
1140
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
1141
+ MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
1142
+ U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
1143
+ NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
1144
+ ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
1145
+ ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
1146
+ DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
1147
+ 8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
1148
+ +lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
1149
+ X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
1150
+ K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
1151
+ 1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
1152
+ A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
1153
+ zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
1154
+ YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
1155
+ bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
1156
+ DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
1157
+ L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
1158
+ eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1159
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
1160
+ VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
1161
+ WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
1162
+ -----END CERTIFICATE-----
1163
+
1164
+ # Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
1165
+ # Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
1166
+ # Label: "StartCom Certification Authority"
1167
+ # Serial: 1
1168
+ # MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16
1169
+ # SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f
1170
+ # SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea
1171
+ -----BEGIN CERTIFICATE-----
1172
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
1173
+ MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
1174
+ Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
1175
+ dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
1176
+ MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
1177
+ U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
1178
+ cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
1179
+ A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
1180
+ pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
1181
+ OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
1182
+ Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
1183
+ Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
1184
+ HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
1185
+ Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
1186
+ +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
1187
+ Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
1188
+ Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
1189
+ 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
1190
+ AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
1191
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
1192
+ ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
1193
+ LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
1194
+ BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
1195
+ Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
1196
+ dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
1197
+ cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
1198
+ YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
1199
+ dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
1200
+ bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
1201
+ YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
1202
+ TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
1203
+ 9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
1204
+ jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
1205
+ FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
1206
+ ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
1207
+ ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
1208
+ EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
1209
+ L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
1210
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
1211
+ O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
1212
+ um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
1213
+ NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
1214
+ -----END CERTIFICATE-----
1215
+
1216
+ # Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
1217
+ # Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
1218
+ # Label: "DigiCert Assured ID Root CA"
1219
+ # Serial: 17154717934120587862167794914071425081
1220
+ # MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72
1221
+ # SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43
1222
+ # SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c
1223
+ -----BEGIN CERTIFICATE-----
1224
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
1225
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1226
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
1227
+ b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
1228
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
1229
+ cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
1230
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
1231
+ JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
1232
+ mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
1233
+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
1234
+ VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
1235
+ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
1236
+ AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
1237
+ BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
1238
+ pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
1239
+ dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
1240
+ fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
1241
+ NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
1242
+ H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1243
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1244
+ -----END CERTIFICATE-----
1245
+
1246
+ # Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
1247
+ # Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
1248
+ # Label: "DigiCert Global Root CA"
1249
+ # Serial: 10944719598952040374951832963794454346
1250
+ # MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e
1251
+ # SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36
1252
+ # SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61
1253
+ -----BEGIN CERTIFICATE-----
1254
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
1255
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1256
+ d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
1257
+ QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
1258
+ MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
1259
+ b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
1260
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
1261
+ CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
1262
+ nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
1263
+ 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
1264
+ T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
1265
+ gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
1266
+ BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
1267
+ TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
1268
+ DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
1269
+ hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
1270
+ 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
1271
+ PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
1272
+ YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1273
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1274
+ -----END CERTIFICATE-----
1275
+
1276
+ # Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
1277
+ # Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
1278
+ # Label: "DigiCert High Assurance EV Root CA"
1279
+ # Serial: 3553400076410547919724730734378100087
1280
+ # MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a
1281
+ # SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25
1282
+ # SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf
1283
+ -----BEGIN CERTIFICATE-----
1284
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
1285
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1286
+ d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
1287
+ ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
1288
+ MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
1289
+ LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
1290
+ RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
1291
+ +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
1292
+ PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
1293
+ xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
1294
+ Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
1295
+ hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
1296
+ EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
1297
+ MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
1298
+ FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
1299
+ nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
1300
+ eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
1301
+ hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
1302
+ Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1303
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
1304
+ +OkuE6N36B9K
1305
+ -----END CERTIFICATE-----
1306
+
1307
+ # Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
1308
+ # Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
1309
+ # Label: "GeoTrust Primary Certification Authority"
1310
+ # Serial: 32798226551256963324313806436981982369
1311
+ # MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf
1312
+ # SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96
1313
+ # SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c
1314
+ -----BEGIN CERTIFICATE-----
1315
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
1316
+ MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
1317
+ R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
1318
+ MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
1319
+ Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
1320
+ ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
1321
+ AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
1322
+ AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
1323
+ ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
1324
+ 7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
1325
+ kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
1326
+ mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
1327
+ A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
1328
+ KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
1329
+ 6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
1330
+ 4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
1331
+ oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
1332
+ UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
1333
+ AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
1334
+ -----END CERTIFICATE-----
1335
+
1336
+ # Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
1337
+ # Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
1338
+ # Label: "thawte Primary Root CA"
1339
+ # Serial: 69529181992039203566298953787712940909
1340
+ # MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12
1341
+ # SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81
1342
+ # SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f
1343
+ -----BEGIN CERTIFICATE-----
1344
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
1345
+ qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
1346
+ Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
1347
+ MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
1348
+ BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
1349
+ NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
1350
+ LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
1351
+ A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
1352
+ IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
1353
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
1354
+ W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
1355
+ 3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
1356
+ 6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
1357
+ Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
1358
+ NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
1359
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
1360
+ r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
1361
+ DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
1362
+ YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
1363
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
1364
+ /qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
1365
+ LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
1366
+ jVaMaA==
1367
+ -----END CERTIFICATE-----
1368
+
1369
+ # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
1370
+ # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
1371
+ # Label: "VeriSign Class 3 Public Primary Certification Authority - G5"
1372
+ # Serial: 33037644167568058970164719475676101450
1373
+ # MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c
1374
+ # SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5
1375
+ # SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df
1376
+ -----BEGIN CERTIFICATE-----
1377
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
1378
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
1379
+ ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
1380
+ U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
1381
+ ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
1382
+ aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
1383
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
1384
+ ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
1385
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
1386
+ U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
1387
+ aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
1388
+ nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
1389
+ t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
1390
+ SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
1391
+ BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
1392
+ rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
1393
+ NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
1394
+ BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
1395
+ BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
1396
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
1397
+ MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
1398
+ p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
1399
+ 5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
1400
+ WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
1401
+ 4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
1402
+ hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
1403
+ -----END CERTIFICATE-----
1404
+
1405
+ # Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
1406
+ # Subject: CN=COMODO Certification Authority O=COMODO CA Limited
1407
+ # Label: "COMODO Certification Authority"
1408
+ # Serial: 104350513648249232941998508985834464573
1409
+ # MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75
1410
+ # SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b
1411
+ # SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66
1412
+ -----BEGIN CERTIFICATE-----
1413
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
1414
+ gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
1415
+ A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
1416
+ BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
1417
+ MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
1418
+ YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
1419
+ RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
1420
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
1421
+ UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
1422
+ 2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
1423
+ Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
1424
+ +2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
1425
+ DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
1426
+ nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
1427
+ /zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
1428
+ PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
1429
+ QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
1430
+ SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
1431
+ IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
1432
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
1433
+ zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
1434
+ BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
1435
+ ZQ==
1436
+ -----END CERTIFICATE-----
1437
+
1438
+ # Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
1439
+ # Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
1440
+ # Label: "Network Solutions Certificate Authority"
1441
+ # Serial: 116697915152937497490437556386812487904
1442
+ # MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e
1443
+ # SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce
1444
+ # SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c
1445
+ -----BEGIN CERTIFICATE-----
1446
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
1447
+ MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
1448
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
1449
+ dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
1450
+ UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
1451
+ ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
1452
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
1453
+ c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
1454
+ OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
1455
+ mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
1456
+ BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
1457
+ qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
1458
+ gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
1459
+ BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
1460
+ bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
1461
+ dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
1462
+ 6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
1463
+ h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
1464
+ /nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
1465
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
1466
+ pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1467
+ -----END CERTIFICATE-----
1468
+
1469
+ # Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited
1470
+ # Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited
1471
+ # Label: "COMODO ECC Certification Authority"
1472
+ # Serial: 41578283867086692638256921589707938090
1473
+ # MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23
1474
+ # SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11
1475
+ # SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7
1476
+ -----BEGIN CERTIFICATE-----
1477
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
1478
+ MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
1479
+ BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
1480
+ IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
1481
+ MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
1482
+ ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
1483
+ T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
1484
+ biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
1485
+ FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
1486
+ cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
1487
+ BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
1488
+ BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
1489
+ fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
1490
+ GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1491
+ -----END CERTIFICATE-----
1492
+
1493
+ # Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
1494
+ # Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
1495
+ # Label: "TC TrustCenter Class 2 CA II"
1496
+ # Serial: 941389028203453866782103406992443
1497
+ # MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23
1498
+ # SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e
1499
+ # SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4
1500
+ -----BEGIN CERTIFICATE-----
1501
+ MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
1502
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
1503
+ BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
1504
+ Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
1505
+ OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
1506
+ SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
1507
+ VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
1508
+ ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
1509
+ tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
1510
+ uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
1511
+ XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
1512
+ 8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
1513
+ 5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
1514
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
1515
+ kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
1516
+ dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
1517
+ Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
1518
+ JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
1519
+ Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
1520
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
1521
+ GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
1522
+ ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
1523
+ au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
1524
+ hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
1525
+ dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
1526
+ -----END CERTIFICATE-----
1527
+
1528
+ # Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
1529
+ # Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
1530
+ # Label: "TC TrustCenter Class 3 CA II"
1531
+ # Serial: 1506523511417715638772220530020799
1532
+ # MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e
1533
+ # SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5
1534
+ # SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e
1535
+ -----BEGIN CERTIFICATE-----
1536
+ MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
1537
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
1538
+ BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
1539
+ Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
1540
+ OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
1541
+ SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
1542
+ VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
1543
+ ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
1544
+ Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
1545
+ Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
1546
+ 1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
1547
+ ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
1548
+ Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
1549
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
1550
+ XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
1551
+ dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
1552
+ Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
1553
+ JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
1554
+ Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
1555
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
1556
+ irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
1557
+ TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
1558
+ g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
1559
+ 95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
1560
+ S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
1561
+ -----END CERTIFICATE-----
1562
+
1563
+ # Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1564
+ # Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1565
+ # Label: "TC TrustCenter Universal CA I"
1566
+ # Serial: 601024842042189035295619584734726
1567
+ # MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c
1568
+ # SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3
1569
+ # SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7
1570
+ -----BEGIN CERTIFICATE-----
1571
+ MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
1572
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
1573
+ BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
1574
+ c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
1575
+ MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
1576
+ R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
1577
+ VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
1578
+ AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
1579
+ JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
1580
+ fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
1581
+ jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
1582
+ wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
1583
+ fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
1584
+ VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
1585
+ BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
1586
+ CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
1587
+ 7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
1588
+ 8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
1589
+ ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
1590
+ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
1591
+ 2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
1592
+ -----END CERTIFICATE-----
1593
+
1594
+ # Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc
1595
+ # Subject: CN=Cybertrust Global Root O=Cybertrust, Inc
1596
+ # Label: "Cybertrust Global Root"
1597
+ # Serial: 4835703278459682877484360
1598
+ # MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1
1599
+ # SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6
1600
+ # SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3
1601
+ -----BEGIN CERTIFICATE-----
1602
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
1603
+ A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
1604
+ bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
1605
+ ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
1606
+ b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
1607
+ 7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
1608
+ J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
1609
+ HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
1610
+ t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
1611
+ FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
1612
+ XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
1613
+ MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
1614
+ hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
1615
+ MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
1616
+ A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
1617
+ Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
1618
+ XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
1619
+ omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
1620
+ A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
1621
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
1622
+ -----END CERTIFICATE-----
1623
+
1624
+ # Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
1625
+ # Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
1626
+ # Label: "GeoTrust Primary Certification Authority - G3"
1627
+ # Serial: 28809105769928564313984085209975885599
1628
+ # MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05
1629
+ # SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd
1630
+ # SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4
1631
+ -----BEGIN CERTIFICATE-----
1632
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
1633
+ mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
1634
+ MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
1635
+ eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
1636
+ cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
1637
+ BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
1638
+ MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
1639
+ BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
1640
+ LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
1641
+ +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
1642
+ hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
1643
+ 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
1644
+ JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
1645
+ DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
1646
+ huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
1647
+ HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
1648
+ AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
1649
+ zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
1650
+ kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
1651
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
1652
+ SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
1653
+ spki4cErx5z481+oghLrGREt
1654
+ -----END CERTIFICATE-----
1655
+
1656
+ # Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
1657
+ # Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
1658
+ # Label: "thawte Primary Root CA - G2"
1659
+ # Serial: 71758320672825410020661621085256472406
1660
+ # MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f
1661
+ # SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12
1662
+ # SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57
1663
+ -----BEGIN CERTIFICATE-----
1664
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
1665
+ MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
1666
+ IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
1667
+ BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
1668
+ MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
1669
+ d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
1670
+ YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
1671
+ dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
1672
+ BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
1673
+ papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
1674
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
1675
+ DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
1676
+ KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
1677
+ XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
1678
+ -----END CERTIFICATE-----
1679
+
1680
+ # Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
1681
+ # Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
1682
+ # Label: "thawte Primary Root CA - G3"
1683
+ # Serial: 127614157056681299805556476275995414779
1684
+ # MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31
1685
+ # SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2
1686
+ # SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c
1687
+ -----BEGIN CERTIFICATE-----
1688
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
1689
+ rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
1690
+ Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
1691
+ MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
1692
+ BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
1693
+ Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
1694
+ LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
1695
+ MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
1696
+ ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
1697
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
1698
+ gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
1699
+ YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
1700
+ b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
1701
+ 9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
1702
+ zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
1703
+ OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
1704
+ HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
1705
+ 2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
1706
+ oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
1707
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
1708
+ KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
1709
+ m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
1710
+ MdRAGmI0Nj81Aa6sY6A=
1711
+ -----END CERTIFICATE-----
1712
+
1713
+ # Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
1714
+ # Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
1715
+ # Label: "GeoTrust Primary Certification Authority - G2"
1716
+ # Serial: 80682863203381065782177908751794619243
1717
+ # MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a
1718
+ # SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0
1719
+ # SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66
1720
+ -----BEGIN CERTIFICATE-----
1721
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
1722
+ MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
1723
+ KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
1724
+ MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1725
+ eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
1726
+ BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
1727
+ NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
1728
+ BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
1729
+ MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
1730
+ So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
1731
+ tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
1732
+ BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
1733
+ CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
1734
+ qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
1735
+ rD6ogRLQy7rQkgu2npaqBA+K
1736
+ -----END CERTIFICATE-----
1737
+
1738
+ # Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
1739
+ # Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
1740
+ # Label: "VeriSign Universal Root Certification Authority"
1741
+ # Serial: 85209574734084581917763752644031726877
1742
+ # MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19
1743
+ # SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54
1744
+ # SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c
1745
+ -----BEGIN CERTIFICATE-----
1746
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
1747
+ vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
1748
+ ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
1749
+ U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
1750
+ ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
1751
+ Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
1752
+ MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
1753
+ IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
1754
+ IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
1755
+ bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
1756
+ AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
1757
+ 9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
1758
+ H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
1759
+ LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
1760
+ /BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
1761
+ rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
1762
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
1763
+ WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
1764
+ exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
1765
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
1766
+ sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
1767
+ seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
1768
+ 4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
1769
+ BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
1770
+ lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
1771
+ 7M2CYfE45k+XmCpajQ==
1772
+ -----END CERTIFICATE-----
1773
+
1774
+ # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
1775
+ # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
1776
+ # Label: "VeriSign Class 3 Public Primary Certification Authority - G4"
1777
+ # Serial: 63143484348153506665311985501458640051
1778
+ # MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41
1779
+ # SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a
1780
+ # SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79
1781
+ -----BEGIN CERTIFICATE-----
1782
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
1783
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
1784
+ ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
1785
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
1786
+ U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
1787
+ aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
1788
+ A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
1789
+ U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
1790
+ SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
1791
+ biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1792
+ IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
1793
+ GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
1794
+ fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
1795
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
1796
+ aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
1797
+ aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
1798
+ kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
1799
+ 4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
1800
+ FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1801
+ -----END CERTIFICATE-----
1802
+
1803
+ # Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
1804
+ # Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
1805
+ # Label: "Verisign Class 3 Public Primary Certification Authority"
1806
+ # Serial: 80507572722862485515306429940691309246
1807
+ # MD5 Fingerprint: ef:5a:f1:33:ef:f1:cd:bb:51:02:ee:12:14:4b:96:c4
1808
+ # SHA1 Fingerprint: a1:db:63:93:91:6f:17:e4:18:55:09:40:04:15:c7:02:40:b0:ae:6b
1809
+ # SHA256 Fingerprint: a4:b6:b3:99:6f:c2:f3:06:b3:fd:86:81:bd:63:41:3d:8c:50:09:cc:4f:a3:29:c2:cc:f0:e2:fa:1b:14:03:05
1810
+ -----BEGIN CERTIFICATE-----
1811
+ MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
1812
+ A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
1813
+ cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
1814
+ MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
1815
+ BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
1816
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
1817
+ ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
1818
+ BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
1819
+ I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
1820
+ CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
1821
+ 2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
1822
+ 2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
1823
+ -----END CERTIFICATE-----
1824
+
1825
+ # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
1826
+ # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
1827
+ # Label: "GlobalSign Root CA - R3"
1828
+ # Serial: 4835703278459759426209954
1829
+ # MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28
1830
+ # SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad
1831
+ # SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b
1832
+ -----BEGIN CERTIFICATE-----
1833
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
1834
+ A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
1835
+ Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
1836
+ MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
1837
+ A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
1838
+ hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
1839
+ RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
1840
+ gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
1841
+ KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
1842
+ QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
1843
+ XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
1844
+ DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
1845
+ LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
1846
+ RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
1847
+ jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
1848
+ 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
1849
+ mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
1850
+ Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
1851
+ WD9f
1852
+ -----END CERTIFICATE-----
1853
+
1854
+ # Issuer: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1855
+ # Subject: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1856
+ # Label: "TC TrustCenter Universal CA III"
1857
+ # Serial: 2010889993983507346460533407902964
1858
+ # MD5 Fingerprint: 9f:dd:db:ab:ff:8e:ff:45:21:5f:f0:6c:9d:8f:fe:2b
1859
+ # SHA1 Fingerprint: 96:56:cd:7b:57:96:98:95:d0:e1:41:46:68:06:fb:b8:c6:11:06:87
1860
+ # SHA256 Fingerprint: 30:9b:4a:87:f6:ca:56:c9:31:69:aa:a9:9c:6d:98:88:54:d7:89:2b:d5:43:7e:2d:07:b2:9c:be:da:55:d3:5d
1861
+ -----BEGIN CERTIFICATE-----
1862
+ MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
1863
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
1864
+ BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
1865
+ c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
1866
+ MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
1867
+ ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
1868
+ BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
1869
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
1870
+ 5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
1871
+ DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
1872
+ zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
1873
+ yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
1874
+ dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
1875
+ MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
1876
+ Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
1877
+ 4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
1878
+ dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
1879
+ aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
1880
+ DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
1881
+ CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
1882
+ LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
1883
+ -----END CERTIFICATE-----
1884
+
1885
+ # Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
1886
+ # Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
1887
+ # Label: "Go Daddy Root Certificate Authority - G2"
1888
+ # Serial: 0
1889
+ # MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01
1890
+ # SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b
1891
+ # SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da
1892
+ -----BEGIN CERTIFICATE-----
1893
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
1894
+ EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
1895
+ EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
1896
+ ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
1897
+ NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
1898
+ EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
1899
+ AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
1900
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
1901
+ E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
1902
+ /PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
1903
+ DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
1904
+ GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
1905
+ tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
1906
+ AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
1907
+ FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
1908
+ WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
1909
+ 9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
1910
+ gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
1911
+ 2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
1912
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
1913
+ 4uJEvlz36hz1
1914
+ -----END CERTIFICATE-----
1915
+
1916
+ # Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1917
+ # Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1918
+ # Label: "Starfield Root Certificate Authority - G2"
1919
+ # Serial: 0
1920
+ # MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96
1921
+ # SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e
1922
+ # SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5
1923
+ -----BEGIN CERTIFICATE-----
1924
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
1925
+ EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
1926
+ HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
1927
+ ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
1928
+ MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
1929
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
1930
+ aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
1931
+ Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1932
+ ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
1933
+ nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
1934
+ HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
1935
+ Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
1936
+ dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
1937
+ HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
1938
+ BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
1939
+ CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
1940
+ sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
1941
+ 4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
1942
+ 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
1943
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
1944
+ mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
1945
+ -----END CERTIFICATE-----
1946
+
1947
+ # Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1948
+ # Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1949
+ # Label: "Starfield Services Root Certificate Authority - G2"
1950
+ # Serial: 0
1951
+ # MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2
1952
+ # SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f
1953
+ # SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5
1954
+ -----BEGIN CERTIFICATE-----
1955
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
1956
+ EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
1957
+ HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
1958
+ ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
1959
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
1960
+ VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
1961
+ ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
1962
+ dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
1963
+ hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
1964
+ OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
1965
+ 8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
1966
+ Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
1967
+ hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
1968
+ 6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
1969
+ DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
1970
+ AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
1971
+ bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
1972
+ ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
1973
+ qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
1974
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
1975
+ 0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
1976
+ sSi6
1977
+ -----END CERTIFICATE-----
1978
+
1979
+ # Issuer: CN=AffirmTrust Commercial O=AffirmTrust
1980
+ # Subject: CN=AffirmTrust Commercial O=AffirmTrust
1981
+ # Label: "AffirmTrust Commercial"
1982
+ # Serial: 8608355977964138876
1983
+ # MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7
1984
+ # SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7
1985
+ # SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7
1986
+ -----BEGIN CERTIFICATE-----
1987
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
1988
+ BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
1989
+ dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
1990
+ MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
1991
+ cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
1992
+ AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
1993
+ Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
1994
+ ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
1995
+ MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
1996
+ yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
1997
+ VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
1998
+ nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
1999
+ KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
2000
+ XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
2001
+ vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
2002
+ Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
2003
+ N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
2004
+ nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
2005
+ -----END CERTIFICATE-----
2006
+
2007
+ # Issuer: CN=AffirmTrust Networking O=AffirmTrust
2008
+ # Subject: CN=AffirmTrust Networking O=AffirmTrust
2009
+ # Label: "AffirmTrust Networking"
2010
+ # Serial: 8957382827206547757
2011
+ # MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f
2012
+ # SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f
2013
+ # SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b
2014
+ -----BEGIN CERTIFICATE-----
2015
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
2016
+ BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
2017
+ dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
2018
+ MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
2019
+ cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
2020
+ AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
2021
+ YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
2022
+ kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
2023
+ QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
2024
+ 6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
2025
+ yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
2026
+ QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
2027
+ KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
2028
+ tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
2029
+ QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
2030
+ Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
2031
+ olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
2032
+ x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
2033
+ -----END CERTIFICATE-----
2034
+
2035
+ # Issuer: CN=AffirmTrust Premium O=AffirmTrust
2036
+ # Subject: CN=AffirmTrust Premium O=AffirmTrust
2037
+ # Label: "AffirmTrust Premium"
2038
+ # Serial: 7893706540734352110
2039
+ # MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57
2040
+ # SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27
2041
+ # SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a
2042
+ -----BEGIN CERTIFICATE-----
2043
+ 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
2071
+ KeC2uAloGRwYQw==
2072
+ -----END CERTIFICATE-----
2073
+
2074
+ # Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust
2075
+ # Subject: CN=AffirmTrust Premium ECC O=AffirmTrust
2076
+ # Label: "AffirmTrust Premium ECC"
2077
+ # Serial: 8401224907861490260
2078
+ # MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d
2079
+ # SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb
2080
+ # SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23
2081
+ -----BEGIN CERTIFICATE-----
2082
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
2083
+ VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
2084
+ cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
2085
+ BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
2086
+ VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
2087
+ 0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
2088
+ ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
2089
+ A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
2090
+ A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
2091
+ aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
2092
+ flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
2093
+ -----END CERTIFICATE-----
2094
+
2095
+ # Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
2096
+ # Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
2097
+ # Label: "StartCom Certification Authority"
2098
+ # Serial: 45
2099
+ # MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16
2100
+ # SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0
2101
+ # SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11
2102
+ -----BEGIN CERTIFICATE-----
2103
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
2104
+ MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
2105
+ Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
2106
+ dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
2107
+ MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
2108
+ U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
2109
+ cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
2110
+ A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
2111
+ pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
2112
+ OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
2113
+ Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
2114
+ Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
2115
+ HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
2116
+ Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
2117
+ +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
2118
+ Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
2119
+ Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
2120
+ 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
2121
+ AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
2122
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
2123
+ F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
2124
+ ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
2125
+ ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
2126
+ aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
2127
+ YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
2128
+ c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
2129
+ aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
2130
+ d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
2131
+ CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
2132
+ dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
2133
+ wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
2134
+ Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
2135
+ 0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
2136
+ pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
2137
+ CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
2138
+ P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
2139
+ 1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
2140
+ KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
2141
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
2142
+ 8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
2143
+ fyWl8kgAwKQB2j8=
2144
+ -----END CERTIFICATE-----
2145
+
2146
+ # Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd.
2147
+ # Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd.
2148
+ # Label: "StartCom Certification Authority G2"
2149
+ # Serial: 59
2150
+ # MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64
2151
+ # SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17
2152
+ # SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95
2153
+ -----BEGIN CERTIFICATE-----
2154
+ MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
2155
+ MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
2156
+ aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
2157
+ OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
2158
+ A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
2159
+ CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
2160
+ JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
2161
+ vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
2162
+ D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
2163
+ Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
2164
+ RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
2165
+ HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
2166
+ nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
2167
+ 0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
2168
+ UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
2169
+ Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
2170
+ TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
2171
+ AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
2172
+ BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
2173
+ 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
2174
+ UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
2175
+ 6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
2176
+ 9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
2177
+ HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
2178
+ wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
2179
+ XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
2180
+ IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
2181
+ hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
2182
+ so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
2183
+ -----END CERTIFICATE-----
google/Model.php ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * This class defines attributes, valid values, and usage which is generated
20
+ * from a given json schema.
21
+ * http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
22
+ *
23
+ * @author Chirag Shah <chirags@google.com>
24
+ *
25
+ */
26
+ class Google_Model implements ArrayAccess
27
+ {
28
+ protected $modelData = array();
29
+ protected $processed = array();
30
+
31
+ /**
32
+ * Polymorphic - accepts a variable number of arguments dependent
33
+ * on the type of the model subclass.
34
+ */
35
+ public function __construct()
36
+ {
37
+ if (func_num_args() == 1 && is_array(func_get_arg(0))) {
38
+ // Initialize the model with the array's contents.
39
+ $array = func_get_arg(0);
40
+ $this->mapTypes($array);
41
+ }
42
+ }
43
+
44
+ public function __get($key)
45
+ {
46
+ $keyTypeName = $this->keyType($key);
47
+ $keyDataType = $this->dataType($key);
48
+ if (isset($this->$keyTypeName) && !isset($this->processed[$key])) {
49
+ if (isset($this->modelData[$key])) {
50
+ $val = $this->modelData[$key];
51
+ } else if (isset($this->$keyDataType) &&
52
+ ($this->$keyDataType == 'array' || $this->$keyDataType == 'map')) {
53
+ $val = array();
54
+ } else {
55
+ $val = null;
56
+ }
57
+
58
+ if ($this->isAssociativeArray($val)) {
59
+ if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
60
+ foreach ($val as $arrayKey => $arrayItem) {
61
+ $this->modelData[$key][$arrayKey] =
62
+ $this->createObjectFromName($keyTypeName, $arrayItem);
63
+ }
64
+ } else {
65
+ $this->modelData[$key] = $this->createObjectFromName($keyTypeName, $val);
66
+ }
67
+ } else if (is_array($val)) {
68
+ $arrayObject = array();
69
+ foreach ($val as $arrayIndex => $arrayItem) {
70
+ $arrayObject[$arrayIndex] =
71
+ $this->createObjectFromName($keyTypeName, $arrayItem);
72
+ }
73
+ $this->modelData[$key] = $arrayObject;
74
+ }
75
+ $this->processed[$key] = true;
76
+ }
77
+
78
+ return $this->modelData[$key];
79
+ }
80
+
81
+ /**
82
+ * Initialize this object's properties from an array.
83
+ *
84
+ * @param array $array Used to seed this object's properties.
85
+ * @return void
86
+ */
87
+ protected function mapTypes($array)
88
+ {
89
+ // Hard initilise simple types, lazy load more complex ones.
90
+ foreach ($array as $key => $val) {
91
+ if ( !property_exists($this, $this->keyType($key)) &&
92
+ property_exists($this, $key)) {
93
+ $this->$key = $val;
94
+ unset($array[$key]);
95
+ } elseif (property_exists($this, $camelKey = Google_Utils::camelCase($key))) {
96
+ // This checks if property exists as camelCase, leaving it in array as snake_case
97
+ // in case of backwards compatibility issues.
98
+ $this->$camelKey = $val;
99
+ }
100
+ }
101
+ $this->modelData = $array;
102
+ }
103
+
104
+ /**
105
+ * Create a simplified object suitable for straightforward
106
+ * conversion to JSON. This is relatively expensive
107
+ * due to the usage of reflection, but shouldn't be called
108
+ * a whole lot, and is the most straightforward way to filter.
109
+ */
110
+ public function toSimpleObject()
111
+ {
112
+ $object = new stdClass();
113
+
114
+ // Process all other data.
115
+ foreach ($this->modelData as $key => $val) {
116
+ $result = $this->getSimpleValue($val);
117
+ if ($result !== null) {
118
+ $object->$key = $result;
119
+ }
120
+ }
121
+
122
+ // Process all public properties.
123
+ $reflect = new ReflectionObject($this);
124
+ $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
125
+ foreach ($props as $member) {
126
+ $name = $member->getName();
127
+ $result = $this->getSimpleValue($this->$name);
128
+ if ($result !== null) {
129
+ $object->$name = $result;
130
+ }
131
+ }
132
+
133
+ return $object;
134
+ }
135
+
136
+ /**
137
+ * Handle different types of values, primarily
138
+ * other objects and map and array data types.
139
+ */
140
+ private function getSimpleValue($value)
141
+ {
142
+ if ($value instanceof Google_Model) {
143
+ return $value->toSimpleObject();
144
+ } else if (is_array($value)) {
145
+ $return = array();
146
+ foreach ($value as $key => $a_value) {
147
+ $a_value = $this->getSimpleValue($a_value);
148
+ if ($a_value !== null) {
149
+ $return[$key] = $a_value;
150
+ }
151
+ }
152
+ return $return;
153
+ }
154
+ return $value;
155
+ }
156
+
157
+ /**
158
+ * Returns true only if the array is associative.
159
+ * @param array $array
160
+ * @return bool True if the array is associative.
161
+ */
162
+ protected function isAssociativeArray($array)
163
+ {
164
+ if (!is_array($array)) {
165
+ return false;
166
+ }
167
+ $keys = array_keys($array);
168
+ foreach ($keys as $key) {
169
+ if (is_string($key)) {
170
+ return true;
171
+ }
172
+ }
173
+ return false;
174
+ }
175
+
176
+ /**
177
+ * Given a variable name, discover its type.
178
+ *
179
+ * @param $name
180
+ * @param $item
181
+ * @return object The object from the item.
182
+ */
183
+ private function createObjectFromName($name, $item)
184
+ {
185
+ $type = $this->$name;
186
+ return new $type($item);
187
+ }
188
+
189
+ /**
190
+ * Verify if $obj is an array.
191
+ * @throws Google_Exception Thrown if $obj isn't an array.
192
+ * @param array $obj Items that should be validated.
193
+ * @param string $method Method expecting an array as an argument.
194
+ */
195
+ public function assertIsArray($obj, $method)
196
+ {
197
+ if ($obj && !is_array($obj)) {
198
+ throw new Google_Exception(
199
+ "Incorrect parameter type passed to $method(). Expected an array."
200
+ );
201
+ }
202
+ }
203
+
204
+ public function offsetExists($offset)
205
+ {
206
+ return isset($this->$offset) || isset($this->modelData[$offset]);
207
+ }
208
+
209
+ public function offsetGet($offset)
210
+ {
211
+ return isset($this->$offset) ?
212
+ $this->$offset :
213
+ $this->__get($offset);
214
+ }
215
+
216
+ public function offsetSet($offset, $value)
217
+ {
218
+ if (property_exists($this, $offset)) {
219
+ $this->$offset = $value;
220
+ } else {
221
+ $this->modelData[$offset] = $value;
222
+ $this->processed[$offset] = true;
223
+ }
224
+ }
225
+
226
+ public function offsetUnset($offset)
227
+ {
228
+ unset($this->modelData[$offset]);
229
+ }
230
+
231
+ protected function keyType($key)
232
+ {
233
+ return $key . "Type";
234
+ }
235
+
236
+ protected function dataType($key)
237
+ {
238
+ return $key . "DataType";
239
+ }
240
+
241
+ public function __isset($key)
242
+ {
243
+ return isset($this->modelData[$key]);
244
+ }
245
+
246
+ public function __unset($key)
247
+ {
248
+ unset($this->modelData[$key]);
249
+ }
250
+ }
google/Service.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ class Google_Service
19
+ {
20
+ public $version;
21
+ public $servicePath;
22
+ public $availableScopes;
23
+ public $resource;
24
+ private $client;
25
+
26
+ public function __construct(Google_Client $client)
27
+ {
28
+ $this->client = $client;
29
+ }
30
+
31
+ /**
32
+ * Return the associated Google_Client class.
33
+ * @return Google_Client
34
+ */
35
+ public function getClient()
36
+ {
37
+ return $this->client;
38
+ }
39
+ }
google/Service/Exception.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once APSL_PLUGIN_DIR."google/Exception.php";
4
+
5
+ class Google_Service_Exception extends Google_Exception
6
+ {
7
+ /**
8
+ * Optional list of errors returned in a JSON body of an HTTP error response.
9
+ */
10
+ protected $errors = array();
11
+
12
+ /**
13
+ * Override default constructor to add ability to set $errors.
14
+ *
15
+ * @param string $message
16
+ * @param int $code
17
+ * @param Exception|null $previous
18
+ * @param [{string, string}] errors List of errors returned in an HTTP
19
+ * response. Defaults to [].
20
+ */
21
+ public function __construct(
22
+ $message,
23
+ $code = 0,
24
+ Exception $previous = null,
25
+ $errors = array()
26
+ ) {
27
+ if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
28
+ parent::__construct($message, $code, $previous);
29
+ } else {
30
+ parent::__construct($message, $code);
31
+ }
32
+
33
+ $this->errors = $errors;
34
+ }
35
+
36
+ /**
37
+ * An example of the possible errors returned.
38
+ *
39
+ * {
40
+ * "domain": "global",
41
+ * "reason": "authError",
42
+ * "message": "Invalid Credentials",
43
+ * "locationType": "header",
44
+ * "location": "Authorization",
45
+ * }
46
+ *
47
+ * @return [{string, string}] List of errors return in an HTTP response or [].
48
+ */
49
+ public function getErrors()
50
+ {
51
+ return $this->errors;
52
+ }
53
+ }
google/Service/Oauth2.php ADDED
@@ -0,0 +1,412 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+
18
+ /**
19
+ * Service definition for Oauth2 (v2).
20
+ *
21
+ * <p>
22
+ * Lets you access OAuth2 protocol related APIs.
23
+ * </p>
24
+ *
25
+ * <p>
26
+ * For more information about this service, see the API
27
+ * <a href="https://developers.google.com/accounts/docs/OAuth2" target="_blank">Documentation</a>
28
+ * </p>
29
+ *
30
+ * @author Google, Inc.
31
+ */
32
+ class Google_Service_Oauth2 extends Google_Service
33
+ {
34
+ /** Know your basic profile info and list of people in your circles.. */
35
+ const PLUS_LOGIN = "https://www.googleapis.com/auth/plus.login";
36
+ /** Know who you are on Google. */
37
+ const PLUS_ME = "https://www.googleapis.com/auth/plus.me";
38
+ /** View your email address. */
39
+ const USERINFO_EMAIL = "https://www.googleapis.com/auth/userinfo.email";
40
+ /** View your basic profile info. */
41
+ const USERINFO_PROFILE = "https://www.googleapis.com/auth/userinfo.profile";
42
+
43
+ public $userinfo;
44
+ public $userinfo_v2_me;
45
+ private $base_methods;
46
+
47
+ /**
48
+ * Constructs the internal representation of the Oauth2 service.
49
+ *
50
+ * @param Google_Client $client
51
+ */
52
+ public function __construct(Google_Client $client)
53
+ {
54
+ parent::__construct($client);
55
+ $this->servicePath = '';
56
+ $this->version = 'v2';
57
+ $this->serviceName = 'oauth2';
58
+
59
+ $this->userinfo = new Google_Service_Oauth2_Userinfo_Resource(
60
+ $this,
61
+ $this->serviceName,
62
+ 'userinfo',
63
+ array(
64
+ 'methods' => array(
65
+ 'get' => array(
66
+ 'path' => 'oauth2/v2/userinfo',
67
+ 'httpMethod' => 'GET',
68
+ 'parameters' => array(),
69
+ ),
70
+ )
71
+ )
72
+ );
73
+ $this->userinfo_v2_me = new Google_Service_Oauth2_UserinfoV2Me_Resource(
74
+ $this,
75
+ $this->serviceName,
76
+ 'me',
77
+ array(
78
+ 'methods' => array(
79
+ 'get' => array(
80
+ 'path' => 'userinfo/v2/me',
81
+ 'httpMethod' => 'GET',
82
+ 'parameters' => array(),
83
+ ),
84
+ )
85
+ )
86
+ );
87
+ $this->base_methods = new Google_Service_Resource(
88
+ $this,
89
+ $this->serviceName,
90
+ '',
91
+ array(
92
+ 'methods' => array(
93
+ 'tokeninfo' => array(
94
+ 'path' => 'oauth2/v2/tokeninfo',
95
+ 'httpMethod' => 'POST',
96
+ 'parameters' => array(
97
+ 'access_token' => array(
98
+ 'location' => 'query',
99
+ 'type' => 'string',
100
+ ),
101
+ 'id_token' => array(
102
+ 'location' => 'query',
103
+ 'type' => 'string',
104
+ ),
105
+ ),
106
+ ),
107
+ )
108
+ )
109
+ );
110
+ }
111
+ /**
112
+ * (tokeninfo)
113
+ *
114
+ * @param array $optParams Optional parameters.
115
+ *
116
+ * @opt_param string access_token
117
+ *
118
+ * @opt_param string id_token
119
+ *
120
+ * @return Google_Service_Oauth2_Tokeninfo
121
+ */
122
+ public function tokeninfo($optParams = array())
123
+ {
124
+ $params = array();
125
+ $params = array_merge($params, $optParams);
126
+ return $this->base_methods->call('tokeninfo', array($params), "Google_Service_Oauth2_Tokeninfo");
127
+ }
128
+ }
129
+
130
+
131
+ /**
132
+ * The "userinfo" collection of methods.
133
+ * Typical usage is:
134
+ * <code>
135
+ * $oauth2Service = new Google_Service_Oauth2(...);
136
+ * $userinfo = $oauth2Service->userinfo;
137
+ * </code>
138
+ */
139
+ class Google_Service_Oauth2_Userinfo_Resource extends Google_Service_Resource
140
+ {
141
+
142
+ /**
143
+ * (userinfo.get)
144
+ *
145
+ * @param array $optParams Optional parameters.
146
+ * @return Google_Service_Oauth2_Userinfoplus
147
+ */
148
+ public function get($optParams = array())
149
+ {
150
+ $params = array();
151
+ $params = array_merge($params, $optParams);
152
+ return $this->call('get', array($params), "Google_Service_Oauth2_Userinfoplus");
153
+ }
154
+ }
155
+
156
+ /**
157
+ * The "v2" collection of methods.
158
+ * Typical usage is:
159
+ * <code>
160
+ * $oauth2Service = new Google_Service_Oauth2(...);
161
+ * $v2 = $oauth2Service->v2;
162
+ * </code>
163
+ */
164
+ class Google_Service_Oauth2_UserinfoV2_Resource extends Google_Service_Resource
165
+ {
166
+
167
+ }
168
+
169
+ /**
170
+ * The "me" collection of methods.
171
+ * Typical usage is:
172
+ * <code>
173
+ * $oauth2Service = new Google_Service_Oauth2(...);
174
+ * $me = $oauth2Service->me;
175
+ * </code>
176
+ */
177
+ class Google_Service_Oauth2_UserinfoV2Me_Resource extends Google_Service_Resource
178
+ {
179
+
180
+ /**
181
+ * (me.get)
182
+ *
183
+ * @param array $optParams Optional parameters.
184
+ * @return Google_Service_Oauth2_Userinfoplus
185
+ */
186
+ public function get($optParams = array())
187
+ {
188
+ $params = array();
189
+ $params = array_merge($params, $optParams);
190
+ return $this->call('get', array($params), "Google_Service_Oauth2_Userinfoplus");
191
+ }
192
+ }
193
+
194
+
195
+
196
+
197
+ class Google_Service_Oauth2_Tokeninfo extends Google_Model
198
+ {
199
+ public $accessType;
200
+ public $audience;
201
+ public $email;
202
+ public $expiresIn;
203
+ public $issuedTo;
204
+ public $scope;
205
+ public $userId;
206
+ public $verifiedEmail;
207
+
208
+ public function setAccessType($accessType)
209
+ {
210
+ $this->accessType = $accessType;
211
+ }
212
+
213
+ public function getAccessType()
214
+ {
215
+ return $this->accessType;
216
+ }
217
+
218
+ public function setAudience($audience)
219
+ {
220
+ $this->audience = $audience;
221
+ }
222
+
223
+ public function getAudience()
224
+ {
225
+ return $this->audience;
226
+ }
227
+
228
+ public function setEmail($email)
229
+ {
230
+ $this->email = $email;
231
+ }
232
+
233
+ public function getEmail()
234
+ {
235
+ return $this->email;
236
+ }
237
+
238
+ public function setExpiresIn($expiresIn)
239
+ {
240
+ $this->expiresIn = $expiresIn;
241
+ }
242
+
243
+ public function getExpiresIn()
244
+ {
245
+ return $this->expiresIn;
246
+ }
247
+
248
+ public function setIssuedTo($issuedTo)
249
+ {
250
+ $this->issuedTo = $issuedTo;
251
+ }
252
+
253
+ public function getIssuedTo()
254
+ {
255
+ return $this->issuedTo;
256
+ }
257
+
258
+ public function setScope($scope)
259
+ {
260
+ $this->scope = $scope;
261
+ }
262
+
263
+ public function getScope()
264
+ {
265
+ return $this->scope;
266
+ }
267
+
268
+ public function setUserId($userId)
269
+ {
270
+ $this->userId = $userId;
271
+ }
272
+
273
+ public function getUserId()
274
+ {
275
+ return $this->userId;
276
+ }
277
+
278
+ public function setVerifiedEmail($verifiedEmail)
279
+ {
280
+ $this->verifiedEmail = $verifiedEmail;
281
+ }
282
+
283
+ public function getVerifiedEmail()
284
+ {
285
+ return $this->verifiedEmail;
286
+ }
287
+ }
288
+
289
+ class Google_Service_Oauth2_Userinfoplus extends Google_Model
290
+ {
291
+ public $email;
292
+ public $familyName;
293
+ public $gender;
294
+ public $givenName;
295
+ public $hd;
296
+ public $id;
297
+ public $link;
298
+ public $locale;
299
+ public $name;
300
+ public $picture;
301
+ public $verifiedEmail;
302
+
303
+ public function setEmail($email)
304
+ {
305
+ $this->email = $email;
306
+ }
307
+
308
+ public function getEmail()
309
+ {
310
+ return $this->email;
311
+ }
312
+
313
+ public function setFamilyName($familyName)
314
+ {
315
+ $this->familyName = $familyName;
316
+ }
317
+
318
+ public function getFamilyName()
319
+ {
320
+ return $this->familyName;
321
+ }
322
+
323
+ public function setGender($gender)
324
+ {
325
+ $this->gender = $gender;
326
+ }
327
+
328
+ public function getGender()
329
+ {
330
+ return $this->gender;
331
+ }
332
+
333
+ public function setGivenName($givenName)
334
+ {
335
+ $this->givenName = $givenName;
336
+ }
337
+
338
+ public function getGivenName()
339
+ {
340
+ return $this->givenName;
341
+ }
342
+
343
+ public function setHd($hd)
344
+ {
345
+ $this->hd = $hd;
346
+ }
347
+
348
+ public function getHd()
349
+ {
350
+ return $this->hd;
351
+ }
352
+
353
+ public function setId($id)
354
+ {
355
+ $this->id = $id;
356
+ }
357
+
358
+ public function getId()
359
+ {
360
+ return $this->id;
361
+ }
362
+
363
+ public function setLink($link)
364
+ {
365
+ $this->link = $link;
366
+ }
367
+
368
+ public function getLink()
369
+ {
370
+ return $this->link;
371
+ }
372
+
373
+ public function setLocale($locale)
374
+ {
375
+ $this->locale = $locale;
376
+ }
377
+
378
+ public function getLocale()
379
+ {
380
+ return $this->locale;
381
+ }
382
+
383
+ public function setName($name)
384
+ {
385
+ $this->name = $name;
386
+ }
387
+
388
+ public function getName()
389
+ {
390
+ return $this->name;
391
+ }
392
+
393
+ public function setPicture($picture)
394
+ {
395
+ $this->picture = $picture;
396
+ }
397
+
398
+ public function getPicture()
399
+ {
400
+ return $this->picture;
401
+ }
402
+
403
+ public function setVerifiedEmail($verifiedEmail)
404
+ {
405
+ $this->verifiedEmail = $verifiedEmail;
406
+ }
407
+
408
+ public function getVerifiedEmail()
409
+ {
410
+ return $this->verifiedEmail;
411
+ }
412
+ }
google/Service/Plus.php ADDED
@@ -0,0 +1,3854 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+
18
+ /**
19
+ * Service definition for Plus (v1).
20
+ *
21
+ * <p>
22
+ * The Google+ API enables developers to build on top of the Google+ platform.
23
+ * </p>
24
+ *
25
+ * <p>
26
+ * For more information about this service, see the API
27
+ * <a href="https://developers.google.com/+/api/" target="_blank">Documentation</a>
28
+ * </p>
29
+ *
30
+ * @author Google, Inc.
31
+ */
32
+ class Google_Service_Plus extends Google_Service{
33
+ /** Know your basic profile info and list of people in your circles.. */
34
+ const PLUS_LOGIN = "https://www.googleapis.com/auth/plus.login";
35
+ /** Know who you are on Google. */
36
+ const PLUS_ME = "https://www.googleapis.com/auth/plus.me";
37
+ /** View your email address. */
38
+ const USERINFO_EMAIL = "https://www.googleapis.com/auth/userinfo.email";
39
+ /** View your basic profile info. */
40
+ const USERINFO_PROFILE = "https://www.googleapis.com/auth/userinfo.profile";
41
+
42
+ public $activities;
43
+ public $comments;
44
+ public $moments;
45
+ public $people;
46
+
47
+
48
+ /**
49
+ * Constructs the internal representation of the Plus service.
50
+ *
51
+ * @param Google_Client $client
52
+ */
53
+ public function __construct(Google_Client $client)
54
+ {
55
+ parent::__construct($client);
56
+ $this->servicePath = 'plus/v1/';
57
+ $this->version = 'v1';
58
+ $this->serviceName = 'plus';
59
+
60
+ $this->activities = new Google_Service_Plus_Activities_Resource(
61
+ $this,
62
+ $this->serviceName,
63
+ 'activities',
64
+ array(
65
+ 'methods' => array(
66
+ 'get' => array(
67
+ 'path' => 'activities/{activityId}',
68
+ 'httpMethod' => 'GET',
69
+ 'parameters' => array(
70
+ 'activityId' => array(
71
+ 'location' => 'path',
72
+ 'type' => 'string',
73
+ 'required' => true,
74
+ ),
75
+ ),
76
+ ),'list' => array(
77
+ 'path' => 'people/{userId}/activities/{collection}',
78
+ 'httpMethod' => 'GET',
79
+ 'parameters' => array(
80
+ 'userId' => array(
81
+ 'location' => 'path',
82
+ 'type' => 'string',
83
+ 'required' => true,
84
+ ),
85
+ 'collection' => array(
86
+ 'location' => 'path',
87
+ 'type' => 'string',
88
+ 'required' => true,
89
+ ),
90
+ 'pageToken' => array(
91
+ 'location' => 'query',
92
+ 'type' => 'string',
93
+ ),
94
+ 'maxResults' => array(
95
+ 'location' => 'query',
96
+ 'type' => 'integer',
97
+ ),
98
+ ),
99
+ ),'search' => array(
100
+ 'path' => 'activities',
101
+ 'httpMethod' => 'GET',
102
+ 'parameters' => array(
103
+ 'query' => array(
104
+ 'location' => 'query',
105
+ 'type' => 'string',
106
+ 'required' => true,
107
+ ),
108
+ 'orderBy' => array(
109
+ 'location' => 'query',
110
+ 'type' => 'string',
111
+ ),
112
+ 'pageToken' => array(
113
+ 'location' => 'query',
114
+ 'type' => 'string',
115
+ ),
116
+ 'maxResults' => array(
117
+ 'location' => 'query',
118
+ 'type' => 'integer',
119
+ ),
120
+ 'language' => array(
121
+ 'location' => 'query',
122
+ 'type' => 'string',
123
+ ),
124
+ ),
125
+ ),
126
+ )
127
+ )
128
+ );
129
+ $this->comments = new Google_Service_Plus_Comments_Resource(
130
+ $this,
131
+ $this->serviceName,
132
+ 'comments',
133
+ array(
134
+ 'methods' => array(
135
+ 'get' => array(
136
+ 'path' => 'comments/{commentId}',
137
+ 'httpMethod' => 'GET',
138
+ 'parameters' => array(
139
+ 'commentId' => array(
140
+ 'location' => 'path',
141
+ 'type' => 'string',
142
+ 'required' => true,
143
+ ),
144
+ ),
145
+ ),'list' => array(
146
+ 'path' => 'activities/{activityId}/comments',
147
+ 'httpMethod' => 'GET',
148
+ 'parameters' => array(
149
+ 'activityId' => array(
150
+ 'location' => 'path',
151
+ 'type' => 'string',
152
+ 'required' => true,
153
+ ),
154
+ 'pageToken' => array(
155
+ 'location' => 'query',
156
+ 'type' => 'string',
157
+ ),
158
+ 'sortOrder' => array(
159
+ 'location' => 'query',
160
+ 'type' => 'string',
161
+ ),
162
+ 'maxResults' => array(
163
+ 'location' => 'query',
164
+ 'type' => 'integer',
165
+ ),
166
+ ),
167
+ ),
168
+ )
169
+ )
170
+ );
171
+ $this->moments = new Google_Service_Plus_Moments_Resource(
172
+ $this,
173
+ $this->serviceName,
174
+ 'moments',
175
+ array(
176
+ 'methods' => array(
177
+ 'insert' => array(
178
+ 'path' => 'people/{userId}/moments/{collection}',
179
+ 'httpMethod' => 'POST',
180
+ 'parameters' => array(
181
+ 'userId' => array(
182
+ 'location' => 'path',
183
+ 'type' => 'string',
184
+ 'required' => true,
185
+ ),
186
+ 'collection' => array(
187
+ 'location' => 'path',
188
+ 'type' => 'string',
189
+ 'required' => true,
190
+ ),
191
+ 'debug' => array(
192
+ 'location' => 'query',
193
+ 'type' => 'boolean',
194
+ ),
195
+ ),
196
+ ),'list' => array(
197
+ 'path' => 'people/{userId}/moments/{collection}',
198
+ 'httpMethod' => 'GET',
199
+ 'parameters' => array(
200
+ 'userId' => array(
201
+ 'location' => 'path',
202
+ 'type' => 'string',
203
+ 'required' => true,
204
+ ),
205
+ 'collection' => array(
206
+ 'location' => 'path',
207
+ 'type' => 'string',
208
+ 'required' => true,
209
+ ),
210
+ 'maxResults' => array(
211
+ 'location' => 'query',
212
+ 'type' => 'integer',
213
+ ),
214
+ 'pageToken' => array(
215
+ 'location' => 'query',
216
+ 'type' => 'string',
217
+ ),
218
+ 'targetUrl' => array(
219
+ 'location' => 'query',
220
+ 'type' => 'string',
221
+ ),
222
+ 'type' => array(
223
+ 'location' => 'query',
224
+ 'type' => 'string',
225
+ ),
226
+ ),
227
+ ),'remove' => array(
228
+ 'path' => 'moments/{id}',
229
+ 'httpMethod' => 'DELETE',
230
+ 'parameters' => array(
231
+ 'id' => array(
232
+ 'location' => 'path',
233
+ 'type' => 'string',
234
+ 'required' => true,
235
+ ),
236
+ ),
237
+ ),
238
+ )
239
+ )
240
+ );
241
+ $this->people = new Google_Service_Plus_People_Resource(
242
+ $this,
243
+ $this->serviceName,
244
+ 'people',
245
+ array(
246
+ 'methods' => array(
247
+ 'get' => array(
248
+ 'path' => 'people/{userId}',
249
+ 'httpMethod' => 'GET',
250
+ 'parameters' => array(
251
+ 'userId' => array(
252
+ 'location' => 'path',
253
+ 'type' => 'string',
254
+ 'required' => true,
255
+ ),
256
+ ),
257
+ ),'list' => array(
258
+ 'path' => 'people/{userId}/people/{collection}',
259
+ 'httpMethod' => 'GET',
260
+ 'parameters' => array(
261
+ 'userId' => array(
262
+ 'location' => 'path',
263
+ 'type' => 'string',
264
+ 'required' => true,
265
+ ),
266
+ 'collection' => array(
267
+ 'location' => 'path',
268
+ 'type' => 'string',
269
+ 'required' => true,
270
+ ),
271
+ 'orderBy' => array(
272
+ 'location' => 'query',
273
+ 'type' => 'string',
274
+ ),
275
+ 'pageToken' => array(
276
+ 'location' => 'query',
277
+ 'type' => 'string',
278
+ ),
279
+ 'maxResults' => array(
280
+ 'location' => 'query',
281
+ 'type' => 'integer',
282
+ ),
283
+ ),
284
+ ),'listByActivity' => array(
285
+ 'path' => 'activities/{activityId}/people/{collection}',
286
+ 'httpMethod' => 'GET',
287
+ 'parameters' => array(
288
+ 'activityId' => array(
289
+ 'location' => 'path',
290
+ 'type' => 'string',
291
+ 'required' => true,
292
+ ),
293
+ 'collection' => array(
294
+ 'location' => 'path',
295
+ 'type' => 'string',
296
+ 'required' => true,
297
+ ),
298
+ 'pageToken' => array(
299
+ 'location' => 'query',
300
+ 'type' => 'string',
301
+ ),
302
+ 'maxResults' => array(
303
+ 'location' => 'query',
304
+ 'type' => 'integer',
305
+ ),
306
+ ),
307
+ ),'search' => array(
308
+ 'path' => 'people',
309
+ 'httpMethod' => 'GET',
310
+ 'parameters' => array(
311
+ 'query' => array(
312
+ 'location' => 'query',
313
+ 'type' => 'string',
314
+ 'required' => true,
315
+ ),
316
+ 'pageToken' => array(
317
+ 'location' => 'query',
318
+ 'type' => 'string',
319
+ ),
320
+ 'maxResults' => array(
321
+ 'location' => 'query',
322
+ 'type' => 'integer',
323
+ ),
324
+ 'language' => array(
325
+ 'location' => 'query',
326
+ 'type' => 'string',
327
+ ),
328
+ ),
329
+ ),
330
+ )
331
+ )
332
+ );
333
+ }
334
+ }
335
+
336
+
337
+ /**
338
+ * The "activities" collection of methods.
339
+ * Typical usage is:
340
+ * <code>
341
+ * $plusService = new Google_Service_Plus(...);
342
+ * $activities = $plusService->activities;
343
+ * </code>
344
+ */
345
+ class Google_Service_Plus_Activities_Resource extends Google_Service_Resource
346
+ {
347
+
348
+ /**
349
+ * Get an activity. (activities.get)
350
+ *
351
+ * @param string $activityId
352
+ * The ID of the activity to get.
353
+ * @param array $optParams Optional parameters.
354
+ * @return Google_Service_Plus_Activity
355
+ */
356
+ public function get($activityId, $optParams = array())
357
+ {
358
+ $params = array('activityId' => $activityId);
359
+ $params = array_merge($params, $optParams);
360
+ return $this->call('get', array($params), "Google_Service_Plus_Activity");
361
+ }
362
+ /**
363
+ * List all of the activities in the specified collection for a particular user.
364
+ * (activities.listActivities)
365
+ *
366
+ * @param string $userId
367
+ * The ID of the user to get activities for. The special value "me" can be used to indicate the
368
+ * authenticated user.
369
+ * @param string $collection
370
+ * The collection of activities to list.
371
+ * @param array $optParams Optional parameters.
372
+ *
373
+ * @opt_param string pageToken
374
+ * The continuation token, which is used to page through large result sets. To get the next page of
375
+ * results, set this parameter to the value of "nextPageToken" from the previous response.
376
+ * @opt_param string maxResults
377
+ * The maximum number of activities to include in the response, which is used for paging. For any
378
+ * response, the actual number returned might be less than the specified maxResults.
379
+ * @return Google_Service_Plus_ActivityFeed
380
+ */
381
+ public function listActivities($userId, $collection, $optParams = array())
382
+ {
383
+ $params = array('userId' => $userId, 'collection' => $collection);
384
+ $params = array_merge($params, $optParams);
385
+ return $this->call('list', array($params), "Google_Service_Plus_ActivityFeed");
386
+ }
387
+ /**
388
+ * Search public activities. (activities.search)
389
+ *
390
+ * @param string $query
391
+ * Full-text search query string.
392
+ * @param array $optParams Optional parameters.
393
+ *
394
+ * @opt_param string orderBy
395
+ * Specifies how to order search results.
396
+ * @opt_param string pageToken
397
+ * The continuation token, which is used to page through large result sets. To get the next page of
398
+ * results, set this parameter to the value of "nextPageToken" from the previous response. This
399
+ * token can be of any length.
400
+ * @opt_param string maxResults
401
+ * The maximum number of activities to include in the response, which is used for paging. For any
402
+ * response, the actual number returned might be less than the specified maxResults.
403
+ * @opt_param string language
404
+ * Specify the preferred language to search with. See search language codes for available values.
405
+ * @return Google_Service_Plus_ActivityFeed
406
+ */
407
+ public function search($query, $optParams = array())
408
+ {
409
+ $params = array('query' => $query);
410
+ $params = array_merge($params, $optParams);
411
+ return $this->call('search', array($params), "Google_Service_Plus_ActivityFeed");
412
+ }
413
+ }
414
+
415
+ /**
416
+ * The "comments" collection of methods.
417
+ * Typical usage is:
418
+ * <code>
419
+ * $plusService = new Google_Service_Plus(...);
420
+ * $comments = $plusService->comments;
421
+ * </code>
422
+ */
423
+ class Google_Service_Plus_Comments_Resource extends Google_Service_Resource
424
+ {
425
+
426
+ /**
427
+ * Get a comment. (comments.get)
428
+ *
429
+ * @param string $commentId
430
+ * The ID of the comment to get.
431
+ * @param array $optParams Optional parameters.
432
+ * @return Google_Service_Plus_Comment
433
+ */
434
+ public function get($commentId, $optParams = array())
435
+ {
436
+ $params = array('commentId' => $commentId);
437
+ $params = array_merge($params, $optParams);
438
+ return $this->call('get', array($params), "Google_Service_Plus_Comment");
439
+ }
440
+ /**
441
+ * List all of the comments for an activity. (comments.listComments)
442
+ *
443
+ * @param string $activityId
444
+ * The ID of the activity to get comments for.
445
+ * @param array $optParams Optional parameters.
446
+ *
447
+ * @opt_param string pageToken
448
+ * The continuation token, which is used to page through large result sets. To get the next page of
449
+ * results, set this parameter to the value of "nextPageToken" from the previous response.
450
+ * @opt_param string sortOrder
451
+ * The order in which to sort the list of comments.
452
+ * @opt_param string maxResults
453
+ * The maximum number of comments to include in the response, which is used for paging. For any
454
+ * response, the actual number returned might be less than the specified maxResults.
455
+ * @return Google_Service_Plus_CommentFeed
456
+ */
457
+ public function listComments($activityId, $optParams = array())
458
+ {
459
+ $params = array('activityId' => $activityId);
460
+ $params = array_merge($params, $optParams);
461
+ return $this->call('list', array($params), "Google_Service_Plus_CommentFeed");
462
+ }
463
+ }
464
+
465
+ /**
466
+ * The "moments" collection of methods.
467
+ * Typical usage is:
468
+ * <code>
469
+ * $plusService = new Google_Service_Plus(...);
470
+ * $moments = $plusService->moments;
471
+ * </code>
472
+ */
473
+ class Google_Service_Plus_Moments_Resource extends Google_Service_Resource
474
+ {
475
+
476
+ /**
477
+ * Record a moment representing a user's action such as making a purchase or
478
+ * commenting on a blog. (moments.insert)
479
+ *
480
+ * @param string $userId
481
+ * The ID of the user to record actions for. The only valid values are "me" and the ID of the
482
+ * authenticated user.
483
+ * @param string $collection
484
+ * The collection to which to write moments.
485
+ * @param Google_Moment $postBody
486
+ * @param array $optParams Optional parameters.
487
+ *
488
+ * @opt_param bool debug
489
+ * Return the moment as written. Should be used only for debugging.
490
+ * @return Google_Service_Plus_Moment
491
+ */
492
+ public function insert($userId, $collection, Google_Service_Plus_Moment $postBody, $optParams = array())
493
+ {
494
+ $params = array('userId' => $userId, 'collection' => $collection, 'postBody' => $postBody);
495
+ $params = array_merge($params, $optParams);
496
+ return $this->call('insert', array($params), "Google_Service_Plus_Moment");
497
+ }
498
+ /**
499
+ * List all of the moments for a particular user. (moments.listMoments)
500
+ *
501
+ * @param string $userId
502
+ * The ID of the user to get moments for. The special value "me" can be used to indicate the
503
+ * authenticated user.
504
+ * @param string $collection
505
+ * The collection of moments to list.
506
+ * @param array $optParams Optional parameters.
507
+ *
508
+ * @opt_param string maxResults
509
+ * The maximum number of moments to include in the response, which is used for paging. For any
510
+ * response, the actual number returned might be less than the specified maxResults.
511
+ * @opt_param string pageToken
512
+ * The continuation token, which is used to page through large result sets. To get the next page of
513
+ * results, set this parameter to the value of "nextPageToken" from the previous response.
514
+ * @opt_param string targetUrl
515
+ * Only moments containing this targetUrl will be returned.
516
+ * @opt_param string type
517
+ * Only moments of this type will be returned.
518
+ * @return Google_Service_Plus_MomentsFeed
519
+ */
520
+ public function listMoments($userId, $collection, $optParams = array())
521
+ {
522
+ $params = array('userId' => $userId, 'collection' => $collection);
523
+ $params = array_merge($params, $optParams);
524
+ return $this->call('list', array($params), "Google_Service_Plus_MomentsFeed");
525
+ }
526
+ /**
527
+ * Delete a moment. (moments.remove)
528
+ *
529
+ * @param string $id
530
+ * The ID of the moment to delete.
531
+ * @param array $optParams Optional parameters.
532
+ */
533
+ public function remove($id, $optParams = array())
534
+ {
535
+ $params = array('id' => $id);
536
+ $params = array_merge($params, $optParams);
537
+ return $this->call('remove', array($params));
538
+ }
539
+ }
540
+
541
+ /**
542
+ * The "people" collection of methods.
543
+ * Typical usage is:
544
+ * <code>
545
+ * $plusService = new Google_Service_Plus(...);
546
+ * $people = $plusService->people;
547
+ * </code>
548
+ */
549
+ class Google_Service_Plus_People_Resource extends Google_Service_Resource
550
+ {
551
+
552
+ /**
553
+ * Get a person's profile. If your app uses scope
554
+ * https://www.googleapis.com/auth/plus.login, this method is guaranteed to
555
+ * return ageRange and language. (people.get)
556
+ *
557
+ * @param string $userId
558
+ * The ID of the person to get the profile for. The special value "me" can be used to indicate the
559
+ * authenticated user.
560
+ * @param array $optParams Optional parameters.
561
+ * @return Google_Service_Plus_Person
562
+ */
563
+ public function get($userId, $optParams = array())
564
+ {
565
+ $params = array('userId' => $userId);
566
+ $params = array_merge($params, $optParams);
567
+ return $this->call('get', array($params), "Google_Service_Plus_Person");
568
+ }
569
+ /**
570
+ * List all of the people in the specified collection. (people.listPeople)
571
+ *
572
+ * @param string $userId
573
+ * Get the collection of people for the person identified. Use "me" to indicate the authenticated
574
+ * user.
575
+ * @param string $collection
576
+ * The collection of people to list.
577
+ * @param array $optParams Optional parameters.
578
+ *
579
+ * @opt_param string orderBy
580
+ * The order to return people in.
581
+ * @opt_param string pageToken
582
+ * The continuation token, which is used to page through large result sets. To get the next page of
583
+ * results, set this parameter to the value of "nextPageToken" from the previous response.
584
+ * @opt_param string maxResults
585
+ * The maximum number of people to include in the response, which is used for paging. For any
586
+ * response, the actual number returned might be less than the specified maxResults.
587
+ * @return Google_Service_Plus_PeopleFeed
588
+ */
589
+ public function listPeople($userId, $collection, $optParams = array())
590
+ {
591
+ $params = array('userId' => $userId, 'collection' => $collection);
592
+ $params = array_merge($params, $optParams);
593
+ return $this->call('list', array($params), "Google_Service_Plus_PeopleFeed");
594
+ }
595
+ /**
596
+ * List all of the people in the specified collection for a particular activity.
597
+ * (people.listByActivity)
598
+ *
599
+ * @param string $activityId
600
+ * The ID of the activity to get the list of people for.
601
+ * @param string $collection
602
+ * The collection of people to list.
603
+ * @param array $optParams Optional parameters.
604
+ *
605
+ * @opt_param string pageToken
606
+ * The continuation token, which is used to page through large result sets. To get the next page of
607
+ * results, set this parameter to the value of "nextPageToken" from the previous response.
608
+ * @opt_param string maxResults
609
+ * The maximum number of people to include in the response, which is used for paging. For any
610
+ * response, the actual number returned might be less than the specified maxResults.
611
+ * @return Google_Service_Plus_PeopleFeed
612
+ */
613
+ public function listByActivity($activityId, $collection, $optParams = array())
614
+ {
615
+ $params = array('activityId' => $activityId, 'collection' => $collection);
616
+ $params = array_merge($params, $optParams);
617
+ return $this->call('listByActivity', array($params), "Google_Service_Plus_PeopleFeed");
618
+ }
619
+ /**
620
+ * Search all public profiles. (people.search)
621
+ *
622
+ * @param string $query
623
+ * Specify a query string for full text search of public text in all profiles.
624
+ * @param array $optParams Optional parameters.
625
+ *
626
+ * @opt_param string pageToken
627
+ * The continuation token, which is used to page through large result sets. To get the next page of
628
+ * results, set this parameter to the value of "nextPageToken" from the previous response. This
629
+ * token can be of any length.
630
+ * @opt_param string maxResults
631
+ * The maximum number of people to include in the response, which is used for paging. For any
632
+ * response, the actual number returned might be less than the specified maxResults.
633
+ * @opt_param string language
634
+ * Specify the preferred language to search with. See search language codes for available values.
635
+ * @return Google_Service_Plus_PeopleFeed
636
+ */
637
+ public function search($query, $optParams = array())
638
+ {
639
+ $params = array('query' => $query);
640
+ $params = array_merge($params, $optParams);
641
+ return $this->call('search', array($params), "Google_Service_Plus_PeopleFeed");
642
+ }
643
+ }
644
+
645
+
646
+
647
+
648
+ class Google_Service_Plus_Acl extends Google_Collection
649
+ {
650
+ public $description;
651
+ protected $itemsType = 'Google_Service_Plus_PlusAclentryResource';
652
+ protected $itemsDataType = 'array';
653
+ public $kind;
654
+
655
+ public function setDescription($description)
656
+ {
657
+ $this->description = $description;
658
+ }
659
+
660
+ public function getDescription()
661
+ {
662
+ return $this->description;
663
+ }
664
+
665
+ public function setItems($items)
666
+ {
667
+ $this->items = $items;
668
+ }
669
+
670
+ public function getItems()
671
+ {
672
+ return $this->items;
673
+ }
674
+
675
+ public function setKind($kind)
676
+ {
677
+ $this->kind = $kind;
678
+ }
679
+
680
+ public function getKind()
681
+ {
682
+ return $this->kind;
683
+ }
684
+ }
685
+
686
+ class Google_Service_Plus_Activity extends Google_Model
687
+ {
688
+ protected $accessType = 'Google_Service_Plus_Acl';
689
+ protected $accessDataType = '';
690
+ protected $actorType = 'Google_Service_Plus_ActivityActor';
691
+ protected $actorDataType = '';
692
+ public $address;
693
+ public $annotation;
694
+ public $crosspostSource;
695
+ public $etag;
696
+ public $geocode;
697
+ public $id;
698
+ public $kind;
699
+ protected $locationType = 'Google_Service_Plus_Place';
700
+ protected $locationDataType = '';
701
+ protected $objectType = 'Google_Service_Plus_ActivityObject';
702
+ protected $objectDataType = '';
703
+ public $placeId;
704
+ public $placeName;
705
+ protected $providerType = 'Google_Service_Plus_ActivityProvider';
706
+ protected $providerDataType = '';
707
+ public $published;
708
+ public $radius;
709
+ public $title;
710
+ public $updated;
711
+ public $url;
712
+ public $verb;
713
+
714
+ public function setAccess(Google_Service_Plus_Acl $access)
715
+ {
716
+ $this->access = $access;
717
+ }
718
+
719
+ public function getAccess()
720
+ {
721
+ return $this->access;
722
+ }
723
+
724
+ public function setActor(Google_Service_Plus_ActivityActor $actor)
725
+ {
726
+ $this->actor = $actor;
727
+ }
728
+
729
+ public function getActor()
730
+ {
731
+ return $this->actor;
732
+ }
733
+
734
+ public function setAddress($address)
735
+ {
736
+ $this->address = $address;
737
+ }
738
+
739
+ public function getAddress()
740
+ {
741
+ return $this->address;
742
+ }
743
+
744
+ public function setAnnotation($annotation)
745
+ {
746
+ $this->annotation = $annotation;
747
+ }
748
+
749
+ public function getAnnotation()
750
+ {
751
+ return $this->annotation;
752
+ }
753
+
754
+ public function setCrosspostSource($crosspostSource)
755
+ {
756
+ $this->crosspostSource = $crosspostSource;
757
+ }
758
+
759
+ public function getCrosspostSource()
760
+ {
761
+ return $this->crosspostSource;
762
+ }
763
+
764
+ public function setEtag($etag)
765
+ {
766
+ $this->etag = $etag;
767
+ }
768
+
769
+ public function getEtag()
770
+ {
771
+ return $this->etag;
772
+ }
773
+
774
+ public function setGeocode($geocode)
775
+ {
776
+ $this->geocode = $geocode;
777
+ }
778
+
779
+ public function getGeocode()
780
+ {
781
+ return $this->geocode;
782
+ }
783
+
784
+ public function setId($id)
785
+ {
786
+ $this->id = $id;
787
+ }
788
+
789
+ public function getId()
790
+ {
791
+ return $this->id;
792
+ }
793
+
794
+ public function setKind($kind)
795
+ {
796
+ $this->kind = $kind;
797
+ }
798
+
799
+ public function getKind()
800
+ {
801
+ return $this->kind;
802
+ }
803
+
804
+ public function setLocation(Google_Service_Plus_Place $location)
805
+ {
806
+ $this->location = $location;
807
+ }
808
+
809
+ public function getLocation()
810
+ {
811
+ return $this->location;
812
+ }
813
+
814
+ public function setObject(Google_Service_Plus_ActivityObject $object)
815
+ {
816
+ $this->object = $object;
817
+ }
818
+
819
+ public function getObject()
820
+ {
821
+ return $this->object;
822
+ }
823
+
824
+ public function setPlaceId($placeId)
825
+ {
826
+ $this->placeId = $placeId;
827
+ }
828
+
829
+ public function getPlaceId()
830
+ {
831
+ return $this->placeId;
832
+ }
833
+
834
+ public function setPlaceName($placeName)
835
+ {
836
+ $this->placeName = $placeName;
837
+ }
838
+
839
+ public function getPlaceName()
840
+ {
841
+ return $this->placeName;
842
+ }
843
+
844
+ public function setProvider(Google_Service_Plus_ActivityProvider $provider)
845
+ {
846
+ $this->provider = $provider;
847
+ }
848
+
849
+ public function getProvider()
850
+ {
851
+ return $this->provider;
852
+ }
853
+
854
+ public function setPublished($published)
855
+ {
856
+ $this->published = $published;
857
+ }
858
+
859
+ public function getPublished()
860
+ {
861
+ return $this->published;
862
+ }
863
+
864
+ public function setRadius($radius)
865
+ {
866
+ $this->radius = $radius;
867
+ }
868
+
869
+ public function getRadius()
870
+ {
871
+ return $this->radius;
872
+ }
873
+
874
+ public function setTitle($title)
875
+ {
876
+ $this->title = $title;
877
+ }
878
+
879
+ public function getTitle()
880
+ {
881
+ return $this->title;
882
+ }
883
+
884
+ public function setUpdated($updated)
885
+ {
886
+ $this->updated = $updated;
887
+ }
888
+
889
+ public function getUpdated()
890
+ {
891
+ return $this->updated;
892
+ }
893
+
894
+ public function setUrl($url)
895
+ {
896
+ $this->url = $url;
897
+ }
898
+
899
+ public function getUrl()
900
+ {
901
+ return $this->url;
902
+ }
903
+
904
+ public function setVerb($verb)
905
+ {
906
+ $this->verb = $verb;
907
+ }
908
+
909
+ public function getVerb()
910
+ {
911
+ return $this->verb;
912
+ }
913
+ }
914
+
915
+ class Google_Service_Plus_ActivityActor extends Google_Model
916
+ {
917
+ public $displayName;
918
+ public $id;
919
+ protected $imageType = 'Google_Service_Plus_ActivityActorImage';
920
+ protected $imageDataType = '';
921
+ protected $nameType = 'Google_Service_Plus_ActivityActorName';
922
+ protected $nameDataType = '';
923
+ public $url;
924
+
925
+ public function setDisplayName($displayName)
926
+ {
927
+ $this->displayName = $displayName;
928
+ }
929
+
930
+ public function getDisplayName()
931
+ {
932
+ return $this->displayName;
933
+ }
934
+
935
+ public function setId($id)
936
+ {
937
+ $this->id = $id;
938
+ }
939
+
940
+ public function getId()
941
+ {
942
+ return $this->id;
943
+ }
944
+
945
+ public function setImage(Google_Service_Plus_ActivityActorImage $image)
946
+ {
947
+ $this->image = $image;
948
+ }
949
+
950
+ public function getImage()
951
+ {
952
+ return $this->image;
953
+ }
954
+
955
+ public function setName(Google_Service_Plus_ActivityActorName $name)
956
+ {
957
+ $this->name = $name;
958
+ }
959
+
960
+ public function getName()
961
+ {
962
+ return $this->name;
963
+ }
964
+
965
+ public function setUrl($url)
966
+ {
967
+ $this->url = $url;
968
+ }
969
+
970
+ public function getUrl()
971
+ {
972
+ return $this->url;
973
+ }
974
+ }
975
+
976
+ class Google_Service_Plus_ActivityActorImage extends Google_Model
977
+ {
978
+ public $url;
979
+
980
+ public function setUrl($url)
981
+ {
982
+ $this->url = $url;
983
+ }
984
+
985
+ public function getUrl()
986
+ {
987
+ return $this->url;
988
+ }
989
+ }
990
+
991
+ class Google_Service_Plus_ActivityActorName extends Google_Model
992
+ {
993
+ public $familyName;
994
+ public $givenName;
995
+
996
+ public function setFamilyName($familyName)
997
+ {
998
+ $this->familyName = $familyName;
999
+ }
1000
+
1001
+ public function getFamilyName()
1002
+ {
1003
+ return $this->familyName;
1004
+ }
1005
+
1006
+ public function setGivenName($givenName)
1007
+ {
1008
+ $this->givenName = $givenName;
1009
+ }
1010
+
1011
+ public function getGivenName()
1012
+ {
1013
+ return $this->givenName;
1014
+ }
1015
+ }
1016
+
1017
+ class Google_Service_Plus_ActivityFeed extends Google_Collection
1018
+ {
1019
+ public $etag;
1020
+ public $id;
1021
+ protected $itemsType = 'Google_Service_Plus_Activity';
1022
+ protected $itemsDataType = 'array';
1023
+ public $kind;
1024
+ public $nextLink;
1025
+ public $nextPageToken;
1026
+ public $selfLink;
1027
+ public $title;
1028
+ public $updated;
1029
+
1030
+ public function setEtag($etag)
1031
+ {
1032
+ $this->etag = $etag;
1033
+ }
1034
+
1035
+ public function getEtag()
1036
+ {
1037
+ return $this->etag;
1038
+ }
1039
+
1040
+ public function setId($id)
1041
+ {
1042
+ $this->id = $id;
1043
+ }
1044
+
1045
+ public function getId()
1046
+ {
1047
+ return $this->id;
1048
+ }
1049
+
1050
+ public function setItems($items)
1051
+ {
1052
+ $this->items = $items;
1053
+ }
1054
+
1055
+ public function getItems()
1056
+ {
1057
+ return $this->items;
1058
+ }
1059
+
1060
+ public function setKind($kind)
1061
+ {
1062
+ $this->kind = $kind;
1063
+ }
1064
+
1065
+ public function getKind()
1066
+ {
1067
+ return $this->kind;
1068
+ }
1069
+
1070
+ public function setNextLink($nextLink)
1071
+ {
1072
+ $this->nextLink = $nextLink;
1073
+ }
1074
+
1075
+ public function getNextLink()
1076
+ {
1077
+ return $this->nextLink;
1078
+ }
1079
+
1080
+ public function setNextPageToken($nextPageToken)
1081
+ {
1082
+ $this->nextPageToken = $nextPageToken;
1083
+ }
1084
+
1085
+ public function getNextPageToken()
1086
+ {
1087
+ return $this->nextPageToken;
1088
+ }
1089
+
1090
+ public function setSelfLink($selfLink)
1091
+ {
1092
+ $this->selfLink = $selfLink;
1093
+ }
1094
+
1095
+ public function getSelfLink()
1096
+ {
1097
+ return $this->selfLink;
1098
+ }
1099
+
1100
+ public function setTitle($title)
1101
+ {
1102
+ $this->title = $title;
1103
+ }
1104
+
1105
+ public function getTitle()
1106
+ {
1107
+ return $this->title;
1108
+ }
1109
+
1110
+ public function setUpdated($updated)
1111
+ {
1112
+ $this->updated = $updated;
1113
+ }
1114
+
1115
+ public function getUpdated()
1116
+ {
1117
+ return $this->updated;
1118
+ }
1119
+ }
1120
+
1121
+ class Google_Service_Plus_ActivityObject extends Google_Collection
1122
+ {
1123
+ protected $actorType = 'Google_Service_Plus_ActivityObjectActor';
1124
+ protected $actorDataType = '';
1125
+ protected $attachmentsType = 'Google_Service_Plus_ActivityObjectAttachments';
1126
+ protected $attachmentsDataType = 'array';
1127
+ public $content;
1128
+ public $id;
1129
+ public $objectType;
1130
+ public $originalContent;
1131
+ protected $plusonersType = 'Google_Service_Plus_ActivityObjectPlusoners';
1132
+ protected $plusonersDataType = '';
1133
+ protected $repliesType = 'Google_Service_Plus_ActivityObjectReplies';
1134
+ protected $repliesDataType = '';
1135
+ protected $resharersType = 'Google_Service_Plus_ActivityObjectResharers';
1136
+ protected $resharersDataType = '';
1137
+ public $url;
1138
+
1139
+ public function setActor(Google_Service_Plus_ActivityObjectActor $actor)
1140
+ {
1141
+ $this->actor = $actor;
1142
+ }
1143
+
1144
+ public function getActor()
1145
+ {
1146
+ return $this->actor;
1147
+ }
1148
+
1149
+ public function setAttachments($attachments)
1150
+ {
1151
+ $this->attachments = $attachments;
1152
+ }
1153
+
1154
+ public function getAttachments()
1155
+ {
1156
+ return $this->attachments;
1157
+ }
1158
+
1159
+ public function setContent($content)
1160
+ {
1161
+ $this->content = $content;
1162
+ }
1163
+
1164
+ public function getContent()
1165
+ {
1166
+ return $this->content;
1167
+ }
1168
+
1169
+ public function setId($id)
1170
+ {
1171
+ $this->id = $id;
1172
+ }
1173
+
1174
+ public function getId()
1175
+ {
1176
+ return $this->id;
1177
+ }
1178
+
1179
+ public function setObjectType($objectType)
1180
+ {
1181
+ $this->objectType = $objectType;
1182
+ }
1183
+
1184
+ public function getObjectType()
1185
+ {
1186
+ return $this->objectType;
1187
+ }
1188
+
1189
+ public function setOriginalContent($originalContent)
1190
+ {
1191
+ $this->originalContent = $originalContent;
1192
+ }
1193
+
1194
+ public function getOriginalContent()
1195
+ {
1196
+ return $this->originalContent;
1197
+ }
1198
+
1199
+ public function setPlusoners(Google_Service_Plus_ActivityObjectPlusoners $plusoners)
1200
+ {
1201
+ $this->plusoners = $plusoners;
1202
+ }
1203
+
1204
+ public function getPlusoners()
1205
+ {
1206
+ return $this->plusoners;
1207
+ }
1208
+
1209
+ public function setReplies(Google_Service_Plus_ActivityObjectReplies $replies)
1210
+ {
1211
+ $this->replies = $replies;
1212
+ }
1213
+
1214
+ public function getReplies()
1215
+ {
1216
+ return $this->replies;
1217
+ }
1218
+
1219
+ public function setResharers(Google_Service_Plus_ActivityObjectResharers $resharers)
1220
+ {
1221
+ $this->resharers = $resharers;
1222
+ }
1223
+
1224
+ public function getResharers()
1225
+ {
1226
+ return $this->resharers;
1227
+ }
1228
+
1229
+ public function setUrl($url)
1230
+ {
1231
+ $this->url = $url;
1232
+ }
1233
+
1234
+ public function getUrl()
1235
+ {
1236
+ return $this->url;
1237
+ }
1238
+ }
1239
+
1240
+ class Google_Service_Plus_ActivityObjectActor extends Google_Model
1241
+ {
1242
+ public $displayName;
1243
+ public $id;
1244
+ protected $imageType = 'Google_Service_Plus_ActivityObjectActorImage';
1245
+ protected $imageDataType = '';
1246
+ public $url;
1247
+
1248
+ public function setDisplayName($displayName)
1249
+ {
1250
+ $this->displayName = $displayName;
1251
+ }
1252
+
1253
+ public function getDisplayName()
1254
+ {
1255
+ return $this->displayName;
1256
+ }
1257
+
1258
+ public function setId($id)
1259
+ {
1260
+ $this->id = $id;
1261
+ }
1262
+
1263
+ public function getId()
1264
+ {
1265
+ return $this->id;
1266
+ }
1267
+
1268
+ public function setImage(Google_Service_Plus_ActivityObjectActorImage $image)
1269
+ {
1270
+ $this->image = $image;
1271
+ }
1272
+
1273
+ public function getImage()
1274
+ {
1275
+ return $this->image;
1276
+ }
1277
+
1278
+ public function setUrl($url)
1279
+ {
1280
+ $this->url = $url;
1281
+ }
1282
+
1283
+ public function getUrl()
1284
+ {
1285
+ return $this->url;
1286
+ }
1287
+ }
1288
+
1289
+ class Google_Service_Plus_ActivityObjectActorImage extends Google_Model
1290
+ {
1291
+ public $url;
1292
+
1293
+ public function setUrl($url)
1294
+ {
1295
+ $this->url = $url;
1296
+ }
1297
+
1298
+ public function getUrl()
1299
+ {
1300
+ return $this->url;
1301
+ }
1302
+ }
1303
+
1304
+ class Google_Service_Plus_ActivityObjectAttachments extends Google_Collection
1305
+ {
1306
+ public $content;
1307
+ public $displayName;
1308
+ protected $embedType = 'Google_Service_Plus_ActivityObjectAttachmentsEmbed';
1309
+ protected $embedDataType = '';
1310
+ protected $fullImageType = 'Google_Service_Plus_ActivityObjectAttachmentsFullImage';
1311
+ protected $fullImageDataType = '';
1312
+ public $id;
1313
+ protected $imageType = 'Google_Service_Plus_ActivityObjectAttachmentsImage';
1314
+ protected $imageDataType = '';
1315
+ public $objectType;
1316
+ protected $thumbnailsType = 'Google_Service_Plus_ActivityObjectAttachmentsThumbnails';
1317
+ protected $thumbnailsDataType = 'array';
1318
+ public $url;
1319
+
1320
+ public function setContent($content)
1321
+ {
1322
+ $this->content = $content;
1323
+ }
1324
+
1325
+ public function getContent()
1326
+ {
1327
+ return $this->content;
1328
+ }
1329
+
1330
+ public function setDisplayName($displayName)
1331
+ {
1332
+ $this->displayName = $displayName;
1333
+ }
1334
+
1335
+ public function getDisplayName()
1336
+ {
1337
+ return $this->displayName;
1338
+ }
1339
+
1340
+ public function setEmbed(Google_Service_Plus_ActivityObjectAttachmentsEmbed $embed)
1341
+ {
1342
+ $this->embed = $embed;
1343
+ }
1344
+
1345
+ public function getEmbed()
1346
+ {
1347
+ return $this->embed;
1348
+ }
1349
+
1350
+ public function setFullImage(Google_Service_Plus_ActivityObjectAttachmentsFullImage $fullImage)
1351
+ {
1352
+ $this->fullImage = $fullImage;
1353
+ }
1354
+
1355
+ public function getFullImage()
1356
+ {
1357
+ return $this->fullImage;
1358
+ }
1359
+
1360
+ public function setId($id)
1361
+ {
1362
+ $this->id = $id;
1363
+ }
1364
+
1365
+ public function getId()
1366
+ {
1367
+ return $this->id;
1368
+ }
1369
+
1370
+ public function setImage(Google_Service_Plus_ActivityObjectAttachmentsImage $image)
1371
+ {
1372
+ $this->image = $image;
1373
+ }
1374
+
1375
+ public function getImage()
1376
+ {
1377
+ return $this->image;
1378
+ }
1379
+
1380
+ public function setObjectType($objectType)
1381
+ {
1382
+ $this->objectType = $objectType;
1383
+ }
1384
+
1385
+ public function getObjectType()
1386
+ {
1387
+ return $this->objectType;
1388
+ }
1389
+
1390
+ public function setThumbnails($thumbnails)
1391
+ {
1392
+ $this->thumbnails = $thumbnails;
1393
+ }
1394
+
1395
+ public function getThumbnails()
1396
+ {
1397
+ return $this->thumbnails;
1398
+ }
1399
+
1400
+ public function setUrl($url)
1401
+ {
1402
+ $this->url = $url;
1403
+ }
1404
+
1405
+ public function getUrl()
1406
+ {
1407
+ return $this->url;
1408
+ }
1409
+ }
1410
+
1411
+ class Google_Service_Plus_ActivityObjectAttachmentsEmbed extends Google_Model
1412
+ {
1413
+ public $type;
1414
+ public $url;
1415
+
1416
+ public function setType($type)
1417
+ {
1418
+ $this->type = $type;
1419
+ }
1420
+
1421
+ public function getType()
1422
+ {
1423
+ return $this->type;
1424
+ }
1425
+
1426
+ public function setUrl($url)
1427
+ {
1428
+ $this->url = $url;
1429
+ }
1430
+
1431
+ public function getUrl()
1432
+ {
1433
+ return $this->url;
1434
+ }
1435
+ }
1436
+
1437
+ class Google_Service_Plus_ActivityObjectAttachmentsFullImage extends Google_Model
1438
+ {
1439
+ public $height;
1440
+ public $type;
1441
+ public $url;
1442
+ public $width;
1443
+
1444
+ public function setHeight($height)
1445
+ {
1446
+ $this->height = $height;
1447
+ }
1448
+
1449
+ public function getHeight()
1450
+ {
1451
+ return $this->height;
1452
+ }
1453
+
1454
+ public function setType($type)
1455
+ {
1456
+ $this->type = $type;
1457
+ }
1458
+
1459
+ public function getType()
1460
+ {
1461
+ return $this->type;
1462
+ }
1463
+
1464
+ public function setUrl($url)
1465
+ {
1466
+ $this->url = $url;
1467
+ }
1468
+
1469
+ public function getUrl()
1470
+ {
1471
+ return $this->url;
1472
+ }
1473
+
1474
+ public function setWidth($width)
1475
+ {
1476
+ $this->width = $width;
1477
+ }
1478
+
1479
+ public function getWidth()
1480
+ {
1481
+ return $this->width;
1482
+ }
1483
+ }
1484
+
1485
+ class Google_Service_Plus_ActivityObjectAttachmentsImage extends Google_Model
1486
+ {
1487
+ public $height;
1488
+ public $type;
1489
+ public $url;
1490
+ public $width;
1491
+
1492
+ public function setHeight($height)
1493
+ {
1494
+ $this->height = $height;
1495
+ }
1496
+
1497
+ public function getHeight()
1498
+ {
1499
+ return $this->height;
1500
+ }
1501
+
1502
+ public function setType($type)
1503
+ {
1504
+ $this->type = $type;
1505
+ }
1506
+
1507
+ public function getType()
1508
+ {
1509
+ return $this->type;
1510
+ }
1511
+
1512
+ public function setUrl($url)
1513
+ {
1514
+ $this->url = $url;
1515
+ }
1516
+
1517
+ public function getUrl()
1518
+ {
1519
+ return $this->url;
1520
+ }
1521
+
1522
+ public function setWidth($width)
1523
+ {
1524
+ $this->width = $width;
1525
+ }
1526
+
1527
+ public function getWidth()
1528
+ {
1529
+ return $this->width;
1530
+ }
1531
+ }
1532
+
1533
+ class Google_Service_Plus_ActivityObjectAttachmentsThumbnails extends Google_Model
1534
+ {
1535
+ public $description;
1536
+ protected $imageType = 'Google_Service_Plus_ActivityObjectAttachmentsThumbnailsImage';
1537
+ protected $imageDataType = '';
1538
+ public $url;
1539
+
1540
+ public function setDescription($description)
1541
+ {
1542
+ $this->description = $description;
1543
+ }
1544
+
1545
+ public function getDescription()
1546
+ {
1547
+ return $this->description;
1548
+ }
1549
+
1550
+ public function setImage(Google_Service_Plus_ActivityObjectAttachmentsThumbnailsImage $image)
1551
+ {
1552
+ $this->image = $image;
1553
+ }
1554
+
1555
+ public function getImage()
1556
+ {
1557
+ return $this->image;
1558
+ }
1559
+
1560
+ public function setUrl($url)
1561
+ {
1562
+ $this->url = $url;
1563
+ }
1564
+
1565
+ public function getUrl()
1566
+ {
1567
+ return $this->url;
1568
+ }
1569
+ }
1570
+
1571
+ class Google_Service_Plus_ActivityObjectAttachmentsThumbnailsImage extends Google_Model
1572
+ {
1573
+ public $height;
1574
+ public $type;
1575
+ public $url;
1576
+ public $width;
1577
+
1578
+ public function setHeight($height)
1579
+ {
1580
+ $this->height = $height;
1581
+ }
1582
+
1583
+ public function getHeight()
1584
+ {
1585
+ return $this->height;
1586
+ }
1587
+
1588
+ public function setType($type)
1589
+ {
1590
+ $this->type = $type;
1591
+ }
1592
+
1593
+ public function getType()
1594
+ {
1595
+ return $this->type;
1596
+ }
1597
+
1598
+ public function setUrl($url)
1599
+ {
1600
+ $this->url = $url;
1601
+ }
1602
+
1603
+ public function getUrl()
1604
+ {
1605
+ return $this->url;
1606
+ }
1607
+
1608
+ public function setWidth($width)
1609
+ {
1610
+ $this->width = $width;
1611
+ }
1612
+
1613
+ public function getWidth()
1614
+ {
1615
+ return $this->width;
1616
+ }
1617
+ }
1618
+
1619
+ class Google_Service_Plus_ActivityObjectPlusoners extends Google_Model
1620
+ {
1621
+ public $selfLink;
1622
+ public $totalItems;
1623
+
1624
+ public function setSelfLink($selfLink)
1625
+ {
1626
+ $this->selfLink = $selfLink;
1627
+ }
1628
+
1629
+ public function getSelfLink()
1630
+ {
1631
+ return $this->selfLink;
1632
+ }
1633
+
1634
+ public function setTotalItems($totalItems)
1635
+ {
1636
+ $this->totalItems = $totalItems;
1637
+ }
1638
+
1639
+ public function getTotalItems()
1640
+ {
1641
+ return $this->totalItems;
1642
+ }
1643
+ }
1644
+
1645
+ class Google_Service_Plus_ActivityObjectReplies extends Google_Model
1646
+ {
1647
+ public $selfLink;
1648
+ public $totalItems;
1649
+
1650
+ public function setSelfLink($selfLink)
1651
+ {
1652
+ $this->selfLink = $selfLink;
1653
+ }
1654
+
1655
+ public function getSelfLink()
1656
+ {
1657
+ return $this->selfLink;
1658
+ }
1659
+
1660
+ public function setTotalItems($totalItems)
1661
+ {
1662
+ $this->totalItems = $totalItems;
1663
+ }
1664
+
1665
+ public function getTotalItems()
1666
+ {
1667
+ return $this->totalItems;
1668
+ }
1669
+ }
1670
+
1671
+ class Google_Service_Plus_ActivityObjectResharers extends Google_Model
1672
+ {
1673
+ public $selfLink;
1674
+ public $totalItems;
1675
+
1676
+ public function setSelfLink($selfLink)
1677
+ {
1678
+ $this->selfLink = $selfLink;
1679
+ }
1680
+
1681
+ public function getSelfLink()
1682
+ {
1683
+ return $this->selfLink;
1684
+ }
1685
+
1686
+ public function setTotalItems($totalItems)
1687
+ {
1688
+ $this->totalItems = $totalItems;
1689
+ }
1690
+
1691
+ public function getTotalItems()
1692
+ {
1693
+ return $this->totalItems;
1694
+ }
1695
+ }
1696
+
1697
+ class Google_Service_Plus_ActivityProvider extends Google_Model
1698
+ {
1699
+ public $title;
1700
+
1701
+ public function setTitle($title)
1702
+ {
1703
+ $this->title = $title;
1704
+ }
1705
+
1706
+ public function getTitle()
1707
+ {
1708
+ return $this->title;
1709
+ }
1710
+ }
1711
+
1712
+ class Google_Service_Plus_Comment extends Google_Collection
1713
+ {
1714
+ protected $actorType = 'Google_Service_Plus_CommentActor';
1715
+ protected $actorDataType = '';
1716
+ public $etag;
1717
+ public $id;
1718
+ protected $inReplyToType = 'Google_Service_Plus_CommentInReplyTo';
1719
+ protected $inReplyToDataType = 'array';
1720
+ public $kind;
1721
+ protected $objectType = 'Google_Service_Plus_CommentObject';
1722
+ protected $objectDataType = '';
1723
+ protected $plusonersType = 'Google_Service_Plus_CommentPlusoners';
1724
+ protected $plusonersDataType = '';
1725
+ public $published;
1726
+ public $selfLink;
1727
+ public $updated;
1728
+ public $verb;
1729
+
1730
+ public function setActor(Google_Service_Plus_CommentActor $actor)
1731
+ {
1732
+ $this->actor = $actor;
1733
+ }
1734
+
1735
+ public function getActor()
1736
+ {
1737
+ return $this->actor;
1738
+ }
1739
+
1740
+ public function setEtag($etag)
1741
+ {
1742
+ $this->etag = $etag;
1743
+ }
1744
+
1745
+ public function getEtag()
1746
+ {
1747
+ return $this->etag;
1748
+ }
1749
+
1750
+ public function setId($id)
1751
+ {
1752
+ $this->id = $id;
1753
+ }
1754
+
1755
+ public function getId()
1756
+ {
1757
+ return $this->id;
1758
+ }
1759
+
1760
+ public function setInReplyTo($inReplyTo)
1761
+ {
1762
+ $this->inReplyTo = $inReplyTo;
1763
+ }
1764
+
1765
+ public function getInReplyTo()
1766
+ {
1767
+ return $this->inReplyTo;
1768
+ }
1769
+
1770
+ public function setKind($kind)
1771
+ {
1772
+ $this->kind = $kind;
1773
+ }
1774
+
1775
+ public function getKind()
1776
+ {
1777
+ return $this->kind;
1778
+ }
1779
+
1780
+ public function setObject(Google_Service_Plus_CommentObject $object)
1781
+ {
1782
+ $this->object = $object;
1783
+ }
1784
+
1785
+ public function getObject()
1786
+ {
1787
+ return $this->object;
1788
+ }
1789
+
1790
+ public function setPlusoners(Google_Service_Plus_CommentPlusoners $plusoners)
1791
+ {
1792
+ $this->plusoners = $plusoners;
1793
+ }
1794
+
1795
+ public function getPlusoners()
1796
+ {
1797
+ return $this->plusoners;
1798
+ }
1799
+
1800
+ public function setPublished($published)
1801
+ {
1802
+ $this->published = $published;
1803
+ }
1804
+
1805
+ public function getPublished()
1806
+ {
1807
+ return $this->published;
1808
+ }
1809
+
1810
+ public function setSelfLink($selfLink)
1811
+ {
1812
+ $this->selfLink = $selfLink;
1813
+ }
1814
+
1815
+ public function getSelfLink()
1816
+ {
1817
+ return $this->selfLink;
1818
+ }
1819
+
1820
+ public function setUpdated($updated)
1821
+ {
1822
+ $this->updated = $updated;
1823
+ }
1824
+
1825
+ public function getUpdated()
1826
+ {
1827
+ return $this->updated;
1828
+ }
1829
+
1830
+ public function setVerb($verb)
1831
+ {
1832
+ $this->verb = $verb;
1833
+ }
1834
+
1835
+ public function getVerb()
1836
+ {
1837
+ return $this->verb;
1838
+ }
1839
+ }
1840
+
1841
+ class Google_Service_Plus_CommentActor extends Google_Model
1842
+ {
1843
+ public $displayName;
1844
+ public $id;
1845
+ protected $imageType = 'Google_Service_Plus_CommentActorImage';
1846
+ protected $imageDataType = '';
1847
+ public $url;
1848
+
1849
+ public function setDisplayName($displayName)
1850
+ {
1851
+ $this->displayName = $displayName;
1852
+ }
1853
+
1854
+ public function getDisplayName()
1855
+ {
1856
+ return $this->displayName;
1857
+ }
1858
+
1859
+ public function setId($id)
1860
+ {
1861
+ $this->id = $id;
1862
+ }
1863
+
1864
+ public function getId()
1865
+ {
1866
+ return $this->id;
1867
+ }
1868
+
1869
+ public function setImage(Google_Service_Plus_CommentActorImage $image)
1870
+ {
1871
+ $this->image = $image;
1872
+ }
1873
+
1874
+ public function getImage()
1875
+ {
1876
+ return $this->image;
1877
+ }
1878
+
1879
+ public function setUrl($url)
1880
+ {
1881
+ $this->url = $url;
1882
+ }
1883
+
1884
+ public function getUrl()
1885
+ {
1886
+ return $this->url;
1887
+ }
1888
+ }
1889
+
1890
+ class Google_Service_Plus_CommentActorImage extends Google_Model
1891
+ {
1892
+ public $url;
1893
+
1894
+ public function setUrl($url)
1895
+ {
1896
+ $this->url = $url;
1897
+ }
1898
+
1899
+ public function getUrl()
1900
+ {
1901
+ return $this->url;
1902
+ }
1903
+ }
1904
+
1905
+ class Google_Service_Plus_CommentFeed extends Google_Collection
1906
+ {
1907
+ public $etag;
1908
+ public $id;
1909
+ protected $itemsType = 'Google_Service_Plus_Comment';
1910
+ protected $itemsDataType = 'array';
1911
+ public $kind;
1912
+ public $nextLink;
1913
+ public $nextPageToken;
1914
+ public $title;
1915
+ public $updated;
1916
+
1917
+ public function setEtag($etag)
1918
+ {
1919
+ $this->etag = $etag;
1920
+ }
1921
+
1922
+ public function getEtag()
1923
+ {
1924
+ return $this->etag;
1925
+ }
1926
+
1927
+ public function setId($id)
1928
+ {
1929
+ $this->id = $id;
1930
+ }
1931
+
1932
+ public function getId()
1933
+ {
1934
+ return $this->id;
1935
+ }
1936
+
1937
+ public function setItems($items)
1938
+ {
1939
+ $this->items = $items;
1940
+ }
1941
+
1942
+ public function getItems()
1943
+ {
1944
+ return $this->items;
1945
+ }
1946
+
1947
+ public function setKind($kind)
1948
+ {
1949
+ $this->kind = $kind;
1950
+ }
1951
+
1952
+ public function getKind()
1953
+ {
1954
+ return $this->kind;
1955
+ }
1956
+
1957
+ public function setNextLink($nextLink)
1958
+ {
1959
+ $this->nextLink = $nextLink;
1960
+ }
1961
+
1962
+ public function getNextLink()
1963
+ {
1964
+ return $this->nextLink;
1965
+ }
1966
+
1967
+ public function setNextPageToken($nextPageToken)
1968
+ {
1969
+ $this->nextPageToken = $nextPageToken;
1970
+ }
1971
+
1972
+ public function getNextPageToken()
1973
+ {
1974
+ return $this->nextPageToken;
1975
+ }
1976
+
1977
+ public function setTitle($title)
1978
+ {
1979
+ $this->title = $title;
1980
+ }
1981
+
1982
+ public function getTitle()
1983
+ {
1984
+ return $this->title;
1985
+ }
1986
+
1987
+ public function setUpdated($updated)
1988
+ {
1989
+ $this->updated = $updated;
1990
+ }
1991
+
1992
+ public function getUpdated()
1993
+ {
1994
+ return $this->updated;
1995
+ }
1996
+ }
1997
+
1998
+ class Google_Service_Plus_CommentInReplyTo extends Google_Model
1999
+ {
2000
+ public $id;
2001
+ public $url;
2002
+
2003
+ public function setId($id)
2004
+ {
2005
+ $this->id = $id;
2006
+ }
2007
+
2008
+ public function getId()
2009
+ {
2010
+ return $this->id;
2011
+ }
2012
+
2013
+ public function setUrl($url)
2014
+ {
2015
+ $this->url = $url;
2016
+ }
2017
+
2018
+ public function getUrl()
2019
+ {
2020
+ return $this->url;
2021
+ }
2022
+ }
2023
+
2024
+ class Google_Service_Plus_CommentObject extends Google_Model
2025
+ {
2026
+ public $content;
2027
+ public $objectType;
2028
+ public $originalContent;
2029
+
2030
+ public function setContent($content)
2031
+ {
2032
+ $this->content = $content;
2033
+ }
2034
+
2035
+ public function getContent()
2036
+ {
2037
+ return $this->content;
2038
+ }
2039
+
2040
+ public function setObjectType($objectType)
2041
+ {
2042
+ $this->objectType = $objectType;
2043
+ }
2044
+
2045
+ public function getObjectType()
2046
+ {
2047
+ return $this->objectType;
2048
+ }
2049
+
2050
+ public function setOriginalContent($originalContent)
2051
+ {
2052
+ $this->originalContent = $originalContent;
2053
+ }
2054
+
2055
+ public function getOriginalContent()
2056
+ {
2057
+ return $this->originalContent;
2058
+ }
2059
+ }
2060
+
2061
+ class Google_Service_Plus_CommentPlusoners extends Google_Model
2062
+ {
2063
+ public $totalItems;
2064
+
2065
+ public function setTotalItems($totalItems)
2066
+ {
2067
+ $this->totalItems = $totalItems;
2068
+ }
2069
+
2070
+ public function getTotalItems()
2071
+ {
2072
+ return $this->totalItems;
2073
+ }
2074
+ }
2075
+
2076
+ class Google_Service_Plus_ItemScope extends Google_Collection
2077
+ {
2078
+ protected $aboutType = 'Google_Service_Plus_ItemScope';
2079
+ protected $aboutDataType = '';
2080
+ public $additionalName;
2081
+ protected $addressType = 'Google_Service_Plus_ItemScope';
2082
+ protected $addressDataType = '';
2083
+ public $addressCountry;
2084
+ public $addressLocality;
2085
+ public $addressRegion;
2086
+ protected $associatedMediaType = 'Google_Service_Plus_ItemScope';
2087
+ protected $associatedMediaDataType = 'array';
2088
+ public $attendeeCount;
2089
+ protected $attendeesType = 'Google_Service_Plus_ItemScope';
2090
+ protected $attendeesDataType = 'array';
2091
+ protected $audioType = 'Google_Service_Plus_ItemScope';
2092
+ protected $audioDataType = '';
2093
+ protected $authorType = 'Google_Service_Plus_ItemScope';
2094
+ protected $authorDataType = 'array';
2095
+ public $bestRating;
2096
+ public $birthDate;
2097
+ protected $byArtistType = 'Google_Service_Plus_ItemScope';
2098
+ protected $byArtistDataType = '';
2099
+ public $caption;
2100
+ public $contentSize;
2101
+ public $contentUrl;
2102
+ protected $contributorType = 'Google_Service_Plus_ItemScope';
2103
+ protected $contributorDataType = 'array';
2104
+ public $dateCreated;
2105
+ public $dateModified;
2106
+ public $datePublished;
2107
+ public $description;
2108
+ public $duration;
2109
+ public $embedUrl;
2110
+ public $endDate;
2111
+ public $familyName;
2112
+ public $gender;
2113
+ protected $geoType = 'Google_Service_Plus_ItemScope';
2114
+ protected $geoDataType = '';
2115
+ public $givenName;
2116
+ public $height;
2117
+ public $id;
2118
+ public $image;
2119
+ protected $inAlbumType = 'Google_Service_Plus_ItemScope';
2120
+ protected $inAlbumDataType = '';
2121
+ public $kind;
2122
+ public $latitude;
2123
+ protected $locationType = 'Google_Service_Plus_ItemScope';
2124
+ protected $locationDataType = '';
2125
+ public $longitude;
2126
+ public $name;
2127
+ protected $partOfTVSeriesType = 'Google_Service_Plus_ItemScope';
2128
+ protected $partOfTVSeriesDataType = '';
2129
+ protected $performersType = 'Google_Service_Plus_ItemScope';
2130
+ protected $performersDataType = 'array';
2131
+ public $playerType;
2132
+ public $postOfficeBoxNumber;
2133
+ public $postalCode;
2134
+ public $ratingValue;
2135
+ protected $reviewRatingType = 'Google_Service_Plus_ItemScope';
2136
+ protected $reviewRatingDataType = '';
2137
+ public $startDate;
2138
+ public $streetAddress;
2139
+ public $text;
2140
+ protected $thumbnailType = 'Google_Service_Plus_ItemScope';
2141
+ protected $thumbnailDataType = '';
2142
+ public $thumbnailUrl;
2143
+ public $tickerSymbol;
2144
+ public $type;
2145
+ public $url;
2146
+ public $width;
2147
+ public $worstRating;
2148
+
2149
+ public function setAbout(Google_Service_Plus_ItemScope $about)
2150
+ {
2151
+ $this->about = $about;
2152
+ }
2153
+
2154
+ public function getAbout()
2155
+ {
2156
+ return $this->about;
2157
+ }
2158
+
2159
+ public function setAdditionalName($additionalName)
2160
+ {
2161
+ $this->additionalName = $additionalName;
2162
+ }
2163
+
2164
+ public function getAdditionalName()
2165
+ {
2166
+ return $this->additionalName;
2167
+ }
2168
+
2169
+ public function setAddress(Google_Service_Plus_ItemScope $address)
2170
+ {
2171
+ $this->address = $address;
2172
+ }
2173
+
2174
+ public function getAddress()
2175
+ {
2176
+ return $this->address;
2177
+ }
2178
+
2179
+ public function setAddressCountry($addressCountry)
2180
+ {
2181
+ $this->addressCountry = $addressCountry;
2182
+ }
2183
+
2184
+ public function getAddressCountry()
2185
+ {
2186
+ return $this->addressCountry;
2187
+ }
2188
+
2189
+ public function setAddressLocality($addressLocality)
2190
+ {
2191
+ $this->addressLocality = $addressLocality;
2192
+ }
2193
+
2194
+ public function getAddressLocality()
2195
+ {
2196
+ return $this->addressLocality;
2197
+ }
2198
+
2199
+ public function setAddressRegion($addressRegion)
2200
+ {
2201
+ $this->addressRegion = $addressRegion;
2202
+ }
2203
+
2204
+ public function getAddressRegion()
2205
+ {
2206
+ return $this->addressRegion;
2207
+ }
2208
+
2209
+ public function setAssociatedMedia($associatedMedia)
2210
+ {
2211
+ $this->associatedMedia = $associatedMedia;
2212
+ }
2213
+
2214
+ public function getAssociatedMedia()
2215
+ {
2216
+ return $this->associatedMedia;
2217
+ }
2218
+
2219
+ public function setAttendeeCount($attendeeCount)
2220
+ {
2221
+ $this->attendeeCount = $attendeeCount;
2222
+ }
2223
+
2224
+ public function getAttendeeCount()
2225
+ {
2226
+ return $this->attendeeCount;
2227
+ }
2228
+
2229
+ public function setAttendees($attendees)
2230
+ {
2231
+ $this->attendees = $attendees;
2232
+ }
2233
+
2234
+ public function getAttendees()
2235
+ {
2236
+ return $this->attendees;
2237
+ }
2238
+
2239
+ public function setAudio(Google_Service_Plus_ItemScope $audio)
2240
+ {
2241
+ $this->audio = $audio;
2242
+ }
2243
+
2244
+ public function getAudio()
2245
+ {
2246
+ return $this->audio;
2247
+ }
2248
+
2249
+ public function setAuthor($author)
2250
+ {
2251
+ $this->author = $author;
2252
+ }
2253
+
2254
+ public function getAuthor()
2255
+ {
2256
+ return $this->author;
2257
+ }
2258
+
2259
+ public function setBestRating($bestRating)
2260
+ {
2261
+ $this->bestRating = $bestRating;
2262
+ }
2263
+
2264
+ public function getBestRating()
2265
+ {
2266
+ return $this->bestRating;
2267
+ }
2268
+
2269
+ public function setBirthDate($birthDate)
2270
+ {
2271
+ $this->birthDate = $birthDate;
2272
+ }
2273
+
2274
+ public function getBirthDate()
2275
+ {
2276
+ return $this->birthDate;
2277
+ }
2278
+
2279
+ public function setByArtist(Google_Service_Plus_ItemScope $byArtist)
2280
+ {
2281
+ $this->byArtist = $byArtist;
2282
+ }
2283
+
2284
+ public function getByArtist()
2285
+ {
2286
+ return $this->byArtist;
2287
+ }
2288
+
2289
+ public function setCaption($caption)
2290
+ {
2291
+ $this->caption = $caption;
2292
+ }
2293
+
2294
+ public function getCaption()
2295
+ {
2296
+ return $this->caption;
2297
+ }
2298
+
2299
+ public function setContentSize($contentSize)
2300
+ {
2301
+ $this->contentSize = $contentSize;
2302
+ }
2303
+
2304
+ public function getContentSize()
2305
+ {
2306
+ return $this->contentSize;
2307
+ }
2308
+
2309
+ public function setContentUrl($contentUrl)
2310
+ {
2311
+ $this->contentUrl = $contentUrl;
2312
+ }
2313
+
2314
+ public function getContentUrl()
2315
+ {
2316
+ return $this->contentUrl;
2317
+ }
2318
+
2319
+ public function setContributor($contributor)
2320
+ {
2321
+ $this->contributor = $contributor;
2322
+ }
2323
+
2324
+ public function getContributor()
2325
+ {
2326
+ return $this->contributor;
2327
+ }
2328
+
2329
+ public function setDateCreated($dateCreated)
2330
+ {
2331
+ $this->dateCreated = $dateCreated;
2332
+ }
2333
+
2334
+ public function getDateCreated()
2335
+ {
2336
+ return $this->dateCreated;
2337
+ }
2338
+
2339
+ public function setDateModified($dateModified)
2340
+ {
2341
+ $this->dateModified = $dateModified;
2342
+ }
2343
+
2344
+ public function getDateModified()
2345
+ {
2346
+ return $this->dateModified;
2347
+ }
2348
+
2349
+ public function setDatePublished($datePublished)
2350
+ {
2351
+ $this->datePublished = $datePublished;
2352
+ }
2353
+
2354
+ public function getDatePublished()
2355
+ {
2356
+ return $this->datePublished;
2357
+ }
2358
+
2359
+ public function setDescription($description)
2360
+ {
2361
+ $this->description = $description;
2362
+ }
2363
+
2364
+ public function getDescription()
2365
+ {
2366
+ return $this->description;
2367
+ }
2368
+
2369
+ public function setDuration($duration)
2370
+ {
2371
+ $this->duration = $duration;
2372
+ }
2373
+
2374
+ public function getDuration()
2375
+ {
2376
+ return $this->duration;
2377
+ }
2378
+
2379
+ public function setEmbedUrl($embedUrl)
2380
+ {
2381
+ $this->embedUrl = $embedUrl;
2382
+ }
2383
+
2384
+ public function getEmbedUrl()
2385
+ {
2386
+ return $this->embedUrl;
2387
+ }
2388
+
2389
+ public function setEndDate($endDate)
2390
+ {
2391
+ $this->endDate = $endDate;
2392
+ }
2393
+
2394
+ public function getEndDate()
2395
+ {
2396
+ return $this->endDate;
2397
+ }
2398
+
2399
+ public function setFamilyName($familyName)
2400
+ {
2401
+ $this->familyName = $familyName;
2402
+ }
2403
+
2404
+ public function getFamilyName()
2405
+ {
2406
+ return $this->familyName;
2407
+ }
2408
+
2409
+ public function setGender($gender)
2410
+ {
2411
+ $this->gender = $gender;
2412
+ }
2413
+
2414
+ public function getGender()
2415
+ {
2416
+ return $this->gender;
2417
+ }
2418
+
2419
+ public function setGeo(Google_Service_Plus_ItemScope $geo)
2420
+ {
2421
+ $this->geo = $geo;
2422
+ }
2423
+
2424
+ public function getGeo()
2425
+ {
2426
+ return $this->geo;
2427
+ }
2428
+
2429
+ public function setGivenName($givenName)
2430
+ {
2431
+ $this->givenName = $givenName;
2432
+ }
2433
+
2434
+ public function getGivenName()
2435
+ {
2436
+ return $this->givenName;
2437
+ }
2438
+
2439
+ public function setHeight($height)
2440
+ {
2441
+ $this->height = $height;
2442
+ }
2443
+
2444
+ public function getHeight()
2445
+ {
2446
+ return $this->height;
2447
+ }
2448
+
2449
+ public function setId($id)
2450
+ {
2451
+ $this->id = $id;
2452
+ }
2453
+
2454
+ public function getId()
2455
+ {
2456
+ return $this->id;
2457
+ }
2458
+
2459
+ public function setImage($image)
2460
+ {
2461
+ $this->image = $image;
2462
+ }
2463
+
2464
+ public function getImage()
2465
+ {
2466
+ return $this->image;
2467
+ }
2468
+
2469
+ public function setInAlbum(Google_Service_Plus_ItemScope $inAlbum)
2470
+ {
2471
+ $this->inAlbum = $inAlbum;
2472
+ }
2473
+
2474
+ public function getInAlbum()
2475
+ {
2476
+ return $this->inAlbum;
2477
+ }
2478
+
2479
+ public function setKind($kind)
2480
+ {
2481
+ $this->kind = $kind;
2482
+ }
2483
+
2484
+ public function getKind()
2485
+ {
2486
+ return $this->kind;
2487
+ }
2488
+
2489
+ public function setLatitude($latitude)
2490
+ {
2491
+ $this->latitude = $latitude;
2492
+ }
2493
+
2494
+ public function getLatitude()
2495
+ {
2496
+ return $this->latitude;
2497
+ }
2498
+
2499
+ public function setLocation(Google_Service_Plus_ItemScope $location)
2500
+ {
2501
+ $this->location = $location;
2502
+ }
2503
+
2504
+ public function getLocation()
2505
+ {
2506
+ return $this->location;
2507
+ }
2508
+
2509
+ public function setLongitude($longitude)
2510
+ {
2511
+ $this->longitude = $longitude;
2512
+ }
2513
+
2514
+ public function getLongitude()
2515
+ {
2516
+ return $this->longitude;
2517
+ }
2518
+
2519
+ public function setName($name)
2520
+ {
2521
+ $this->name = $name;
2522
+ }
2523
+
2524
+ public function getName()
2525
+ {
2526
+ return $this->name;
2527
+ }
2528
+
2529
+ public function setPartOfTVSeries(Google_Service_Plus_ItemScope $partOfTVSeries)
2530
+ {
2531
+ $this->partOfTVSeries = $partOfTVSeries;
2532
+ }
2533
+
2534
+ public function getPartOfTVSeries()
2535
+ {
2536
+ return $this->partOfTVSeries;
2537
+ }
2538
+
2539
+ public function setPerformers($performers)
2540
+ {
2541
+ $this->performers = $performers;
2542
+ }
2543
+
2544
+ public function getPerformers()
2545
+ {
2546
+ return $this->performers;
2547
+ }
2548
+
2549
+ public function setPlayerType($playerType)
2550
+ {
2551
+ $this->playerType = $playerType;
2552
+ }
2553
+
2554
+ public function getPlayerType()
2555
+ {
2556
+ return $this->playerType;
2557
+ }
2558
+
2559
+ public function setPostOfficeBoxNumber($postOfficeBoxNumber)
2560
+ {
2561
+ $this->postOfficeBoxNumber = $postOfficeBoxNumber;
2562
+ }
2563
+
2564
+ public function getPostOfficeBoxNumber()
2565
+ {
2566
+ return $this->postOfficeBoxNumber;
2567
+ }
2568
+
2569
+ public function setPostalCode($postalCode)
2570
+ {
2571
+ $this->postalCode = $postalCode;
2572
+ }
2573
+
2574
+ public function getPostalCode()
2575
+ {
2576
+ return $this->postalCode;
2577
+ }
2578
+
2579
+ public function setRatingValue($ratingValue)
2580
+ {
2581
+ $this->ratingValue = $ratingValue;
2582
+ }
2583
+
2584
+ public function getRatingValue()
2585
+ {
2586
+ return $this->ratingValue;
2587
+ }
2588
+
2589
+ public function setReviewRating(Google_Service_Plus_ItemScope $reviewRating)
2590
+ {
2591
+ $this->reviewRating = $reviewRating;
2592
+ }
2593
+
2594
+ public function getReviewRating()
2595
+ {
2596
+ return $this->reviewRating;
2597
+ }
2598
+
2599
+ public function setStartDate($startDate)
2600
+ {
2601
+ $this->startDate = $startDate;
2602
+ }
2603
+
2604
+ public function getStartDate()
2605
+ {
2606
+ return $this->startDate;
2607
+ }
2608
+
2609
+ public function setStreetAddress($streetAddress)
2610
+ {
2611
+ $this->streetAddress = $streetAddress;
2612
+ }
2613
+
2614
+ public function getStreetAddress()
2615
+ {
2616
+ return $this->streetAddress;
2617
+ }
2618
+
2619
+ public function setText($text)
2620
+ {
2621
+ $this->text = $text;
2622
+ }
2623
+
2624
+ public function getText()
2625
+ {
2626
+ return $this->text;
2627
+ }
2628
+
2629
+ public function setThumbnail(Google_Service_Plus_ItemScope $thumbnail)
2630
+ {
2631
+ $this->thumbnail = $thumbnail;
2632
+ }
2633
+
2634
+ public function getThumbnail()
2635
+ {
2636
+ return $this->thumbnail;
2637
+ }
2638
+
2639
+ public function setThumbnailUrl($thumbnailUrl)
2640
+ {
2641
+ $this->thumbnailUrl = $thumbnailUrl;
2642
+ }
2643
+
2644
+ public function getThumbnailUrl()
2645
+ {
2646
+ return $this->thumbnailUrl;
2647
+ }
2648
+
2649
+ public function setTickerSymbol($tickerSymbol)
2650
+ {
2651
+ $this->tickerSymbol = $tickerSymbol;
2652
+ }
2653
+
2654
+ public function getTickerSymbol()
2655
+ {
2656
+ return $this->tickerSymbol;
2657
+ }
2658
+
2659
+ public function setType($type)
2660
+ {
2661
+ $this->type = $type;
2662
+ }
2663
+
2664
+ public function getType()
2665
+ {
2666
+ return $this->type;
2667
+ }
2668
+
2669
+ public function setUrl($url)
2670
+ {
2671
+ $this->url = $url;
2672
+ }
2673
+
2674
+ public function getUrl()
2675
+ {
2676
+ return $this->url;
2677
+ }
2678
+
2679
+ public function setWidth($width)
2680
+ {
2681
+ $this->width = $width;
2682
+ }
2683
+
2684
+ public function getWidth()
2685
+ {
2686
+ return $this->width;
2687
+ }
2688
+
2689
+ public function setWorstRating($worstRating)
2690
+ {
2691
+ $this->worstRating = $worstRating;
2692
+ }
2693
+
2694
+ public function getWorstRating()
2695
+ {
2696
+ return $this->worstRating;
2697
+ }
2698
+ }
2699
+
2700
+ class Google_Service_Plus_Moment extends Google_Model
2701
+ {
2702
+ public $id;
2703
+ public $kind;
2704
+ protected $objectType = 'Google_Service_Plus_ItemScope';
2705
+ protected $objectDataType = '';
2706
+ protected $resultType = 'Google_Service_Plus_ItemScope';
2707
+ protected $resultDataType = '';
2708
+ public $startDate;
2709
+ protected $targetType = 'Google_Service_Plus_ItemScope';
2710
+ protected $targetDataType = '';
2711
+ public $type;
2712
+
2713
+ public function setId($id)
2714
+ {
2715
+ $this->id = $id;
2716
+ }
2717
+
2718
+ public function getId()
2719
+ {
2720
+ return $this->id;
2721
+ }
2722
+
2723
+ public function setKind($kind)
2724
+ {
2725
+ $this->kind = $kind;
2726
+ }
2727
+
2728
+ public function getKind()
2729
+ {
2730
+ return $this->kind;
2731
+ }
2732
+
2733
+ public function setObject(Google_Service_Plus_ItemScope $object)
2734
+ {
2735
+ $this->object = $object;
2736
+ }
2737
+
2738
+ public function getObject()
2739
+ {
2740
+ return $this->object;
2741
+ }
2742
+
2743
+ public function setResult(Google_Service_Plus_ItemScope $result)
2744
+ {
2745
+ $this->result = $result;
2746
+ }
2747
+
2748
+ public function getResult()
2749
+ {
2750
+ return $this->result;
2751
+ }
2752
+
2753
+ public function setStartDate($startDate)
2754
+ {
2755
+ $this->startDate = $startDate;
2756
+ }
2757
+
2758
+ public function getStartDate()
2759
+ {
2760
+ return $this->startDate;
2761
+ }
2762
+
2763
+ public function setTarget(Google_Service_Plus_ItemScope $target)
2764
+ {
2765
+ $this->target = $target;
2766
+ }
2767
+
2768
+ public function getTarget()
2769
+ {
2770
+ return $this->target;
2771
+ }
2772
+
2773
+ public function setType($type)
2774
+ {
2775
+ $this->type = $type;
2776
+ }
2777
+
2778
+ public function getType()
2779
+ {
2780
+ return $this->type;
2781
+ }
2782
+ }
2783
+
2784
+ class Google_Service_Plus_MomentsFeed extends Google_Collection
2785
+ {
2786
+ public $etag;
2787
+ protected $itemsType = 'Google_Service_Plus_Moment';
2788
+ protected $itemsDataType = 'array';
2789
+ public $kind;
2790
+ public $nextLink;
2791
+ public $nextPageToken;
2792
+ public $selfLink;
2793
+ public $title;
2794
+ public $updated;
2795
+
2796
+ public function setEtag($etag)
2797
+ {
2798
+ $this->etag = $etag;
2799
+ }
2800
+
2801
+ public function getEtag()
2802
+ {
2803
+ return $this->etag;
2804
+ }
2805
+
2806
+ public function setItems($items)
2807
+ {
2808
+ $this->items = $items;
2809
+ }
2810
+
2811
+ public function getItems()
2812
+ {
2813
+ return $this->items;
2814
+ }
2815
+
2816
+ public function setKind($kind)
2817
+ {
2818
+ $this->kind = $kind;
2819
+ }
2820
+
2821
+ public function getKind()
2822
+ {
2823
+ return $this->kind;
2824
+ }
2825
+
2826
+ public function setNextLink($nextLink)
2827
+ {
2828
+ $this->nextLink = $nextLink;
2829
+ }
2830
+
2831
+ public function getNextLink()
2832
+ {
2833
+ return $this->nextLink;
2834
+ }
2835
+
2836
+ public function setNextPageToken($nextPageToken)
2837
+ {
2838
+ $this->nextPageToken = $nextPageToken;
2839
+ }
2840
+
2841
+ public function getNextPageToken()
2842
+ {
2843
+ return $this->nextPageToken;
2844
+ }
2845
+
2846
+ public function setSelfLink($selfLink)
2847
+ {
2848
+ $this->selfLink = $selfLink;
2849
+ }
2850
+
2851
+ public function getSelfLink()
2852
+ {
2853
+ return $this->selfLink;
2854
+ }
2855
+
2856
+ public function setTitle($title)
2857
+ {
2858
+ $this->title = $title;
2859
+ }
2860
+
2861
+ public function getTitle()
2862
+ {
2863
+ return $this->title;
2864
+ }
2865
+
2866
+ public function setUpdated($updated)
2867
+ {
2868
+ $this->updated = $updated;
2869
+ }
2870
+
2871
+ public function getUpdated()
2872
+ {
2873
+ return $this->updated;
2874
+ }
2875
+ }
2876
+
2877
+ class Google_Service_Plus_PeopleFeed extends Google_Collection
2878
+ {
2879
+ public $etag;
2880
+ protected $itemsType = 'Google_Service_Plus_Person';
2881
+ protected $itemsDataType = 'array';
2882
+ public $kind;
2883
+ public $nextPageToken;
2884
+ public $selfLink;
2885
+ public $title;
2886
+ public $totalItems;
2887
+
2888
+ public function setEtag($etag)
2889
+ {
2890
+ $this->etag = $etag;
2891
+ }
2892
+
2893
+ public function getEtag()
2894
+ {
2895
+ return $this->etag;
2896
+ }
2897
+
2898
+ public function setItems($items)
2899
+ {
2900
+ $this->items = $items;
2901
+ }
2902
+
2903
+ public function getItems()
2904
+ {
2905
+ return $this->items;
2906
+ }
2907
+
2908
+ public function setKind($kind)
2909
+ {
2910
+ $this->kind = $kind;
2911
+ }
2912
+
2913
+ public function getKind()
2914
+ {
2915
+ return $this->kind;
2916
+ }
2917
+
2918
+ public function setNextPageToken($nextPageToken)
2919
+ {
2920
+ $this->nextPageToken = $nextPageToken;
2921
+ }
2922
+
2923
+ public function getNextPageToken()
2924
+ {
2925
+ return $this->nextPageToken;
2926
+ }
2927
+
2928
+ public function setSelfLink($selfLink)
2929
+ {
2930
+ $this->selfLink = $selfLink;
2931
+ }
2932
+
2933
+ public function getSelfLink()
2934
+ {
2935
+ return $this->selfLink;
2936
+ }
2937
+
2938
+ public function setTitle($title)
2939
+ {
2940
+ $this->title = $title;
2941
+ }
2942
+
2943
+ public function getTitle()
2944
+ {
2945
+ return $this->title;
2946
+ }
2947
+
2948
+ public function setTotalItems($totalItems)
2949
+ {
2950
+ $this->totalItems = $totalItems;
2951
+ }
2952
+
2953
+ public function getTotalItems()
2954
+ {
2955
+ return $this->totalItems;
2956
+ }
2957
+ }
2958
+
2959
+ class Google_Service_Plus_Person extends Google_Collection
2960
+ {
2961
+ public $aboutMe;
2962
+ protected $ageRangeType = 'Google_Service_Plus_PersonAgeRange';
2963
+ protected $ageRangeDataType = '';
2964
+ public $birthday;
2965
+ public $braggingRights;
2966
+ public $circledByCount;
2967
+ protected $coverType = 'Google_Service_Plus_PersonCover';
2968
+ protected $coverDataType = '';
2969
+ public $currentLocation;
2970
+ public $displayName;
2971
+ public $domain;
2972
+ protected $emailsType = 'Google_Service_Plus_PersonEmails';
2973
+ protected $emailsDataType = 'array';
2974
+ public $etag;
2975
+ public $gender;
2976
+ public $id;
2977
+ protected $imageType = 'Google_Service_Plus_PersonImage';
2978
+ protected $imageDataType = '';
2979
+ public $isPlusUser;
2980
+ public $kind;
2981
+ public $language;
2982
+ protected $nameType = 'Google_Service_Plus_PersonName';
2983
+ protected $nameDataType = '';
2984
+ public $nickname;
2985
+ public $objectType;
2986
+ public $occupation;
2987
+ protected $organizationsType = 'Google_Service_Plus_PersonOrganizations';
2988
+ protected $organizationsDataType = 'array';
2989
+ protected $placesLivedType = 'Google_Service_Plus_PersonPlacesLived';
2990
+ protected $placesLivedDataType = 'array';
2991
+ public $plusOneCount;
2992
+ public $relationshipStatus;
2993
+ public $skills;
2994
+ public $tagline;
2995
+ public $url;
2996
+ protected $urlsType = 'Google_Service_Plus_PersonUrls';
2997
+ protected $urlsDataType = 'array';
2998
+ public $verified;
2999
+
3000
+ public function setAboutMe($aboutMe)
3001
+ {
3002
+ $this->aboutMe = $aboutMe;
3003
+ }
3004
+
3005
+ public function getAboutMe()
3006
+ {
3007
+ return $this->aboutMe;
3008
+ }
3009
+
3010
+ public function setAgeRange(Google_Service_Plus_PersonAgeRange $ageRange)
3011
+ {
3012
+ $this->ageRange = $ageRange;
3013
+ }
3014
+
3015
+ public function getAgeRange()
3016
+ {
3017
+ return $this->ageRange;
3018
+ }
3019
+
3020
+ public function setBirthday($birthday)
3021
+ {
3022
+ $this->birthday = $birthday;
3023
+ }
3024
+
3025
+ public function getBirthday()
3026
+ {
3027
+ return $this->birthday;
3028
+ }
3029
+
3030
+ public function setBraggingRights($braggingRights)
3031
+ {
3032
+ $this->braggingRights = $braggingRights;
3033
+ }
3034
+
3035
+ public function getBraggingRights()
3036
+ {
3037
+ return $this->braggingRights;
3038
+ }
3039
+
3040
+ public function setCircledByCount($circledByCount)
3041
+ {
3042
+ $this->circledByCount = $circledByCount;
3043
+ }
3044
+
3045
+ public function getCircledByCount()
3046
+ {
3047
+ return $this->circledByCount;
3048
+ }
3049
+
3050
+ public function setCover(Google_Service_Plus_PersonCover $cover)
3051
+ {
3052
+ $this->cover = $cover;
3053
+ }
3054
+
3055
+ public function getCover()
3056
+ {
3057
+ return $this->cover;
3058
+ }
3059
+
3060
+ public function setCurrentLocation($currentLocation)
3061
+ {
3062
+ $this->currentLocation = $currentLocation;
3063
+ }
3064
+
3065
+ public function getCurrentLocation()
3066
+ {
3067
+ return $this->currentLocation;
3068
+ }
3069
+
3070
+ public function setDisplayName($displayName)
3071
+ {
3072
+ $this->displayName = $displayName;
3073
+ }
3074
+
3075
+ public function getDisplayName()
3076
+ {
3077
+ return $this->displayName;
3078
+ }
3079
+
3080
+ public function setDomain($domain)
3081
+ {
3082
+ $this->domain = $domain;
3083
+ }
3084
+
3085
+ public function getDomain()
3086
+ {
3087
+ return $this->domain;
3088
+ }
3089
+
3090
+ public function setEmails($emails)
3091
+ {
3092
+ $this->emails = $emails;
3093
+ }
3094
+
3095
+ public function getEmails()
3096
+ {
3097
+ return $this->emails;
3098
+ }
3099
+
3100
+ public function setEtag($etag)
3101
+ {
3102
+ $this->etag = $etag;
3103
+ }
3104
+
3105
+ public function getEtag()
3106
+ {
3107
+ return $this->etag;
3108
+ }
3109
+
3110
+ public function setGender($gender)
3111
+ {
3112
+ $this->gender = $gender;
3113
+ }
3114
+
3115
+ public function getGender()
3116
+ {
3117
+ return $this->gender;
3118
+ }
3119
+
3120
+ public function setId($id)
3121
+ {
3122
+ $this->id = $id;
3123
+ }
3124
+
3125
+ public function getId()
3126
+ {
3127
+ return $this->id;
3128
+ }
3129
+
3130
+ public function setImage(Google_Service_Plus_PersonImage $image)
3131
+ {
3132
+ $this->image = $image;
3133
+ }
3134
+
3135
+ public function getImage()
3136
+ {
3137
+ return $this->image;
3138
+ }
3139
+
3140
+ public function setIsPlusUser($isPlusUser)
3141
+ {
3142
+ $this->isPlusUser = $isPlusUser;
3143
+ }
3144
+
3145
+ public function getIsPlusUser()
3146
+ {
3147
+ return $this->isPlusUser;
3148
+ }
3149
+
3150
+ public function setKind($kind)
3151
+ {
3152
+ $this->kind = $kind;
3153
+ }
3154
+
3155
+ public function getKind()
3156
+ {
3157
+ return $this->kind;
3158
+ }
3159
+
3160
+ public function setLanguage($language)
3161
+ {
3162
+ $this->language = $language;
3163
+ }
3164
+
3165
+ public function getLanguage()
3166
+ {
3167
+ return $this->language;
3168
+ }
3169
+
3170
+ public function setName(Google_Service_Plus_PersonName $name)
3171
+ {
3172
+ $this->name = $name;
3173
+ }
3174
+
3175
+ public function getName()
3176
+ {
3177
+ return $this->name;
3178
+ }
3179
+
3180
+ public function setNickname($nickname)
3181
+ {
3182
+ $this->nickname = $nickname;
3183
+ }
3184
+
3185
+ public function getNickname()
3186
+ {
3187
+ return $this->nickname;
3188
+ }
3189
+
3190
+ public function setObjectType($objectType)
3191
+ {
3192
+ $this->objectType = $objectType;
3193
+ }
3194
+
3195
+ public function getObjectType()
3196
+ {
3197
+ return $this->objectType;
3198
+ }
3199
+
3200
+ public function setOccupation($occupation)
3201
+ {
3202
+ $this->occupation = $occupation;
3203
+ }
3204
+
3205
+ public function getOccupation()
3206
+ {
3207
+ return $this->occupation;
3208
+ }
3209
+
3210
+ public function setOrganizations($organizations)
3211
+ {
3212
+ $this->organizations = $organizations;
3213
+ }
3214
+
3215
+ public function getOrganizations()
3216
+ {
3217
+ return $this->organizations;
3218
+ }
3219
+
3220
+ public function setPlacesLived($placesLived)
3221
+ {
3222
+ $this->placesLived = $placesLived;
3223
+ }
3224
+
3225
+ public function getPlacesLived()
3226
+ {
3227
+ return $this->placesLived;
3228
+ }
3229
+
3230
+ public function setPlusOneCount($plusOneCount)
3231
+ {
3232
+ $this->plusOneCount = $plusOneCount;
3233
+ }
3234
+
3235
+ public function getPlusOneCount()
3236
+ {
3237
+ return $this->plusOneCount;
3238
+ }
3239
+
3240
+ public function setRelationshipStatus($relationshipStatus)
3241
+ {
3242
+ $this->relationshipStatus = $relationshipStatus;
3243
+ }
3244
+
3245
+ public function getRelationshipStatus()
3246
+ {
3247
+ return $this->relationshipStatus;
3248
+ }
3249
+
3250
+ public function setSkills($skills)
3251
+ {
3252
+ $this->skills = $skills;
3253
+ }
3254
+
3255
+ public function getSkills()
3256
+ {
3257
+ return $this->skills;
3258
+ }
3259
+
3260
+ public function setTagline($tagline)
3261
+ {
3262
+ $this->tagline = $tagline;
3263
+ }
3264
+
3265
+ public function getTagline()
3266
+ {
3267
+ return $this->tagline;
3268
+ }
3269
+
3270
+ public function setUrl($url)
3271
+ {
3272
+ $this->url = $url;
3273
+ }
3274
+
3275
+ public function getUrl()
3276
+ {
3277
+ return $this->url;
3278
+ }
3279
+
3280
+ public function setUrls($urls)
3281
+ {
3282
+ $this->urls = $urls;
3283
+ }
3284
+
3285
+ public function getUrls()
3286
+ {
3287
+ return $this->urls;
3288
+ }
3289
+
3290
+ public function setVerified($verified)
3291
+ {
3292
+ $this->verified = $verified;
3293
+ }
3294
+
3295
+ public function getVerified()
3296
+ {
3297
+ return $this->verified;
3298
+ }
3299
+ }
3300
+
3301
+ class Google_Service_Plus_PersonAgeRange extends Google_Model
3302
+ {
3303
+ public $max;
3304
+ public $min;
3305
+
3306
+ public function setMax($max)
3307
+ {
3308
+ $this->max = $max;
3309
+ }
3310
+
3311
+ public function getMax()
3312
+ {
3313
+ return $this->max;
3314
+ }
3315
+
3316
+ public function setMin($min)
3317
+ {
3318
+ $this->min = $min;
3319
+ }
3320
+
3321
+ public function getMin()
3322
+ {
3323
+ return $this->min;
3324
+ }
3325
+ }
3326
+
3327
+ class Google_Service_Plus_PersonCover extends Google_Model
3328
+ {
3329
+ protected $coverInfoType = 'Google_Service_Plus_PersonCoverCoverInfo';
3330
+ protected $coverInfoDataType = '';
3331
+ protected $coverPhotoType = 'Google_Service_Plus_PersonCoverCoverPhoto';
3332
+ protected $coverPhotoDataType = '';
3333
+ public $layout;
3334
+
3335
+ public function setCoverInfo(Google_Service_Plus_PersonCoverCoverInfo $coverInfo)
3336
+ {
3337
+ $this->coverInfo = $coverInfo;
3338
+ }
3339
+
3340
+ public function getCoverInfo()
3341
+ {
3342
+ return $this->coverInfo;
3343
+ }
3344
+
3345
+ public function setCoverPhoto(Google_Service_Plus_PersonCoverCoverPhoto $coverPhoto)
3346
+ {
3347
+ $this->coverPhoto = $coverPhoto;
3348
+ }
3349
+
3350
+ public function getCoverPhoto()
3351
+ {
3352
+ return $this->coverPhoto;
3353
+ }
3354
+
3355
+ public function setLayout($layout)
3356
+ {
3357
+ $this->layout = $layout;
3358
+ }
3359
+
3360
+ public function getLayout()
3361
+ {
3362
+ return $this->layout;
3363
+ }
3364
+ }
3365
+
3366
+ class Google_Service_Plus_PersonCoverCoverInfo extends Google_Model
3367
+ {
3368
+ public $leftImageOffset;
3369
+ public $topImageOffset;
3370
+
3371
+ public function setLeftImageOffset($leftImageOffset)
3372
+ {
3373
+ $this->leftImageOffset = $leftImageOffset;
3374
+ }
3375
+
3376
+ public function getLeftImageOffset()
3377
+ {
3378
+ return $this->leftImageOffset;
3379
+ }
3380
+
3381
+ public function setTopImageOffset($topImageOffset)
3382
+ {
3383
+ $this->topImageOffset = $topImageOffset;
3384
+ }
3385
+
3386
+ public function getTopImageOffset()
3387
+ {
3388
+ return $this->topImageOffset;
3389
+ }
3390
+ }
3391
+
3392
+ class Google_Service_Plus_PersonCoverCoverPhoto extends Google_Model
3393
+ {
3394
+ public $height;
3395
+ public $url;
3396
+ public $width;
3397
+
3398
+ public function setHeight($height)
3399
+ {
3400
+ $this->height = $height;
3401
+ }
3402
+
3403
+ public function getHeight()
3404
+ {
3405
+ return $this->height;
3406
+ }
3407
+
3408
+ public function setUrl($url)
3409
+ {
3410
+ $this->url = $url;
3411
+ }
3412
+
3413
+ public function getUrl()
3414
+ {
3415
+ return $this->url;
3416
+ }
3417
+
3418
+ public function setWidth($width)
3419
+ {
3420
+ $this->width = $width;
3421
+ }
3422
+
3423
+ public function getWidth()
3424
+ {
3425
+ return $this->width;
3426
+ }
3427
+ }
3428
+
3429
+ class Google_Service_Plus_PersonEmails extends Google_Model
3430
+ {
3431
+ public $type;
3432
+ public $value;
3433
+
3434
+ public function setType($type)
3435
+ {
3436
+ $this->type = $type;
3437
+ }
3438
+
3439
+ public function getType()
3440
+ {
3441
+ return $this->type;
3442
+ }
3443
+
3444
+ public function setValue($value)
3445
+ {
3446
+ $this->value = $value;
3447
+ }
3448
+
3449
+ public function getValue()
3450
+ {
3451
+ return $this->value;
3452
+ }
3453
+ }
3454
+
3455
+ class Google_Service_Plus_PersonImage extends Google_Model
3456
+ {
3457
+ public $isDefault;
3458
+ public $url;
3459
+
3460
+ public function setIsDefault($isDefault)
3461
+ {
3462
+ $this->isDefault = $isDefault;
3463
+ }
3464
+
3465
+ public function getIsDefault()
3466
+ {
3467
+ return $this->isDefault;
3468
+ }
3469
+
3470
+ public function setUrl($url)
3471
+ {
3472
+ $this->url = $url;
3473
+ }
3474
+
3475
+ public function getUrl()
3476
+ {
3477
+ return $this->url;
3478
+ }
3479
+ }
3480
+
3481
+ class Google_Service_Plus_PersonName extends Google_Model
3482
+ {
3483
+ public $familyName;
3484
+ public $formatted;
3485
+ public $givenName;
3486
+ public $honorificPrefix;
3487
+ public $honorificSuffix;
3488
+ public $middleName;
3489
+
3490
+ public function setFamilyName($familyName)
3491
+ {
3492
+ $this->familyName = $familyName;
3493
+ }
3494
+
3495
+ public function getFamilyName()
3496
+ {
3497
+ return $this->familyName;
3498
+ }
3499
+
3500
+ public function setFormatted($formatted)
3501
+ {
3502
+ $this->formatted = $formatted;
3503
+ }
3504
+
3505
+ public function getFormatted()
3506
+ {
3507
+ return $this->formatted;
3508
+ }
3509
+
3510
+ public function setGivenName($givenName)
3511
+ {
3512
+ $this->givenName = $givenName;
3513
+ }
3514
+
3515
+ public function getGivenName()
3516
+ {
3517
+ return $this->givenName;
3518
+ }
3519
+
3520
+ public function setHonorificPrefix($honorificPrefix)
3521
+ {
3522
+ $this->honorificPrefix = $honorificPrefix;
3523
+ }
3524
+
3525
+ public function getHonorificPrefix()
3526
+ {
3527
+ return $this->honorificPrefix;
3528
+ }
3529
+
3530
+ public function setHonorificSuffix($honorificSuffix)
3531
+ {
3532
+ $this->honorificSuffix = $honorificSuffix;
3533
+ }
3534
+
3535
+ public function getHonorificSuffix()
3536
+ {
3537
+ return $this->honorificSuffix;
3538
+ }
3539
+
3540
+ public function setMiddleName($middleName)
3541
+ {
3542
+ $this->middleName = $middleName;
3543
+ }
3544
+
3545
+ public function getMiddleName()
3546
+ {
3547
+ return $this->middleName;
3548
+ }
3549
+ }
3550
+
3551
+ class Google_Service_Plus_PersonOrganizations extends Google_Model
3552
+ {
3553
+ public $department;
3554
+ public $description;
3555
+ public $endDate;
3556
+ public $location;
3557
+ public $name;
3558
+ public $primary;
3559
+ public $startDate;
3560
+ public $title;
3561
+ public $type;
3562
+
3563
+ public function setDepartment($department)
3564
+ {
3565
+ $this->department = $department;
3566
+ }
3567
+
3568
+ public function getDepartment()
3569
+ {
3570
+ return $this->department;
3571
+ }
3572
+
3573
+ public function setDescription($description)
3574
+ {
3575
+ $this->description = $description;
3576
+ }
3577
+
3578
+ public function getDescription()
3579
+ {
3580
+ return $this->description;
3581
+ }
3582
+
3583
+ public function setEndDate($endDate)
3584
+ {
3585
+ $this->endDate = $endDate;
3586
+ }
3587
+
3588
+ public function getEndDate()
3589
+ {
3590
+ return $this->endDate;
3591
+ }
3592
+
3593
+ public function setLocation($location)
3594
+ {
3595
+ $this->location = $location;
3596
+ }
3597
+
3598
+ public function getLocation()
3599
+ {
3600
+ return $this->location;
3601
+ }
3602
+
3603
+ public function setName($name)
3604
+ {
3605
+ $this->name = $name;
3606
+ }
3607
+
3608
+ public function getName()
3609
+ {
3610
+ return $this->name;
3611
+ }
3612
+
3613
+ public function setPrimary($primary)
3614
+ {
3615
+ $this->primary = $primary;
3616
+ }
3617
+
3618
+ public function getPrimary()
3619
+ {
3620
+ return $this->primary;
3621
+ }
3622
+
3623
+ public function setStartDate($startDate)
3624
+ {
3625
+ $this->startDate = $startDate;
3626
+ }
3627
+
3628
+ public function getStartDate()
3629
+ {
3630
+ return $this->startDate;
3631
+ }
3632
+
3633
+ public function setTitle($title)
3634
+ {
3635
+ $this->title = $title;
3636
+ }
3637
+
3638
+ public function getTitle()
3639
+ {
3640
+ return $this->title;
3641
+ }
3642
+
3643
+ public function setType($type)
3644
+ {
3645
+ $this->type = $type;
3646
+ }
3647
+
3648
+ public function getType()
3649
+ {
3650
+ return $this->type;
3651
+ }
3652
+ }
3653
+
3654
+ class Google_Service_Plus_PersonPlacesLived extends Google_Model
3655
+ {
3656
+ public $primary;
3657
+ public $value;
3658
+
3659
+ public function setPrimary($primary)
3660
+ {
3661
+ $this->primary = $primary;
3662
+ }
3663
+
3664
+ public function getPrimary()
3665
+ {
3666
+ return $this->primary;
3667
+ }
3668
+
3669
+ public function setValue($value)
3670
+ {
3671
+ $this->value = $value;
3672
+ }
3673
+
3674
+ public function getValue()
3675
+ {
3676
+ return $this->value;
3677
+ }
3678
+ }
3679
+
3680
+ class Google_Service_Plus_PersonUrls extends Google_Model
3681
+ {
3682
+ public $label;
3683
+ public $type;
3684
+ public $value;
3685
+
3686
+ public function setLabel($label)
3687
+ {
3688
+ $this->label = $label;
3689
+ }
3690
+
3691
+ public function getLabel()
3692
+ {
3693
+ return $this->label;
3694
+ }
3695
+
3696
+ public function setType($type)
3697
+ {
3698
+ $this->type = $type;
3699
+ }
3700
+
3701
+ public function getType()
3702
+ {
3703
+ return $this->type;
3704
+ }
3705
+
3706
+ public function setValue($value)
3707
+ {
3708
+ $this->value = $value;
3709
+ }
3710
+
3711
+ public function getValue()
3712
+ {
3713
+ return $this->value;
3714
+ }
3715
+ }
3716
+
3717
+ class Google_Service_Plus_Place extends Google_Model
3718
+ {
3719
+ protected $addressType = 'Google_Service_Plus_PlaceAddress';
3720
+ protected $addressDataType = '';
3721
+ public $displayName;
3722
+ public $id;
3723
+ public $kind;
3724
+ protected $positionType = 'Google_Service_Plus_PlacePosition';
3725
+ protected $positionDataType = '';
3726
+
3727
+ public function setAddress(Google_Service_Plus_PlaceAddress $address)
3728
+ {
3729
+ $this->address = $address;
3730
+ }
3731
+
3732
+ public function getAddress()
3733
+ {
3734
+ return $this->address;
3735
+ }
3736
+
3737
+ public function setDisplayName($displayName)
3738
+ {
3739
+ $this->displayName = $displayName;
3740
+ }
3741
+
3742
+ public function getDisplayName()
3743
+ {
3744
+ return $this->displayName;
3745
+ }
3746
+
3747
+ public function setId($id)
3748
+ {
3749
+ $this->id = $id;
3750
+ }
3751
+
3752
+ public function getId()
3753
+ {
3754
+ return $this->id;
3755
+ }
3756
+
3757
+ public function setKind($kind)
3758
+ {
3759
+ $this->kind = $kind;
3760
+ }
3761
+
3762
+ public function getKind()
3763
+ {
3764
+ return $this->kind;
3765
+ }
3766
+
3767
+ public function setPosition(Google_Service_Plus_PlacePosition $position)
3768
+ {
3769
+ $this->position = $position;
3770
+ }
3771
+
3772
+ public function getPosition()
3773
+ {
3774
+ return $this->position;
3775
+ }
3776
+ }
3777
+
3778
+ class Google_Service_Plus_PlaceAddress extends Google_Model
3779
+ {
3780
+ public $formatted;
3781
+
3782
+ public function setFormatted($formatted)
3783
+ {
3784
+ $this->formatted = $formatted;
3785
+ }
3786
+
3787
+ public function getFormatted()
3788
+ {
3789
+ return $this->formatted;
3790
+ }
3791
+ }
3792
+
3793
+ class Google_Service_Plus_PlacePosition extends Google_Model
3794
+ {
3795
+ public $latitude;
3796
+ public $longitude;
3797
+
3798
+ public function setLatitude($latitude)
3799
+ {
3800
+ $this->latitude = $latitude;
3801
+ }
3802
+
3803
+ public function getLatitude()
3804
+ {
3805
+ return $this->latitude;
3806
+ }
3807
+
3808
+ public function setLongitude($longitude)
3809
+ {
3810
+ $this->longitude = $longitude;
3811
+ }
3812
+
3813
+ public function getLongitude()
3814
+ {
3815
+ return $this->longitude;
3816
+ }
3817
+ }
3818
+
3819
+ class Google_Service_Plus_PlusAclentryResource extends Google_Model
3820
+ {
3821
+ public $displayName;
3822
+ public $id;
3823
+ public $type;
3824
+
3825
+ public function setDisplayName($displayName)
3826
+ {
3827
+ $this->displayName = $displayName;
3828
+ }
3829
+
3830
+ public function getDisplayName()
3831
+ {
3832
+ return $this->displayName;
3833
+ }
3834
+
3835
+ public function setId($id)
3836
+ {
3837
+ $this->id = $id;
3838
+ }
3839
+
3840
+ public function getId()
3841
+ {
3842
+ return $this->id;
3843
+ }
3844
+
3845
+ public function setType($type)
3846
+ {
3847
+ $this->type = $type;
3848
+ }
3849
+
3850
+ public function getType()
3851
+ {
3852
+ return $this->type;
3853
+ }
3854
+ }
google/Service/Resource.php ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Client.php";
19
+ require_once APSL_PLUGIN_DIR."google/Exception.php";
20
+ require_once APSL_PLUGIN_DIR."google/Utils.php";
21
+ require_once APSL_PLUGIN_DIR."google/Http/Request.php";
22
+ require_once APSL_PLUGIN_DIR."google/Http/MediaFileUpload.php";
23
+ require_once APSL_PLUGIN_DIR."google/Http/REST.php";
24
+
25
+ /**
26
+ * Implements the actual methods/resources of the discovered Google API using magic function
27
+ * calling overloading (__call()), which on call will see if the method name (plus.activities.list)
28
+ * is available in this service, and if so construct an apiHttpRequest representing it.
29
+ *
30
+ * @author Chris Chabot <chabotc@google.com>
31
+ * @author Chirag Shah <chirags@google.com>
32
+ *
33
+ */
34
+ class Google_Service_Resource
35
+ {
36
+ // Valid query parameters that work, but don't appear in discovery.
37
+ private $stackParameters = array(
38
+ 'alt' => array('type' => 'string', 'location' => 'query'),
39
+ 'fields' => array('type' => 'string', 'location' => 'query'),
40
+ 'trace' => array('type' => 'string', 'location' => 'query'),
41
+ 'userIp' => array('type' => 'string', 'location' => 'query'),
42
+ 'userip' => array('type' => 'string', 'location' => 'query'),
43
+ 'quotaUser' => array('type' => 'string', 'location' => 'query'),
44
+ 'data' => array('type' => 'string', 'location' => 'body'),
45
+ 'mimeType' => array('type' => 'string', 'location' => 'header'),
46
+ 'uploadType' => array('type' => 'string', 'location' => 'query'),
47
+ 'mediaUpload' => array('type' => 'complex', 'location' => 'query'),
48
+ );
49
+
50
+ /** @var Google_Service $service */
51
+ private $service;
52
+
53
+ /** @var Google_Client $client */
54
+ private $client;
55
+
56
+ /** @var string $serviceName */
57
+ private $serviceName;
58
+
59
+ /** @var string $resourceName */
60
+ private $resourceName;
61
+
62
+ /** @var array $methods */
63
+ private $methods;
64
+
65
+ public function __construct($service, $serviceName, $resourceName, $resource)
66
+ {
67
+ $this->service = $service;
68
+ $this->client = $service->getClient();
69
+ $this->serviceName = $serviceName;
70
+ $this->resourceName = $resourceName;
71
+ $this->methods = isset($resource['methods']) ?
72
+ $resource['methods'] :
73
+ array($resourceName => $resource);
74
+ }
75
+
76
+ /**
77
+ * TODO(ianbarber): This function needs simplifying.
78
+ * @param $name
79
+ * @param $arguments
80
+ * @param $expected_class - optional, the expected class name
81
+ * @return Google_Http_Request|expected_class
82
+ * @throws Google_Exception
83
+ */
84
+ public function call($name, $arguments, $expected_class = null)
85
+ {
86
+ if (! isset($this->methods[$name])) {
87
+ throw new Google_Exception(
88
+ "Unknown function: " .
89
+ "{$this->serviceName}->{$this->resourceName}->{$name}()"
90
+ );
91
+ }
92
+ $method = $this->methods[$name];
93
+ $parameters = $arguments[0];
94
+
95
+ // postBody is a special case since it's not defined in the discovery
96
+ // document as parameter, but we abuse the param entry for storing it.
97
+ $postBody = null;
98
+ if (isset($parameters['postBody'])) {
99
+ if ($parameters['postBody'] instanceof Google_Model) {
100
+ // In the cases the post body is an existing object, we want
101
+ // to use the smart method to create a simple object for
102
+ // for JSONification.
103
+ $parameters['postBody'] = $parameters['postBody']->toSimpleObject();
104
+ } else if (is_object($parameters['postBody'])) {
105
+ // If the post body is another kind of object, we will try and
106
+ // wrangle it into a sensible format.
107
+ $parameters['postBody'] =
108
+ $this->convertToArrayAndStripNulls($parameters['postBody']);
109
+ }
110
+ $postBody = json_encode($parameters['postBody']);
111
+ unset($parameters['postBody']);
112
+ }
113
+
114
+ // TODO(ianbarber): optParams here probably should have been
115
+ // handled already - this may well be redundant code.
116
+ if (isset($parameters['optParams'])) {
117
+ $optParams = $parameters['optParams'];
118
+ unset($parameters['optParams']);
119
+ $parameters = array_merge($parameters, $optParams);
120
+ }
121
+
122
+ if (!isset($method['parameters'])) {
123
+ $method['parameters'] = array();
124
+ }
125
+
126
+ $method['parameters'] = array_merge(
127
+ $method['parameters'],
128
+ $this->stackParameters
129
+ );
130
+ foreach ($parameters as $key => $val) {
131
+ if ($key != 'postBody' && ! isset($method['parameters'][$key])) {
132
+ throw new Google_Exception("($name) unknown parameter: '$key'");
133
+ }
134
+ }
135
+
136
+ foreach ($method['parameters'] as $paramName => $paramSpec) {
137
+ if (isset($paramSpec['required']) &&
138
+ $paramSpec['required'] &&
139
+ ! isset($parameters[$paramName])
140
+ ) {
141
+ throw new Google_Exception("($name) missing required param: '$paramName'");
142
+ }
143
+ if (isset($parameters[$paramName])) {
144
+ $value = $parameters[$paramName];
145
+ $parameters[$paramName] = $paramSpec;
146
+ $parameters[$paramName]['value'] = $value;
147
+ unset($parameters[$paramName]['required']);
148
+ } else {
149
+ // Ensure we don't pass nulls.
150
+ unset($parameters[$paramName]);
151
+ }
152
+ }
153
+
154
+ $servicePath = $this->service->servicePath;
155
+
156
+ $url = Google_Http_REST::createRequestUri(
157
+ $servicePath,
158
+ $method['path'],
159
+ $parameters
160
+ );
161
+ $httpRequest = new Google_Http_Request(
162
+ $url,
163
+ $method['httpMethod'],
164
+ null,
165
+ $postBody
166
+ );
167
+ $httpRequest->setBaseComponent($this->client->getBasePath());
168
+
169
+ if ($postBody) {
170
+ $contentTypeHeader = array();
171
+ $contentTypeHeader['content-type'] = 'application/json; charset=UTF-8';
172
+ $httpRequest->setRequestHeaders($contentTypeHeader);
173
+ $httpRequest->setPostBody($postBody);
174
+ }
175
+
176
+ $httpRequest = $this->client->getAuth()->sign($httpRequest);
177
+ $httpRequest->setExpectedClass($expected_class);
178
+
179
+ if (isset($parameters['data']) &&
180
+ ($parameters['uploadType']['value'] == 'media' || $parameters['uploadType']['value'] == 'multipart')) {
181
+ // If we are doing a simple media upload, trigger that as a convenience.
182
+ $mfu = new Google_Http_MediaFileUpload(
183
+ $this->client,
184
+ $httpRequest,
185
+ isset($parameters['mimeType']) ? $parameters['mimeType']['value'] : 'application/octet-stream',
186
+ $parameters['data']['value']
187
+ );
188
+ }
189
+
190
+ if ($this->client->shouldDefer()) {
191
+ // If we are in batch or upload mode, return the raw request.
192
+ return $httpRequest;
193
+ }
194
+
195
+ return $this->client->execute($httpRequest);
196
+ }
197
+
198
+ protected function convertToArrayAndStripNulls($o)
199
+ {
200
+ $o = (array) $o;
201
+ foreach ($o as $k => $v) {
202
+ if ($v === null) {
203
+ unset($o[$k]);
204
+ } elseif (is_object($v) || is_array($v)) {
205
+ $o[$k] = $this->convertToArrayAndStripNulls($o[$k]);
206
+ }
207
+ }
208
+ return $o;
209
+ }
210
+ }
google/Signer/Abstract.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Signs data.
20
+ *
21
+ * @author Brian Eaton <beaton@google.com>
22
+ */
23
+ abstract class Google_Signer_Abstract
24
+ {
25
+ /**
26
+ * Signs data, returns the signature as binary data.
27
+ */
28
+ abstract public function sign($data);
29
+ }
google/Signer/P12.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Auth/Exception.php";
19
+ require_once APSL_PLUGIN_DIR."google/Signer/Abstract.php";
20
+
21
+ /**
22
+ * Signs data.
23
+ *
24
+ * Only used for testing.
25
+ *
26
+ * @author Brian Eaton <beaton@google.com>
27
+ */
28
+ class Google_Signer_P12 extends Google_Signer_Abstract
29
+ {
30
+ // OpenSSL private key resource
31
+ private $privateKey;
32
+
33
+ // Creates a new signer from a .p12 file.
34
+ public function __construct($p12, $password)
35
+ {
36
+ if (!function_exists('openssl_x509_read')) {
37
+ throw new Google_Exception(
38
+ 'The Google PHP API library needs the openssl PHP extension'
39
+ );
40
+ }
41
+
42
+ // If the private key is provided directly, then this isn't in the p12
43
+ // format. Different versions of openssl support different p12 formats
44
+ // and the key from google wasn't being accepted by the version available
45
+ // at the time.
46
+ if (!$password && strpos($p12, "-----BEGIN RSA PRIVATE KEY-----") !== false) {
47
+ $this->privateKey = openssl_pkey_get_private($p12);
48
+ } else {
49
+ // This throws on error
50
+ $certs = array();
51
+ if (!openssl_pkcs12_read($p12, $certs, $password)) {
52
+ throw new Google_Auth_Exception(
53
+ "Unable to parse the p12 file. " .
54
+ "Is this a .p12 file? Is the password correct? OpenSSL error: " .
55
+ openssl_error_string()
56
+ );
57
+ }
58
+ // TODO(beaton): is this part of the contract for the openssl_pkcs12_read
59
+ // method? What happens if there are multiple private keys? Do we care?
60
+ if (!array_key_exists("pkey", $certs) || !$certs["pkey"]) {
61
+ throw new Google_Auth_Exception("No private key found in p12 file.");
62
+ }
63
+ $this->privateKey = openssl_pkey_get_private($certs['pkey']);
64
+ }
65
+
66
+ if (!$this->privateKey) {
67
+ throw new Google_Auth_Exception("Unable to load private key");
68
+ }
69
+ }
70
+
71
+ public function __destruct()
72
+ {
73
+ if ($this->privateKey) {
74
+ openssl_pkey_free($this->privateKey);
75
+ }
76
+ }
77
+
78
+ public function sign($data)
79
+ {
80
+ if (version_compare(PHP_VERSION, '5.3.0') < 0) {
81
+ throw new Google_Auth_Exception(
82
+ "PHP 5.3.0 or higher is required to use service accounts."
83
+ );
84
+ }
85
+ $hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
86
+ if (!openssl_sign($data, $signature, $this->privateKey, $hash)) {
87
+ throw new Google_Auth_Exception("Unable to sign data");
88
+ }
89
+ return $signature;
90
+ }
91
+ }
google/Utils.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Collection of static utility methods used for convenience across
20
+ * the client library.
21
+ *
22
+ * @author Chirag Shah <chirags@google.com>
23
+ */
24
+ class Google_Utils
25
+ {
26
+ public static function urlSafeB64Encode($data)
27
+ {
28
+ $b64 = base64_encode($data);
29
+ $b64 = str_replace(
30
+ array('+', '/', '\r', '\n', '='),
31
+ array('-', '_'),
32
+ $b64
33
+ );
34
+ return $b64;
35
+ }
36
+
37
+ public static function urlSafeB64Decode($b64)
38
+ {
39
+ $b64 = str_replace(
40
+ array('-', '_'),
41
+ array('+', '/'),
42
+ $b64
43
+ );
44
+ return base64_decode($b64);
45
+ }
46
+
47
+ /**
48
+ * Misc function used to count the number of bytes in a post body, in the
49
+ * world of multi-byte chars and the unpredictability of
50
+ * strlen/mb_strlen/sizeof, this is the only way to do that in a sane
51
+ * manner at the moment.
52
+ *
53
+ * This algorithm was originally developed for the
54
+ * Solar Framework by Paul M. Jones
55
+ *
56
+ * @link http://solarphp.com/
57
+ * @link http://svn.solarphp.com/core/trunk/Solar/Json.php
58
+ * @link http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php
59
+ * @param string $str
60
+ * @return int The number of bytes in a string.
61
+ */
62
+ public static function getStrLen($str)
63
+ {
64
+ $strlenVar = strlen($str);
65
+ $d = $ret = 0;
66
+ for ($count = 0; $count < $strlenVar; ++ $count) {
67
+ $ordinalValue = ord($str{$ret});
68
+ switch (true) {
69
+ case (($ordinalValue >= 0x20) && ($ordinalValue <= 0x7F)):
70
+ // characters U-00000000 - U-0000007F (same as ASCII)
71
+ $ret ++;
72
+ break;
73
+ case (($ordinalValue & 0xE0) == 0xC0):
74
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
75
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
76
+ $ret += 2;
77
+ break;
78
+ case (($ordinalValue & 0xF0) == 0xE0):
79
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
80
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
81
+ $ret += 3;
82
+ break;
83
+ case (($ordinalValue & 0xF8) == 0xF0):
84
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
85
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
86
+ $ret += 4;
87
+ break;
88
+ case (($ordinalValue & 0xFC) == 0xF8):
89
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
90
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
91
+ $ret += 5;
92
+ break;
93
+ case (($ordinalValue & 0xFE) == 0xFC):
94
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
95
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
96
+ $ret += 6;
97
+ break;
98
+ default:
99
+ $ret ++;
100
+ }
101
+ }
102
+ return $ret;
103
+ }
104
+
105
+ /**
106
+ * Normalize all keys in an array to lower-case.
107
+ * @param array $arr
108
+ * @return array Normalized array.
109
+ */
110
+ public static function normalize($arr)
111
+ {
112
+ if (!is_array($arr)) {
113
+ return array();
114
+ }
115
+
116
+ $normalized = array();
117
+ foreach ($arr as $key => $val) {
118
+ $normalized[strtolower($key)] = $val;
119
+ }
120
+ return $normalized;
121
+ }
122
+
123
+ /**
124
+ * Convert a string to camelCase
125
+ * @param string $value
126
+ * @return string
127
+ */
128
+ public static function camelCase($value)
129
+ {
130
+ $value = ucwords(str_replace(array('-', '_'), ' ', $value));
131
+ $value = str_replace(' ', '', $value);
132
+ $value[0] = strtolower($value[0]);
133
+ return $value;
134
+ }
135
+ }
google/Utils/URITemplate.php ADDED
@@ -0,0 +1,333 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Implementation of levels 1-3 of the URI Template spec.
20
+ * @see http://tools.ietf.org/html/rfc6570
21
+ */
22
+ class Google_Utils_URITemplate
23
+ {
24
+ const TYPE_MAP = "1";
25
+ const TYPE_LIST = "2";
26
+ const TYPE_SCALAR = "4";
27
+
28
+ /**
29
+ * @var $operators array
30
+ * These are valid at the start of a template block to
31
+ * modify the way in which the variables inside are
32
+ * processed.
33
+ */
34
+ private $operators = array(
35
+ "+" => "reserved",
36
+ "/" => "segments",
37
+ "." => "dotprefix",
38
+ "#" => "fragment",
39
+ ";" => "semicolon",
40
+ "?" => "form",
41
+ "&" => "continuation"
42
+ );
43
+
44
+ /**
45
+ * @var reserved array
46
+ * These are the characters which should not be URL encoded in reserved
47
+ * strings.
48
+ */
49
+ private $reserved = array(
50
+ "=", ",", "!", "@", "|", ":", "/", "?", "#",
51
+ "[", "]",'$', "&", "'", "(", ")", "*", "+", ";"
52
+ );
53
+ private $reservedEncoded = array(
54
+ "%3D", "%2C", "%21", "%40", "%7C", "%3A", "%2F", "%3F",
55
+ "%23", "%5B", "%5D", "%24", "%26", "%27", "%28", "%29",
56
+ "%2A", "%2B", "%3B"
57
+ );
58
+
59
+ public function parse($string, array $parameters)
60
+ {
61
+ return $this->resolveNextSection($string, $parameters);
62
+ }
63
+
64
+ /**
65
+ * This function finds the first matching {...} block and
66
+ * executes the replacement. It then calls itself to find
67
+ * subsequent blocks, if any.
68
+ */
69
+ private function resolveNextSection($string, $parameters)
70
+ {
71
+ $start = strpos($string, "{");
72
+ if ($start === false) {
73
+ return $string;
74
+ }
75
+ $end = strpos($string, "}");
76
+ if ($end === false) {
77
+ return $string;
78
+ }
79
+ $string = $this->replace($string, $start, $end, $parameters);
80
+ return $this->resolveNextSection($string, $parameters);
81
+ }
82
+
83
+ private function replace($string, $start, $end, $parameters)
84
+ {
85
+ // We know a data block will have {} round it, so we can strip that.
86
+ $data = substr($string, $start + 1, $end - $start - 1);
87
+
88
+ // If the first character is one of the reserved operators, it effects
89
+ // the processing of the stream.
90
+ if (isset($this->operators[$data[0]])) {
91
+ $op = $this->operators[$data[0]];
92
+ $data = substr($data, 1);
93
+ $prefix = "";
94
+ $prefix_on_missing = false;
95
+
96
+ switch ($op) {
97
+ case "reserved":
98
+ // Reserved means certain characters should not be URL encoded
99
+ $data = $this->replaceVars($data, $parameters, ",", null, true);
100
+ break;
101
+ case "fragment":
102
+ // Comma separated with fragment prefix. Bare values only.
103
+ $prefix = "#";
104
+ $prefix_on_missing = true;
105
+ $data = $this->replaceVars($data, $parameters, ",", null, true);
106
+ break;
107
+ case "segments":
108
+ // Slash separated data. Bare values only.
109
+ $prefix = "/";
110
+ $data =$this->replaceVars($data, $parameters, "/");
111
+ break;
112
+ case "dotprefix":
113
+ // Dot separated data. Bare values only.
114
+ $prefix = ".";
115
+ $prefix_on_missing = true;
116
+ $data = $this->replaceVars($data, $parameters, ".");
117
+ break;
118
+ case "semicolon":
119
+ // Semicolon prefixed and separated. Uses the key name
120
+ $prefix = ";";
121
+ $data = $this->replaceVars($data, $parameters, ";", "=", false, true, false);
122
+ break;
123
+ case "form":
124
+ // Standard URL format. Uses the key name
125
+ $prefix = "?";
126
+ $data = $this->replaceVars($data, $parameters, "&", "=");
127
+ break;
128
+ case "continuation":
129
+ // Standard URL, but with leading ampersand. Uses key name.
130
+ $prefix = "&";
131
+ $data = $this->replaceVars($data, $parameters, "&", "=");
132
+ break;
133
+ }
134
+
135
+ // Add the initial prefix character if data is valid.
136
+ if ($data || ($data !== false && $prefix_on_missing)) {
137
+ $data = $prefix . $data;
138
+ }
139
+
140
+ } else {
141
+ // If no operator we replace with the defaults.
142
+ $data = $this->replaceVars($data, $parameters);
143
+ }
144
+ // This is chops out the {...} and replaces with the new section.
145
+ return substr($string, 0, $start) . $data . substr($string, $end + 1);
146
+ }
147
+
148
+ private function replaceVars(
149
+ $section,
150
+ $parameters,
151
+ $sep = ",",
152
+ $combine = null,
153
+ $reserved = false,
154
+ $tag_empty = false,
155
+ $combine_on_empty = true
156
+ ) {
157
+ if (strpos($section, ",") === false) {
158
+ // If we only have a single value, we can immediately process.
159
+ return $this->combine(
160
+ $section,
161
+ $parameters,
162
+ $sep,
163
+ $combine,
164
+ $reserved,
165
+ $tag_empty,
166
+ $combine_on_empty
167
+ );
168
+ } else {
169
+ // If we have multiple values, we need to split and loop over them.
170
+ // Each is treated individually, then glued together with the
171
+ // separator character.
172
+ $vars = explode(",", $section);
173
+ return $this->combineList(
174
+ $vars,
175
+ $sep,
176
+ $parameters,
177
+ $combine,
178
+ $reserved,
179
+ false, // Never emit empty strings in multi-param replacements
180
+ $combine_on_empty
181
+ );
182
+ }
183
+ }
184
+
185
+ public function combine(
186
+ $key,
187
+ $parameters,
188
+ $sep,
189
+ $combine,
190
+ $reserved,
191
+ $tag_empty,
192
+ $combine_on_empty
193
+ ) {
194
+ $length = false;
195
+ $explode = false;
196
+ $skip_final_combine = false;
197
+ $value = false;
198
+
199
+ // Check for length restriction.
200
+ if (strpos($key, ":") !== false) {
201
+ list($key, $length) = explode(":", $key);
202
+ }
203
+
204
+ // Check for explode parameter.
205
+ if ($key[strlen($key) - 1] == "*") {
206
+ $explode = true;
207
+ $key = substr($key, 0, -1);
208
+ $skip_final_combine = true;
209
+ }
210
+
211
+ // Define the list separator.
212
+ $list_sep = $explode ? $sep : ",";
213
+
214
+ if (isset($parameters[$key])) {
215
+ $data_type = $this->getDataType($parameters[$key]);
216
+ switch($data_type) {
217
+ case self::TYPE_SCALAR:
218
+ $value = $this->getValue($parameters[$key], $length);
219
+ break;
220
+ case self::TYPE_LIST:
221
+ $values = array();
222
+ foreach ($parameters[$key] as $pkey => $pvalue) {
223
+ $pvalue = $this->getValue($pvalue, $length);
224
+ if ($combine && $explode) {
225
+ $values[$pkey] = $key . $combine . $pvalue;
226
+ } else {
227
+ $values[$pkey] = $pvalue;
228
+ }
229
+ }
230
+ $value = implode($list_sep, $values);
231
+ if ($value == '') {
232
+ return '';
233
+ }
234
+ break;
235
+ case self::TYPE_MAP:
236
+ $values = array();
237
+ foreach ($parameters[$key] as $pkey => $pvalue) {
238
+ $pvalue = $this->getValue($pvalue, $length);
239
+ if ($explode) {
240
+ $pkey = $this->getValue($pkey, $length);
241
+ $values[] = $pkey . "=" . $pvalue; // Explode triggers = combine.
242
+ } else {
243
+ $values[] = $pkey;
244
+ $values[] = $pvalue;
245
+ }
246
+ }
247
+ $value = implode($list_sep, $values);
248
+ if ($value == '') {
249
+ return false;
250
+ }
251
+ break;
252
+ }
253
+ } else if ($tag_empty) {
254
+ // If we are just indicating empty values with their key name, return that.
255
+ return $key;
256
+ } else {
257
+ // Otherwise we can skip this variable due to not being defined.
258
+ return false;
259
+ }
260
+
261
+ if ($reserved) {
262
+ $value = str_replace($this->reservedEncoded, $this->reserved, $value);
263
+ }
264
+
265
+ // If we do not need to include the key name, we just return the raw
266
+ // value.
267
+ if (!$combine || $skip_final_combine) {
268
+ return $value;
269
+ }
270
+
271
+ // Else we combine the key name: foo=bar, if value is not the empty string.
272
+ return $key . ($value != '' || $combine_on_empty ? $combine . $value : '');
273
+ }
274
+
275
+ /**
276
+ * Return the type of a passed in value
277
+ */
278
+ private function getDataType($data)
279
+ {
280
+ if (is_array($data)) {
281
+ reset($data);
282
+ if (key($data) !== 0) {
283
+ return self::TYPE_MAP;
284
+ }
285
+ return self::TYPE_LIST;
286
+ }
287
+ return self::TYPE_SCALAR;
288
+ }
289
+
290
+ /**
291
+ * Utility function that merges multiple combine calls
292
+ * for multi-key templates.
293
+ */
294
+ private function combineList(
295
+ $vars,
296
+ $sep,
297
+ $parameters,
298
+ $combine,
299
+ $reserved,
300
+ $tag_empty,
301
+ $combine_on_empty
302
+ ) {
303
+ $ret = array();
304
+ foreach ($vars as $var) {
305
+ $response = $this->combine(
306
+ $var,
307
+ $parameters,
308
+ $sep,
309
+ $combine,
310
+ $reserved,
311
+ $tag_empty,
312
+ $combine_on_empty
313
+ );
314
+ if ($response === false) {
315
+ continue;
316
+ }
317
+ $ret[] = $response;
318
+ }
319
+ return implode($sep, $ret);
320
+ }
321
+
322
+ /**
323
+ * Utility function to encode and trim values
324
+ */
325
+ private function getValue($value, $length)
326
+ {
327
+ if ($length) {
328
+ $value = substr($value, 0, $length);
329
+ }
330
+ $value = rawurlencode($value);
331
+ return $value;
332
+ }
333
+ }
google/Verifier/Abstract.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Verifies signatures.
20
+ *
21
+ * @author Brian Eaton <beaton@google.com>
22
+ */
23
+ abstract class Google_Verifier_Abstract
24
+ {
25
+ /**
26
+ * Checks a signature, returns true if the signature is correct,
27
+ * false otherwise.
28
+ */
29
+ abstract public function verify($data, $signature);
30
+ }
google/Verifier/Pem.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once APSL_PLUGIN_DIR."google/Auth/Exception.php";
19
+ require_once APSL_PLUGIN_DIR."google/Verifier/Abstract.php";
20
+
21
+ /**
22
+ * Verifies signatures using PEM encoded certificates.
23
+ *
24
+ * @author Brian Eaton <beaton@google.com>
25
+ */
26
+ class Google_Verifier_Pem extends Google_Verifier_Abstract
27
+ {
28
+ private $publicKey;
29
+
30
+ /**
31
+ * Constructs a verifier from the supplied PEM-encoded certificate.
32
+ *
33
+ * $pem: a PEM encoded certificate (not a file).
34
+ * @param $pem
35
+ * @throws Google_Auth_Exception
36
+ * @throws Google_Exception
37
+ */
38
+ public function __construct($pem)
39
+ {
40
+ if (!function_exists('openssl_x509_read')) {
41
+ throw new Google_Exception('Google API PHP client needs the openssl PHP extension');
42
+ }
43
+ $this->publicKey = openssl_x509_read($pem);
44
+ if (!$this->publicKey) {
45
+ throw new Google_Auth_Exception("Unable to parse PEM: $pem");
46
+ }
47
+ }
48
+
49
+ public function __destruct()
50
+ {
51
+ if ($this->publicKey) {
52
+ openssl_x509_free($this->publicKey);
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Verifies the signature on data.
58
+ *
59
+ * Returns true if the signature is valid, false otherwise.
60
+ * @param $data
61
+ * @param $signature
62
+ * @throws Google_Auth_Exception
63
+ * @return bool
64
+ */
65
+ public function verify($data, $signature)
66
+ {
67
+ $hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
68
+ $status = openssl_verify($data, $signature, $this->publicKey, $hash);
69
+ if ($status === -1) {
70
+ throw new Google_Auth_Exception('Signature verification error: ' . openssl_error_string());
71
+ }
72
+ return $status === 1;
73
+ }
74
+ }
images/Thumbs.db ADDED
Binary file
images/buffer-black.png ADDED
Binary file
images/buffer-white.png ADDED
Binary file
images/buffer.png ADDED
Binary file
images/customize.png ADDED
Binary file
images/icon.png ADDED
Binary file
images/icon1.png ADDED
Binary file
images/logo.png ADDED
Binary file
images/plugin.png ADDED
Binary file
images/preview-1.jpg ADDED
Binary file
images/preview-2.jpg ADDED
Binary file
images/preview-3.jpg ADDED
Binary file
images/preview-4.jpg ADDED
Binary file
images/theme.png ADDED
Binary file
images/top-line.png ADDED
Binary file
inc/backend/about.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="about-wrapper clearfix">
2
+ <div class="about-desc-wrap clearfix">
3
+ <div class="ap-title"> About AccessPress Social Login</div>
4
+ <div class="about-content">
5
+ <p>AccessPress<strong>Social Login</strong> - is a perfect WordPress plugin to allow your website users to register/login to the website using one of their favorite social website accounts.</p>
6
+ </div>
7
+ </div>
8
+ </div>
9
+ <div class="social-more-wrap clearfix">
10
+ <div class="more-title"> More from AccessPress Themes </div>
11
+ <ul class="more-product">
12
+ <li><a href="https://accesspressthemes.com/plugins/"><span class="prod-title"> Wordpress Plugins </span> <img src="<?php echo APSL_IMAGE_DIR . '/plugin.png'; ?>" width="100%" /> </a></li>
13
+ <li><a href="https://accesspressthemes.com/themes/"><span class="prod-title"> Wordpress Themes </span> <img src="<?php echo APSL_IMAGE_DIR . '/theme.png'; ?>" width="100%" /></a></li>
14
+ <li><a href="https://accesspressthemes.com/contact/"><span class="prod-title"> Wordpress Customization </span> <img src="<?php echo APSL_IMAGE_DIR . '/customize.png'; ?>" width="100%" /></a></li>
15
+ </ul>
16
+ <div class="clear"></div>
17
+ </div>
18
+
19
+ <div class="social-share-wrap clearfix">
20
+ <div class="more-title"> Get social </div>
21
+ <div class="social-iframe"> <strong>Like us on facebook:</strong><br />
22
+ <iframe style="border: none; overflow: hidden; width: 764px; height: 206px;" src="//www.facebook.com/plugins/likebox.php?href=https%3A%2F%2Fwww.facebook.com%2Fpages%2FAccessPress-Themes%2F1396595907277967&width=842&height=258&colorscheme=light&show_faces=true&header=false&stream=false&show_border=true&appId=1411139805828592" width="240" height="150" frameborder="0" scrolling="no"></iframe></div>
23
+ <ul class="about-social clearfix">
24
+ <li><a href="https://www.facebook.com/pages/AccessPress-Themes/1396595907277967" class="fb"><i class="fa fa-facebook"> </i><br /> <span> Follow us on <span class="bold"> Facebook </span></span></a></li>
25
+ <li><a href="https://twitter.com/apthemes" class="twt"><i class="fa fa-twitter"> </i><br /><span> Follow us on <span class="bold"> Twitter </span> </span></a></li>
26
+ <li><a href="https://plus.google.com/+Accesspressthemesprofile/" class="gp"><i class="fa fa-google-plus"> </i><br /><span> Follow us on <span class="bold"> Google + </span> </span></a></li>
27
+ <li><a href="https://www.youtube.com/user/accesspressthemes" class="utube"><i class="fa fa-youtube"> </i><br /><span> Subscribe us on <span class="bold"> Youtube </span> </span></a></li>
28
+ <li><a href="skype:access-keys" class="skype"><i class="fa fa-skype"> </i><br /><span> Contact us on <span class="bold"> Skype </span> </span></a></li>
29
+ <li><a href="https://www.pinterest.com/accesspresswp/" class="pin"><i class="fa fa-pinterest"> </i><br /><span> Follow us on <span class="bold"> Pinterest </span> </span></a></li>
30
+ </ul>
31
+ </div>
inc/backend/activation.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined( 'ABSPATH' ) or die( 'No script kiddies please!' ); ?>
2
+ <?php
3
+ $apsl_settings = array();
4
+
5
+ $social_networks = array(0=>'facebook', 1=>'twitter', 2=>'google');
6
+ $apsl_settings['network_ordering'] = $social_networks;
7
+
8
+ //facebook settings
9
+ $facebook_parameters = array(
10
+ 'apsl_facebook_enable' =>'0',
11
+ 'apsl_facebook_app_id' =>'',
12
+ 'apsl_facebook_app_secret'=>''
13
+ );
14
+ $apsl_settings['apsl_facebook_settings'] = $facebook_parameters;
15
+
16
+ //twitter settings
17
+ $twitter_parameters = array(
18
+ 'apsl_twitter_enable' =>'0',
19
+ 'apsl_twitter_api_key' =>'',
20
+ 'apsl_twitter_api_secret'=>''
21
+ );
22
+ $apsl_settings['apsl_twitter_settings'] = $twitter_parameters;
23
+
24
+ //google settings
25
+ $google_parameters = array(
26
+ 'apsl_google_enable' =>'0',
27
+ 'apsl_google_client_id' =>'',
28
+ 'apsl_google_client_secret'=>''
29
+ );
30
+ $apsl_settings['apsl_google_settings'] = $google_parameters;
31
+
32
+ $apsl_settings['apsl_enable_disable_plugin'] = 'yes';
33
+
34
+ $display_options = array('login_form', 'register_form', 'comment_form');
35
+ $apsl_settings['apsl_display_options'] =$display_options;
36
+
37
+ $apsl_settings['apsl_icon_theme'] = '1';
38
+
39
+ $apsl_settings['apsl_title_text_field'] = 'Social connect:';
40
+
41
+ update_option( APSL_SETTINGS, $apsl_settings );
42
+ ?>
inc/backend/how-to-use.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("No script kiddies please!"); ?>
2
+ <p>There are 2 main settings tabs that will help you to setup the plugin to work properly.</p>
3
+ <dl>
4
+ <dt><strong>Network Settings:</strong></dt>
5
+ <dd>In this tab you can enable and disable the available social medias as per your need. Also you can order the apperance of the social medias simply by drag and drop.
6
+ </dd>
7
+ <p>For each social media you can</p>
8
+ <ul class='how-list'>
9
+ <li>Enable/Disable: You can enable and disable the social media.</li>
10
+ <li>App ID: App id of the social media.</li>
11
+ <li>App secret: App secret of the social media.</li>
12
+ </ul>
13
+ To get the App ID and App Secret please follow the instructions(notes).
14
+
15
+ <dt><strong>Other settings:</strong></dt>
16
+ <dd>
17
+ <p>In this tab you can do various settings of a plugin.</p>
18
+ <ul class="how-list">
19
+ <li>Enable or disable the social login.</li>
20
+ <li>Options to enable the social logins for login form, registration form and in comments.</li>
21
+ <li>Options to choose the pre available themes, You can choose any one theme from the pre available 4 themes.</li>
22
+ <li>Login text: Here you can setup the login text as per your need.</li>
23
+ </ul>
24
+ </dd>
25
+
26
+ <dt><strong>Shortcode:</strong></dt>
27
+ <dd><p>You can use shortcode for the display of the social logins in the contents of a posts and pages.
28
+ <ul class="how-list">
29
+ <li>Example 1: [apsl-login-lite login_text='Social Connection']</li>
30
+ <li>Shortcode attributes: <br />
31
+ i. login_text: you can use the custom login text for the shortcodes using this attribute.<br />
32
+ </li>
33
+ </ul>
34
+ </p></dd>
35
+
36
+ <dt><strong>Widget:</strong></dt>
37
+ <dd>
38
+ <p>You can use widget for the display of the social logins in the widgets area. <br/>
39
+ <ul class="how-list">
40
+ <li>Widget attributes <br />
41
+ i. Title: You can setup the widget title here.<br />
42
+ ii. Login text: You can setup the login text here.<br />
43
+ </li>
44
+ </ul>
45
+ </dd>
46
+
47
+ </dl>
48
+
49
+
50
+
inc/backend/main-page.php ADDED
@@ -0,0 +1,271 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap"><div class='apsl-outer-wrapper'>
2
+
3
+ <div class="apsl-setting-header clearfix">
4
+
5
+ <div class="apsl-headerlogo">
6
+ <div class="logo-wrap"> <img src="<?php echo APSL_IMAGE_DIR; ?>/logo.png" alt="<?php esc_attr_e('AccessPress Social Login Lite', APSL_TEXT_DOMAIN ); ?>" /></div>
7
+ <div class="logo-content"><?php esc_attr_e('AccessPress Social Login Lite', APSL_TEXT_DOMAIN ); ?><br />
8
+ <span class='plugin-version'><?php _e('version '.APSL_VERSION, APSL_TEXT_DOMAIN ); ?></span></div>
9
+ </div>
10
+
11
+ <div class="apsl-right-header-block">
12
+ <div class="apsl-header-icons">
13
+ <p>Follow us for new updates</p>
14
+ <div class="apsl-social-bttns">
15
+ <iframe src="//www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2Fpages%2FAccessPress-Themes%2F1396595907277967&amp;width&amp;layout=button&amp;action=like&amp;show_faces=false&amp;share=false&amp;height=35&amp;appId=1411139805828592" scrolling="no" frameborder="0" style="border:none; overflow:hidden; height:20px; width:50px " allowtransparency="true"></iframe>
16
+ &nbsp;&nbsp;
17
+ <iframe id="twitter-widget-0" scrolling="no" frameborder="0" allowtransparency="true" src="http://platform.twitter.com/widgets/follow_button.5f46501ecfda1c3e1c05dd3e24875611.en.html#_=1421918256492&amp;dnt=true&amp;id=twitter-widget-0&amp;lang=en&amp;screen_name=apthemes&amp;show_count=false&amp;show_screen_name=true&amp;size=m" class="twitter-follow-button twitter-follow-button" title="Twitter Follow Button" data-twttr-rendered="true" style="width: 126px; height: 20px;"></iframe>
18
+ <script>
19
+ !function (d, s, id) {
20
+ var js, fjs = d.getElementsByTagName(s)[0];
21
+ if (!d.getElementById(id)) {
22
+ js = d.createElement(s);
23
+ js.id = id;
24
+ js.src = "//platform.twitter.com/widgets.js";
25
+ fjs.parentNode.insertBefore(js, fjs);
26
+ }
27
+ }(document, "script", "twitter-wjs");
28
+ </script>
29
+
30
+ </div>
31
+ </div>
32
+
33
+ </div>
34
+ <div class="clear"></div>
35
+ </div>
36
+ <div class="clear"></div>
37
+
38
+ <?php $options = get_option( APSL_SETTINGS );
39
+ //$this->print_array($options);
40
+ ?>
41
+
42
+ <?php
43
+
44
+ if(isset($_SESSION['apsl_message'])){ ?>
45
+ <div class="apsl-message">
46
+ <p><?php
47
+ echo $_SESSION['apsl_message'];
48
+ unset($_SESSION['apsl_message']);
49
+ ?></p>
50
+ </div>
51
+ <?php } ?>
52
+ <div class='apsl-networks'>
53
+ <div class='apsl-network-options'>
54
+ <form method="post" action="<?php echo admin_url() . 'admin-post.php' ?>">
55
+ <input type="hidden" name="action" value="apsl_save_options"/>
56
+ <div class='apsl-settings-tabs-wrapper clearfix'>
57
+ <ul class='apsl-tab-wrapper-fix clearfix'>
58
+ <li><a href='javascript: void(0);' id='apsl-networks-settings' class='apsl-settings-tab apsl-active-tab' ><?php _e('Network settings', APSL_TEXT_DOMAIN ) ?></a></li>
59
+ <li><a href='javascript: void(0);' id='apsl-theme-settings' class='apsl-settings-tab' ><?php _e('Other settings', APSL_TEXT_DOMAIN ) ?></a></li>
60
+ <li><a href='javascript: void(0);' id='apsl-how-to-use' class='apsl-settings-tab' ><?php _e('How to use', APSL_TEXT_DOMAIN ) ?></a></li>
61
+ <li><a href='javascript: void(0);' id='apsl-about' class='apsl-settings-tab' ><?php _e('About', APSL_TEXT_DOMAIN ) ?></a></li>
62
+ </ul>
63
+ </div>
64
+ <div class="clear"></div>
65
+ <div class='apsl-setting-tabs-wrapper'>
66
+ <div class='apsl-tab-contents' id='tab-apsl-networks-settings'>
67
+
68
+ <div class='network-settings'>
69
+ <?php foreach($options['network_ordering'] as $key=>$value): ?>
70
+ <?php switch($value){
71
+ case 'facebook': ?>
72
+ <div class='apsl-settings apsl-facebook-settings'>
73
+ <!-- Facebook Settings -->
74
+ <div class='apsl-label'><?php _e( "Facebook", APSL_TEXT_DOMAIN ); ?><span class='apsl_show_hide' id='apsl_show_hide_<?php echo $value; ?>'><i class="fa fa-caret-down"></i></span> </div>
75
+ <div class='apsl_network_settings_wrapper' id='apsl_network_settings_<?php echo $value; ?>' style='display:none'>
76
+ <div class='apsl-enable-disable'>
77
+ <label><?php _e('Enable?', APSL_TEXT_DOMAIN ); ?></label>
78
+ <input type='hidden' name='network_ordering[]' value='facebook' />
79
+ <input type="checkbox" id='aspl-facbook-enable' value='enable' name='apsl_facebook_settings[apsl_facebook_enable]' <?php checked( 'enable', $options['apsl_facebook_settings']['apsl_facebook_enable'] ); ?> />
80
+ </div>
81
+ <div class='apsl-app-id-wrapper'>
82
+ <label><?php _e( 'App ID:', APSL_TEXT_DOMAIN ); ?></label><input type='text' id='apsl-facebook-app-id' name='apsl_facebook_settings[apsl_facebook_app_id]' value='<?php if(isset($options['apsl_facebook_settings']['apsl_facebook_app_id'])){ echo $options['apsl_facebook_settings']['apsl_facebook_app_id']; } ?>' />
83
+ </div>
84
+ <div class='apsl-app-secret-wrapper'>
85
+ <label><?php _e( 'App Secret:', APSL_TEXT_DOMAIN ); ?></label><input type='text' id='apsl-facebook-app-secret' name='apsl_facebook_settings[apsl_facebook_app_secret]' value='<?php if(isset($options['apsl_facebook_settings']['apsl_facebook_app_secret'])){ echo $options['apsl_facebook_settings']['apsl_facebook_app_secret']; } ?>' />
86
+ </div>
87
+ <div class='apsl-info'>
88
+ <span class='apsl-info-note'><?php _e('Note:', APSL_TEXT_DOMAIN ); ?></span> <br />
89
+ <span class='apsl-info-content'>You need to create a new facebook API Applitation to setup facebook login. Please follow the instructions to create new app.</span>
90
+ <br />
91
+ <ul class='apsl-info-lists'>
92
+ <li>Go to <a href='https://developers.facebook.com/apps' target='_blank'>https://developers.facebook.com/apps</a>.</li>
93
+ <li>Click on 'Add a New App' button. A popup will open. Then choose website.</li>
94
+ <li>Add the required informations and don't forget to make your app live. This is very important otherwise your app will not work for all users.</li>
95
+ <li>Then Click the "Create App" button and follow the instructions, your new app will be created. </li>
96
+ <li>Copy and Paste "App ID" and "App Secret" here.</li>
97
+ <li>Site url: <?php echo site_url(); ?></li>
98
+ </ul>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ <?php break; ?>
103
+
104
+ <?php case 'twitter': ?>
105
+ <div class='apsl-settings apsl-twitter-settings'>
106
+ <!-- Twitter Settings -->
107
+ <div class='apsl-label'><?php _e( "Twitter", APSL_TEXT_DOMAIN ); ?> <span class='apsl_show_hide' id='apsl_show_hide_<?php echo $value; ?>'><i class="fa fa-caret-down"></i></span> </div>
108
+ <div class='apsl_network_settings_wrapper' id='apsl_network_settings_<?php echo $value; ?>' style='display:none'>
109
+ <div class='apsl-enable-disable'>
110
+ <label><?php _e('Enable?', APSL_TEXT_DOMAIN ); ?></label>
111
+ <input type="checkbox" id='aspl-twitter-enable' value='enable' name='apsl_twitter_settings[apsl_twitter_enable]' <?php checked( 'enable', $options['apsl_twitter_settings']['apsl_twitter_enable'] ); ?> />
112
+ </div>
113
+
114
+ <div class='apsl-app-id-wrapper'>
115
+ <label><?php _e( 'Consumer Key (API Key):', APSL_TEXT_DOMAIN ); ?></label><input type='text' id='apsl-twitter-app-id' name='apsl_twitter_settings[apsl_twitter_api_key]' value='<?php if(isset($options['apsl_twitter_settings']['apsl_twitter_api_key'])){ echo $options['apsl_twitter_settings']['apsl_twitter_api_key']; } ?>' />
116
+ </div>
117
+
118
+ <div class='apsl-app-secret-wrapper'>
119
+ <label><?php _e( 'Consumer Secret (API Secret):', APSL_TEXT_DOMAIN ); ?></label><input type='text' id='apsl-twitter-app-secret' name='apsl_twitter_settings[apsl_twitter_api_secret]' value='<?php if(isset($options['apsl_twitter_settings']['apsl_twitter_api_secret'])){ echo $options['apsl_twitter_settings']['apsl_twitter_api_secret']; } ?>' />
120
+ </div>
121
+
122
+ <input type='hidden' name='network_ordering[]' value='twitter' />
123
+ <div class='apsl-info'>
124
+ <span class='apsl-info-note'><?php _e('Note:', APSL_TEXT_DOMAIN ); ?> <br /> </span>
125
+ <span class='apsl-info-content'>You need to create new twitter API application to setup the twitter login. Please follow the instructions to create new app.</span>
126
+ <ul class='apsl-info-lists'>
127
+ <li>Go to <a href='https://apps.twitter.com/' target='_blank'>https://apps.twitter.com/</a></li>
128
+ <li>Click on Create New App button. A new application details form will appear. Please fill up the application details and click on "create your twitter application" button.</li>
129
+ <li>Please note that before creating twiiter API application, You must add your mobile phone to your Twitter profile.</li>
130
+ <li>After successful creation of the app. Please go to "Keys and Access Tokens" tabs and get Consumer key(API Key) and Consumer secret(API secret).</li>
131
+ <li>Website: <?php echo site_url(); ?></li>
132
+ <li>Callback URL: <?php echo site_url(); ?></li>
133
+ </ul>
134
+
135
+ </div>
136
+ </div>
137
+ </div>
138
+ <?php break;
139
+
140
+ case 'google': ?>
141
+ <div class='apsl-settings apsl-google-settings'>
142
+ <!-- Google Settings -->
143
+ <div class='apsl-label'><?php _e( "Google", APSL_TEXT_DOMAIN ); ?> <span class='apsl_show_hide' id='apsl_show_hide_<?php echo $value; ?>'><i class="fa fa-caret-down"></i></span> </div>
144
+ <div class='apsl_network_settings_wrapper' id='apsl_network_settings_<?php echo $value; ?>' style='display:none'>
145
+ <div class='apsl-enable-disable'>
146
+ <label><?php _e('Enable?', APSL_TEXT_DOMAIN ); ?></label>
147
+ <input type="checkbox" id='aspl-google-enable' value='enable' name='apsl_google_settings[apsl_google_enable]' <?php checked( 'enable', $options['apsl_google_settings']['apsl_google_enable'] ); ?> />
148
+ </div>
149
+ <div class='apsl-app-id-wrapper'>
150
+ <label><?php _e( 'Client ID:', APSL_TEXT_DOMAIN ); ?></label><input type='text' id='apsl-google-client-id' name='apsl_google_settings[apsl_google_client_id]' value='<?php if(isset($options['apsl_google_settings']['apsl_google_client_id'])){ echo $options['apsl_google_settings']['apsl_google_client_id']; } ?>' />
151
+ </div>
152
+ <div class='apsl-app-secret-wrapper'>
153
+ <label><?php _e( 'Client Secret:', APSL_TEXT_DOMAIN ); ?></label><input type='text' id='apsl-google-client-secret' name='apsl_google_settings[apsl_google_client_secret]' value='<?php if(isset($options['apsl_google_settings']['apsl_google_client_secret'])){ echo $options['apsl_google_settings']['apsl_google_client_secret']; } ?>' />
154
+ </div>
155
+ <input type='hidden' name='network_ordering[]' value='google' />
156
+ <div class='apsl-info'>
157
+ <span class='apsl-info-note'><?php _e('Note:', APSL_TEXT_DOMAIN ); ?></span> <br />
158
+ <span class='apsl-info-content'>You need to create new google API application to setup the google login. Please follow the instructions to create new application.</span>
159
+ <ul class='apsl-info-lists'>
160
+ <li>Go to <a href='https://console.developers.google.com/project' target='_blank'>https://console.developers.google.com/project.</a> </li>
161
+ <li>Click on "Create Project" button.</li>
162
+ <li>A pop up will appear.</li>
163
+ <li>Please enter Project name and click on "Create" button.</li>
164
+ <li>Now click on APIs & Auth > Consent screen and fill up the required credentials.</li>
165
+ <li>Now click on APIs & Auth > Credentials.</li>
166
+ <li>Now click on "Create new Client ID" button and fill up the required credentials.</li>
167
+ <li>Get the client ID and client secret.</li>
168
+ <li>Now go to APIs > Social APIs > Google+ API and enable it. It is very important to enable it for the google login to work.</li>
169
+ <li>Rediret uri setup:<br />
170
+ Please use <?php echo site_url(); ?>/wp-login.php?apsl_login_id=google_check - for wordpress login page.<br />
171
+ <?php echo site_url(); ?>/index.php?apsl_login_id=google_check - if you have used the shortcode or widget in frontend.
172
+ </li>
173
+ </ul>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ <?php break; ?>
178
+
179
+ <?php default:
180
+ echo "should not reach here";
181
+ break;
182
+
183
+ } ?>
184
+ <?php endforeach; ?>
185
+ </div>
186
+ </div>
187
+
188
+ <div class='apsl-tab-contents' id='tab-apsl-theme-settings' style="display:none">
189
+
190
+ <div class='apsl-settings'>
191
+ <div class='apsl-enable-disable-opt'>
192
+ <div class="apsl-label"><?php _e('Social Login', APSL_TEXT_DOMAIN ); ?> <span class='apsl_show_hide'><i class="fa fa-caret-down"></i></span> </div>
193
+ <div class='apsl_network_settings_wrapper' style='display:none'>
194
+ <p class="social-login">
195
+ <span><?php _e('Enable social login?', APSL_TEXT_DOMAIN ); ?></span>
196
+ <input type='radio' id='apsl_enable_plugin' name='apsl_enable_disable_plugin' value='yes' <?php checked( $options['apsl_enable_disable_plugin'], 'yes', 'true' ); ?> /> <label for='apsl_enable_plugin'>Yes</label>
197
+ <input type='radio' id='apsl_disable_plugin' name='apsl_enable_disable_plugin' value='no' <?php checked( $options['apsl_enable_disable_plugin'], 'no', 'true' ); ?> /> <label for='apsl_disable_plugin'>No</label>
198
+ </p>
199
+ </div>
200
+ </div>
201
+ </div>
202
+
203
+ <div class='apsl-settings'>
204
+ <div class='apsl-display-options'>
205
+ <div class="apsl-label"><?php _e('Display options', APSL_TEXT_DOMAIN ); ?> <span class='apsl_show_hide'><i class="fa fa-caret-down"></i></span></div>
206
+ <div class='apsl_network_settings_wrapper' style='display:none'>
207
+ <p><?php _e('Please choose the options where you want to display the social login form.', APSL_TEXT_DOMAIN ); ?></p>
208
+ <p><input type="checkbox" id="apsl_login_form" value="login_form" name="apsl_display_options[]" <?php if (in_array("login_form", $options['apsl_display_options'])) { echo "checked='checked'"; } ?> ><label for="apsl_login_form"><?php _e( 'Login Form', APSL_TEXT_DOMAIN ); ?> </label></p>
209
+ <p><input type="checkbox" id="apsl_register_form" value="register_form" name="apsl_display_options[]" <?php if (in_array("register_form", $options['apsl_display_options'])) { echo "checked='checked'"; } ?> ><label for="apsl_register_form"><?php _e( 'Register Form', APSL_TEXT_DOMAIN ); ?> </label></p>
210
+ <p><input type="checkbox" id="apsl_comment_form" value="comment_form" name="apsl_display_options[]" <?php if (in_array("comment_form", $options['apsl_display_options'])) { echo "checked='checked'"; } ?> ><label for="apsl_comment_form"><?php _e( 'Comments', APSL_TEXT_DOMAIN ); ?> </label></p>
211
+ </div>
212
+ </div>
213
+ </div>
214
+
215
+ <div class='apsl-settings'>
216
+ <div class='apsl-themes-wrapper'>
217
+ <div class="apsl-label"><?php _e('Available icon themes', APSL_TEXT_DOMAIN ); ?> <span class='apsl_show_hide'><i class="fa fa-caret-down"></i></span> </div>
218
+ <div class='apsl_network_settings_wrapper' style='display:none'>
219
+ <?php for($i=1; $i<=4; $i++): ?>
220
+ <div class='apsl-theme apsl-theme-<?php echo $i; ?>'>
221
+ <label><input type="radio" id="apsl-theme-<?php echo $i; ?>" value="<?php echo $i; ?>" class="apsl-theme apsl-png-theme" name="apsl_icon_theme" <?php checked( $i, $options['apsl_icon_theme'] ); ?> >
222
+ <span><?php _e('Theme '.$i, APSL_TEXT_DOMAIN ); ?></span></label>
223
+ <div class="apsl-theme-previewbox">
224
+ <img src="<?php echo APSL_IMAGE_DIR; ?>/preview-<?php echo $i; ?>.jpg" alt="theme preview">
225
+ </div>
226
+ </div>
227
+ <?php endfor; ?>
228
+ </div>
229
+ </div>
230
+ </div>
231
+
232
+ <div class='apsl-settings'>
233
+ <div class='apsl-text-settings'>
234
+ <div class="apsl-label"><?php _e('Text Settings', APSL_TEXT_DOMAIN ); ?> <span class='apsl_show_hide'><i class="fa fa-caret-down"></i></span> </div>
235
+ <div class='apsl_network_settings_wrapper' style='display:none'>
236
+ <p class='apsl-title-text-field'>
237
+ <span><?php _e('Login text:', APSL_TEXT_DOMAIN ); ?></span> <input type='text' name='apsl_title_text_field' id='apsl-title-text' value='<?php if(isset($options['apsl_title_text_field']) && $options['apsl_title_text_field'] !=''){ echo $options['apsl_title_text_field']; } ?>' />
238
+ </p>
239
+ </div>
240
+ </div>
241
+ </div>
242
+
243
+ </div>
244
+
245
+
246
+ <!-- how to use section -->
247
+ <div class='apsl-tab-contents' id='tab-apsl-how-to-use' style="display:none">
248
+ <?php include(APSL_PLUGIN_DIR.'inc/backend/how-to-use.php'); ?>
249
+ </div>
250
+
251
+ <!-- about section -->
252
+ <div class='apsl-tab-contents' id='tab-apsl-about' style="display:none">
253
+ <?php include(APSL_PLUGIN_DIR.'inc/backend/about.php'); ?>
254
+ </div>
255
+
256
+ <!-- Save settings Button -->
257
+ <div class='apsl-save-settings'>
258
+ <?php wp_nonce_field( 'apsl_nonce_save_settings', 'apsl_settings_action' ); ?>
259
+ <input type='submit' class='apsl-submit-settings primary-button' name='apsl_save_settings' value='<?php _e('Save settings', APSL_TEXT_DOMAIN ); ?>' />
260
+ </div>
261
+
262
+ <div class='apsl-restore-settings'>
263
+ <?php $nonce = wp_create_nonce( 'apsl-restore-default-settings-nonce' ); ?>
264
+ <a href="<?php echo admin_url().'admin-post.php?action=apsl_restore_default_settings&_wpnonce='.$nonce;?>" onclick="return confirm('<?php _e( 'Are you sure you want to restore default settings?',APSL_TEXT_DOMAIN ); ?>')"><input type="button" value="Restore Default Settings" class="apsl-reset-button button primary-button"/></a>
265
+ </div>
266
+
267
+ </div>
268
+ </div>
269
+ </div>
270
+ </div>
271
+ </div>
inc/backend/save-settings.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $apsl_settings= array();
3
+
4
+ if(isset($_POST['apsl_save_settings'])){
5
+ $apsl_settings['network_ordering'] = $_POST['network_ordering'];
6
+
7
+ //for facebook settings
8
+ foreach ($_POST['apsl_facebook_settings'] as $key => $value) {
9
+ $$key = $value;
10
+ }
11
+ $apsl_facebook_enable = isset($apsl_facebook_enable) ? $apsl_facebook_enable : '';
12
+
13
+ $facebook_parameters = array(
14
+ 'apsl_facebook_enable' =>$apsl_facebook_enable,
15
+ 'apsl_facebook_app_id' =>$apsl_facebook_app_id,
16
+ 'apsl_facebook_app_secret'=>$apsl_facebook_app_secret
17
+ );
18
+ $apsl_settings['apsl_facebook_settings'] = $facebook_parameters;
19
+
20
+ //for twitter settings
21
+ foreach ($_POST['apsl_twitter_settings'] as $key => $value) {
22
+ $$key = $value;
23
+ }
24
+ $apsl_twitter_enable = isset($apsl_twitter_enable) ? $apsl_twitter_enable : '';
25
+
26
+ $twitter_parameters = array(
27
+ 'apsl_twitter_enable' =>$apsl_twitter_enable,
28
+ 'apsl_twitter_api_key' =>$apsl_twitter_api_key,
29
+ 'apsl_twitter_api_secret'=>$apsl_twitter_api_secret
30
+ );
31
+
32
+ $apsl_settings['apsl_twitter_settings'] = $twitter_parameters;
33
+
34
+ //for google settings
35
+ foreach ($_POST['apsl_google_settings'] as $key => $value) {
36
+ $$key = $value;
37
+ }
38
+ $apsl_google_enable = isset($apsl_google_enable) ? $apsl_google_enable : '';
39
+
40
+ $google_parameters = array(
41
+ 'apsl_google_enable' =>$apsl_google_enable,
42
+ 'apsl_google_client_id' =>$apsl_google_client_id,
43
+ 'apsl_google_client_secret'=>$apsl_google_client_secret
44
+ );
45
+ $apsl_settings['apsl_google_settings'] = $google_parameters;
46
+
47
+ $apsl_settings['apsl_enable_disable_plugin'] = $_POST['apsl_enable_disable_plugin'];
48
+
49
+ $display_options = array();
50
+ if(isset($_POST['apsl_display_options'])){
51
+
52
+ foreach ( $_POST['apsl_display_options'] as $key=>$value ){
53
+ $display_options[]=$value;
54
+ }
55
+ }
56
+
57
+ $apsl_settings['apsl_display_options'] =$display_options;
58
+
59
+ $apsl_settings['apsl_icon_theme'] = $_POST['apsl_icon_theme'];
60
+
61
+ $apsl_settings['apsl_title_text_field'] = $_POST['apsl_title_text_field'];
62
+
63
+ //for saving the settings
64
+ update_option( APSL_SETTINGS, $apsl_settings );
65
+ $_SESSION['apsl_message'] = __( 'Settings Saved Successfully.', APSL_TEXT_DOMAIN );
66
+ wp_redirect( admin_url().'admin.php?page='.APSL_TEXT_DOMAIN );
67
+ exit;
68
+ }
69
+
70
+ ?>
inc/backend/widget.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('ABSPATH') or die("No script kiddies please!");
3
+ /**
4
+ * Adds AccessPress Social Login Widget
5
+ */
6
+
7
+ class APSL_Lite_Widget extends WP_Widget {
8
+
9
+ /**
10
+ * Register widget with WordPress.
11
+ */
12
+ function __construct() {
13
+ parent::__construct(
14
+ 'apsl_widget', // Base ID
15
+ __('AccessPress Social Login Lite', APSL_TEXT_DOMAIN ), // Name
16
+ array('description' => __('AccessPress Social Login Lite Widget', APSL_TEXT_DOMAIN )) // Args
17
+ );
18
+ }
19
+
20
+ /**
21
+ * Back-end widget form.
22
+ *
23
+ * @see WP_Widget::form()
24
+ *
25
+ * @param array $instance Previously saved values from database.
26
+ */
27
+ public function form($instance) {
28
+
29
+ if (isset($instance['title'])) {
30
+ $title = $instance['title'];
31
+ } else {
32
+ $title = '';
33
+ }
34
+
35
+ if (isset($instance['login_text'])) {
36
+ $login_text = $instance['login_text'];
37
+ } else {
38
+ $login_text = '';
39
+ }
40
+
41
+ ?>
42
+ <p>
43
+ <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Title: ', APSL_TEXT_DOMAIN ); ?></label>
44
+ <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>">
45
+ </p>
46
+
47
+ <p>
48
+ <label for="<?php echo $this->get_field_id('login_text'); ?>"><?php _e( 'Login Text: ', APSL_TEXT_DOMAIN ); ?></label>
49
+ <input class="widefat" id="<?php echo $this->get_field_id('login_text'); ?>" name="<?php echo $this->get_field_name('login_text'); ?>" type="text" value="<?php echo esc_attr($login_text); ?>">
50
+ </p>
51
+
52
+ <?php
53
+ }
54
+
55
+ /**
56
+ * Front-end display of widget.
57
+ *
58
+ * @see WP_Widget::widget()
59
+ *
60
+ * @param array $args Widget arguments.
61
+ * @param array $instance Saved values from database.
62
+ */
63
+ public function widget($args, $instance) {
64
+ echo $args['before_widget'];
65
+ if (!empty($instance['title'])) {
66
+ echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
67
+ }
68
+ global $post;
69
+ if(have_posts()){
70
+ $widget_flag = get_post_meta($post->ID, 'apsl_widget_flag', true);
71
+ }else{
72
+ $widget_flag=0;
73
+ }
74
+ if($widget_flag !='1'){
75
+ echo "<div class='apsl-widget'>";
76
+ echo do_shortcode("[apsl-login-lite login_text='{$instance['login_text']}']");
77
+ echo "</div>";
78
+ }
79
+ echo $args['after_widget'];
80
+ }
81
+
82
+
83
+ /**
84
+ * Sanitize widget form values as they are saved.
85
+ *
86
+ * @see WP_Widget::update()
87
+ *
88
+ * @param array $new_instance Values just sent to be saved.
89
+ * @param array $old_instance Previously saved values from database.
90
+ *
91
+ * @return array Updated safe values to be saved.
92
+ */
93
+ public function update($new_instance, $old_instance) {
94
+ $instance = array();
95
+ $instance['title'] = (!empty($new_instance['title']) ) ? strip_tags($new_instance['title']) : '';
96
+ $instance['login_text'] = (!empty($new_instance['login_text']) ) ? strip_tags($new_instance['login_text']) : '';
97
+ return $instance;
98
+ }
99
+
100
+
101
+
102
+ }
103
+
104
+ ?>
inc/frontend/login_check.php ADDED
@@ -0,0 +1,492 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined( 'ABSPATH' ) or die( "No script kiddies please!" ); ?>
2
+ <?php
3
+
4
+ if( !class_exists( 'APSL_Lite_Login_Check_Class' ) ){
5
+ class APSL_Lite_Login_Check_Class{
6
+
7
+ //constructor
8
+ function __construct(){
9
+ if(isset($_GET['apsl_login_id'])){
10
+ $exploder=explode( '_', $_GET['apsl_login_id'] );
11
+ switch($exploder[0]){
12
+ case 'facebook':
13
+ include( APSL_PLUGIN_DIR.'facebook/src/facebook.php' );
14
+ $this->onFacebookLogin();
15
+ break;
16
+
17
+ case 'twitter':
18
+ include( APSL_PLUGIN_DIR.'twitter/OAuth.php' );
19
+ include( APSL_PLUGIN_DIR.'twitter/twitteroauth.php' );
20
+ $this->onTwitterLogin();
21
+ break;
22
+
23
+ case 'google':
24
+ include( APSL_PLUGIN_DIR.'google/Client.php' );
25
+ include( APSL_PLUGIN_DIR.'google/Service/Plus.php' );
26
+ $this->onGoogleLogin();
27
+ break;
28
+
29
+ }
30
+ }
31
+ }
32
+
33
+ //for facebook login
34
+ function onFacebookLogin(){
35
+ $response = new stdClass();
36
+ $result = $this->facebookLogin($response);
37
+ if(isset($result->status) == 'SUCCESS'){
38
+ $row = $this->getUserByMail( $result->email );
39
+ $options = get_option( APSL_SETTINGS );
40
+
41
+ if(!$row){
42
+ $this->creatUser($result->username, $result->email);
43
+ $row = $this->getUserByMail( $result->email);
44
+ update_user_meta($row->ID, 'email', $result->email);
45
+ update_user_meta($row->ID, 'first_name', $result->first_name);
46
+ update_user_meta($row->ID, 'last_name', $result->last_name);
47
+ update_user_meta($row->ID, 'deuid', $result->deuid);
48
+ update_user_meta($row->ID, 'deutype', $result->deutype);
49
+ update_user_meta($row->ID, 'deuimage', $result->deuimage);
50
+ wp_update_user( array ('ID' => $row->ID, 'display_name' => $result->first_name.' '.$result->last_name, 'role'=>$options['apsl_user_role']) ) ;
51
+ }
52
+ $this->loginUser($row->ID);
53
+ }
54
+ }
55
+
56
+
57
+
58
+ function facebookLogin(){
59
+ $request = $_REQUEST;
60
+ $site = $this->siteUrl();
61
+ $callBackUrl= $this->callBackUrl();
62
+ $response = new stdClass();
63
+ $exploder=explode('_', $_GET['apsl_login_id']);
64
+ $action = $exploder[1];
65
+ $options = get_option( APSL_SETTINGS );
66
+ $config = array(
67
+ 'appId' => $options['apsl_facebook_settings']['apsl_facebook_app_id'],
68
+ 'secret' => $options['apsl_facebook_settings']['apsl_facebook_app_secret']
69
+ );
70
+
71
+ $facebook = new Facebook($config);
72
+ $encoded_url = isset($_GET['redirect_to']) ? $_GET['redirect_to'] : '';
73
+
74
+ if(isset($encoded_url) && $encoded_url !=''){
75
+ $callback =$callBackUrl.'apsl_login_id'.'=facebook_check&redirect_to='.$encoded_url;
76
+ }else{
77
+ $callback =$callBackUrl.'apsl_login_id'.'=facebook_check';
78
+ }
79
+
80
+ if ($action == 'login'){
81
+ $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$callback, 'scope'=>'email'));
82
+ $this->redirect($loginUrl);
83
+ exit();
84
+ }else{
85
+ if(isset($_REQUEST['error'])){
86
+ $response->status = 'ERROR';
87
+ $response->error_code = 2;
88
+ $response->error_message= 'INVALID AUTHORIZATION';
89
+ return $response;
90
+ die();
91
+ }
92
+
93
+ $user = $facebook->getUser();
94
+ if ($user){
95
+ try {// Proceed knowing you have a logged in user who's authenticated.
96
+ $user_profile = $facebook->api('/me');
97
+ } catch (FacebookApiException $e) {
98
+ error_log($e);
99
+ $user = null;
100
+ }
101
+ }
102
+ if($user!=null){
103
+ $response->status = 'SUCCESS';
104
+ $response->deuid = $user_profile['id'];
105
+ $response->deutype = 'facebook';
106
+ $response->first_name = $user_profile['first_name'];
107
+ $response->last_name = $user_profile['last_name'];
108
+ $response->email = $user_profile['email'];
109
+ $response->username = $user_profile['email'];
110
+ $headers = get_headers('https://graph.facebook.com/'.$user_profile['id'].'/picture',1);
111
+
112
+ // just a precaution, check whether the header isset...
113
+ if(isset($headers['Location'])) {
114
+ $response->deuimage = $headers['Location']; // string
115
+ } else {
116
+ $response->deuimage = false; // nothing there? .. weird, but okay!
117
+ }
118
+ $response->error_message = '';
119
+ }else{
120
+ $response->status = 'ERROR';
121
+ $response->error_code = 2;
122
+ $response->error_message= 'INVALID AUTHORIZATION';
123
+ }
124
+ }
125
+ return $response;
126
+ }
127
+
128
+
129
+ //for twitter login
130
+ function onTwitterLogin(){
131
+ $result = $this->twitterLogin();
132
+ if(isset($result->status) == 'SUCCESS'){
133
+ $row = $this->getUserByMail( $result->email);
134
+ $options = get_option( APSL_SETTINGS );
135
+ if(!$row){
136
+ $this->creatUser($result->username, $result->email);
137
+ $row = $this->getUserByMail( $result->email);
138
+ update_user_meta($row->ID, 'email', $result->email);
139
+ update_user_meta($row->ID, 'first_name', $result->first_name);
140
+ update_user_meta($row->ID, 'last_name', $result->last_name);
141
+ update_user_meta($row->ID, 'deuid', $result->deuid);
142
+ update_user_meta($row->ID, 'deutype', $result->deutype);
143
+ update_user_meta($row->ID, 'deuimage', $result->deuimage);
144
+ wp_update_user( array ('ID' => $row->ID, 'display_name' => $result->first_name.' '.$result->last_name, 'role'=>$options['apsl_user_role']) ) ;
145
+ }
146
+ $this->loginUser($row->ID);
147
+ }
148
+ }
149
+
150
+ function twitterLogin(){
151
+ $request = $_REQUEST;
152
+ $site = $this->siteUrl();
153
+ $callBackUrl= $this->callBackUrl();
154
+ $response = new stdClass();
155
+ $exploder=explode('_', $_GET['apsl_login_id']);
156
+ $action = $exploder[1];
157
+ @session_start();
158
+ $options = get_option( APSL_SETTINGS );
159
+ if ($action == 'login'){
160
+ // Get identity from user and redirect browser to OpenID Server
161
+ if(!isset($request['oauth_token']) || $request['oauth_token']==''){
162
+ $twitterObj = new TwitterOAuth($options['apsl_twitter_settings']['apsl_twitter_api_key'], $options['apsl_twitter_settings']['apsl_twitter_api_secret'] );
163
+ $encoded_url = isset($_GET['redirect_to']) ? $_GET['redirect_to'] : '';
164
+ if(isset($encoded_url) && $encoded_url !=''){
165
+ $callback =$callBackUrl.'apsl_login_id'.'=twitter_check&redirect_to='.$encoded_url;
166
+ }else{
167
+ $callback =$callBackUrl.'apsl_login_id'.'=twitter_check';
168
+ }
169
+
170
+ $request_token = $twitterObj->getRequestToken($callback);
171
+ $_SESSION['oauth_twitter'] = array();
172
+
173
+ /* Save temporary credentials to session. */
174
+ $_SESSION['oauth_twitter']['oauth_token'] = $token = $request_token['oauth_token'];
175
+ $_SESSION['oauth_twitter']['oauth_token_secret'] = $request_token['oauth_token_secret'];
176
+
177
+ /* If last connection failed don't display authorization link. */
178
+ switch ($twitterObj->http_code) {
179
+ case 200:
180
+ try{
181
+ $url = $twitterObj->getAuthorizeUrl($token);
182
+ $this->redirect($url);
183
+ }catch(Exception $e){
184
+ $response->status = 'ERROR';
185
+ $response->error_code = 2;
186
+ $response->error_message= 'Could not get AuthorizeUrl.';
187
+ }
188
+ break;
189
+
190
+ default:
191
+ $response->status = 'ERROR';
192
+ $response->error_code = 2;
193
+ $response->error_message= 'Could not connect to Twitter. Refresh the page or try again later.';
194
+ break;
195
+ }
196
+
197
+ }else{
198
+ $response->status = 'ERROR';
199
+ $response->error_code = 2;
200
+ $response->error_message= 'INVALID AUTHORIZATION';
201
+ }
202
+ }else if(isset($request['oauth_token']) && isset($request['oauth_verifier'])){
203
+
204
+ /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
205
+ $twitterObj = new TwitterOAuth($options['apsl_twitter_settings']['apsl_twitter_api_key'], $options['apsl_twitter_settings']['apsl_twitter_api_secret'], $_SESSION['oauth_twitter']['oauth_token'], $_SESSION['oauth_twitter']['oauth_token_secret']);
206
+
207
+ /* Remove no longer needed request tokens */
208
+ unset($_SESSION['oauth_twitter']);
209
+ try{
210
+ $access_token = $twitterObj->getAccessToken($request['oauth_verifier']);
211
+ /* If HTTP response is 200 continue otherwise send to connect page to retry */
212
+ if (200 == $twitterObj->http_code) {
213
+ $user_profile = $twitterObj->get('users/show',array('screen_name'=>$access_token['screen_name'],'include_entities'=>true));
214
+
215
+ /* Request access twitterObj from twitter */
216
+ $response->status = 'SUCCESS';
217
+ $response->deuid = $user_profile->id;
218
+ $response->deutype = 'twitter';
219
+ $response->name = explode(' ', $user_profile->name, 2);
220
+ $response->first_name = $response->name[0];
221
+ $response->last_name = (isset($response->name[1]))?$response->name[1]:'';
222
+ $response->deuimage = $user_profile->profile_image_url;
223
+ $response->email = $user_profile->screen_name.'@twitter.com';
224
+ $response->username = $user_profile->screen_name.'@twitter.com';
225
+ $response->error_message = '';
226
+ }else{
227
+ $response->status = 'ERROR';
228
+ $response->error_code = 2;
229
+ $response->error_message= 'Could not connect to Twitter. Refresh the page or try again later.';
230
+ }
231
+ }catch(Exception $e){
232
+ $response->status = 'ERROR';
233
+ $response->error_code = 2;
234
+ $response->error_message= 'Could not get AccessToken.';
235
+ }
236
+ }else{ // User Canceled your Request
237
+ $response->status = 'ERROR';
238
+ $response->error_code = 1;
239
+ $response->error_message= "USER CANCELED REQUEST";
240
+ }
241
+ return $response;
242
+ }
243
+
244
+ //for google login
245
+ function onGoogleLogin(){
246
+ $result = $this->GoogleLogin();
247
+ if(isset($result->status) == 'SUCCESS'){
248
+ $row = $this->getUserByMail( $result->email);
249
+ $options = get_option( APSL_SETTINGS );
250
+ if(!$row){
251
+ $this->creatUser($result->username, $result->email);
252
+ $row = $this->getUserByMail($result->email);
253
+ update_user_meta($row->ID, 'email', $result->email);
254
+ update_user_meta($row->ID, 'first_name', $result->first_name);
255
+ update_user_meta($row->ID, 'last_name', $result->last_name);
256
+ update_user_meta($row->ID, 'deuid', $result->deuid);
257
+ update_user_meta($row->ID, 'deutype', $result->deutype);
258
+ wp_update_user( array ('ID' => $row->ID, 'display_name' => $result->first_name, 'role'=>$options['apsl_user_role']) ) ;
259
+ }
260
+ $this->loginUser($row->ID);
261
+ }
262
+ }
263
+
264
+ function GoogleLogin(){
265
+ $post = $_POST;
266
+ $get = $_GET;
267
+ $request = $_REQUEST;
268
+ $site = $this->siteUrl();
269
+ $callBackUrl= $this->callBackUrl();
270
+ $options = get_option( APSL_SETTINGS );
271
+ $response = new stdClass();
272
+ $a = explode('_', $_GET['apsl_login_id']);
273
+ $action = $a[1];
274
+ $client_id = $options['apsl_google_settings']['apsl_google_client_id'];
275
+ $client_secret = $options['apsl_google_settings']['apsl_google_client_secret'];
276
+
277
+ $encoded_url = isset($_GET['redirect_to']) ? $_GET['redirect_to'] : '';
278
+ if(isset($encoded_url) && $encoded_url !=''){
279
+ $callback =$callBackUrl.'apsl_login_id'.'=google_check';
280
+ }else{
281
+ $callback =$callBackUrl.'apsl_login_id'.'=google_check';
282
+ }
283
+
284
+ $redirect_uri = $callback;
285
+ $client = new Google_Client;
286
+ $client->setClientId($client_id);
287
+ $client->setClientSecret($client_secret);
288
+ $client->setRedirectUri($redirect_uri);
289
+ $client->addScope("https://www.googleapis.com/auth/plus.profile.emails.read");
290
+ $service = new Google_Service_Plus($client);
291
+
292
+ if ($action == 'login'){// Get identity from user and redirect browser to OpenID Server
293
+ if(!(isset($_SESSION['access_token']) && $_SESSION['access_token'])){
294
+ $authUrl = $client->createAuthUrl();
295
+ $this->redirect($authUrl);
296
+ die();
297
+ }else{
298
+ $this->redirect($redirect_uri);
299
+ die();
300
+ }
301
+
302
+ }elseif(isset($_GET['code'])){ // Perform HTTP Request to OpenID server to validate key
303
+ $client->authenticate($_GET['code']);
304
+ $_SESSION['access_token'] = $client->getAccessToken();
305
+ $this->redirect($redirect_uri);
306
+ die();
307
+ }elseif(isset($_SESSION['access_token']) && $_SESSION['access_token']){
308
+ $client->setAccessToken($_SESSION['access_token']);
309
+ try{
310
+ $user = $service->people->get("me", array());
311
+ }catch(Exception $fault){
312
+ unset($_SESSION['access_token']);
313
+ $ref_object = $this->accessProtected($fault, 'errors');
314
+ echo $ref_object[0]['message']." Please notify about this error to the Site Admin.";
315
+ die();
316
+ }
317
+
318
+ if(!empty($user)){
319
+ if(!empty($user->emails)){
320
+ $response->email = $user->emails[0]->value;
321
+ $response->username = $user->emails[0]->value;
322
+ $response->first_name = $user->name->givenName;
323
+ $response->last_name = $user->name->familyName;
324
+ $response->deuid = $user->emails[0]->value;
325
+ $response->deutype = 'google';
326
+ $response->status = 'SUCCESS';
327
+ $response->error_message = '';
328
+ }else{
329
+ $response->status = 'ERROR';
330
+ $response->error_code = 2;
331
+ $response->error_message = "INVALID AUTHORIZATION";
332
+ }
333
+ }else{// Signature Verification Failed
334
+ $response->status = 'ERROR';
335
+ $response->error_code = 2;
336
+ $response->error_message = "INVALID AUTHORIZATION";
337
+ }
338
+ }elseif ($get['openid_mode'] == 'cancel'){ // User Canceled your Request
339
+ $response->status = 'ERROR';
340
+ $response->error_code = 1;
341
+ $response->error_message = "USER CANCELED REQUEST";
342
+ }else{ // User failed to login
343
+ $response->status = 'ERROR';
344
+ $response->error_code = 3;
345
+ $response->error_message = "USER LOGIN FAIL";
346
+ }
347
+ return $response;
348
+ }
349
+
350
+
351
+ //other remaining methods
352
+ function siteUrl(){
353
+ return site_url();
354
+ }
355
+
356
+ function callBackUrl(){
357
+ $url = 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"];
358
+ if(strpos($url, '?')===false){
359
+ $url .= '?';
360
+ }else{
361
+ $url .= '&';
362
+ }
363
+ return $url;
364
+ }
365
+
366
+ //function to return json values from social media urls
367
+ function get_json_values( $url ){
368
+ $response = wp_remote_get( $url);
369
+ $json_response = wp_remote_retrieve_body( $response );
370
+ return $json_response;
371
+ }
372
+
373
+ function redirect($redirect){
374
+ if (headers_sent()){ // Use JavaScript to redirect if content has been previously sent (not recommended, but safe)
375
+ echo '<script language="JavaScript" type="text/javascript">window.location=\'';
376
+ echo $redirect;
377
+ echo '\';</script>';
378
+ }else{ // Default Header Redirect
379
+ header('Location: ' . $redirect);
380
+ }
381
+ exit;
382
+ }
383
+
384
+ function updateUser($username, $email){
385
+ $row = $this->getUserByUsername ($username);
386
+ if($row && $email!='' && $row->user_email!=$email){
387
+ $row = (array) $row;
388
+ $row['user_email'] = $email;
389
+ wp_update_user($row);
390
+ }
391
+ }
392
+
393
+ function getUserByMail($email){
394
+ global $wpdb;
395
+ $row = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_email = '$email'");
396
+ if($row){
397
+ return $row;
398
+ }
399
+ return false;
400
+ }
401
+
402
+ function getUserByUsername ($username){
403
+ global $wpdb;
404
+ $row = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$username'");
405
+ if($row){
406
+ return $row;
407
+ }
408
+ return false;
409
+ }
410
+
411
+ function creatUser($user_name, $user_email){
412
+ $random_password = wp_generate_password(12, false);
413
+ $user_id = wp_create_user( $user_name, $random_password, $user_email );
414
+ wp_new_user_notification( $user_id, $random_password );
415
+ return $user_id;
416
+ }
417
+
418
+ function set_cookies($user_id = 0, $remember = true) {
419
+ if (!function_exists('wp_set_auth_cookie')){
420
+ return false;
421
+ }
422
+ if (!$user_id){
423
+ return false;
424
+ }
425
+ wp_clear_auth_cookie();
426
+ wp_set_auth_cookie($user_id, $remember);
427
+ wp_set_current_user($user_id);
428
+ return true;
429
+ }
430
+
431
+ function loginUser($user_id){
432
+ $reauth = empty($_REQUEST['reauth']) ? false : true;
433
+ if ( $reauth )
434
+ wp_clear_auth_cookie();
435
+
436
+ if ( isset( $_REQUEST['redirect_to'] ) ) {
437
+ $redirect_to = $_REQUEST['redirect_to'];
438
+ // Redirect to https if user wants ssl
439
+ if ( isset($secure_cookie) && false !== strpos($redirect_to, 'wp-admin') )
440
+ $redirect_to = preg_replace('|^http://|', 'https://', $redirect_to);
441
+ } else {
442
+ $redirect_to = admin_url();
443
+ }
444
+
445
+ if ( !isset($secure_cookie) && is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) )
446
+ $secure_cookie = false;
447
+
448
+ // If cookies are disabled we can't log in even with a valid user+pass
449
+ if ( isset($_POST['testcookie']) && empty($_COOKIE[TEST_COOKIE]) )
450
+ $user = new WP_Error('test_cookie', __("<strong>ERROR</strong>: Cookies are blocked or not supported by your browser. You must <a href='http://www.google.com/cookies.html'>enable cookies</a> to use WordPress."));
451
+ else
452
+ $user = wp_signon('', isset($secure_cookie));
453
+
454
+ if(!$this->set_cookies($user_id)){
455
+ return false;
456
+ }
457
+
458
+ $requested_redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : site_url();
459
+ $redirect_to = apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
460
+ wp_safe_redirect( $redirect_to );
461
+ exit();
462
+ }
463
+
464
+ //returns the current page url
465
+ function curPageURL() {
466
+ $pageURL = 'http';
467
+ if ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
468
+ $pageURL .= "s";
469
+ }
470
+ $pageURL .= "://";
471
+ if ( $_SERVER["SERVER_PORT"] != "80" ) {
472
+ $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
473
+ } else {
474
+ $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
475
+ }
476
+ return $pageURL;
477
+ }
478
+
479
+ //function to access the protected object properties
480
+ function accessProtected($obj, $prop) {
481
+ $reflection = new ReflectionClass($obj);
482
+ $property = $reflection->getProperty($prop);
483
+ $property->setAccessible(true);
484
+ return $property->getValue($obj);
485
+ }
486
+ } //termination of a class
487
+
488
+ } //end of if statement
489
+
490
+ $apsl_login_check = new APSL_Lite_Login_Check_Class();
491
+
492
+ ?>
inc/frontend/login_integration.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $options = get_option( APSL_SETTINGS ); ?>
2
+
3
+ <div class='apsl-login-networks theme-<?php echo $options['apsl_icon_theme']; ?> clearfix'>
4
+ <span class='apsl-login-new-text'><?php echo $options['apsl_title_text_field']; ?></span>
5
+ <?php if( isset($_REQUEST['error']) || isset($_REQUEST['denied']) ){ ?>
6
+ <div class='apsl-error'>
7
+ <?php _e('You have Access Denied. Please authorize the app to login.', APSL_TEXT_DOMAIN ); ?>
8
+ </div>
9
+ <?php } ?>
10
+
11
+ <div class='social-networks'>
12
+ <?php foreach($options['network_ordering'] as $key=>$value): ?>
13
+ <?php if($options["apsl_{$value}_settings"]["apsl_{$value}_enable"]==='enable'){ ?>
14
+ <a href="?apsl_login_id=<?php echo $value; ?>_login" title='<?php _e('Login with', APSL_TEXT_DOMAIN ); echo ' '.$value; ?>' >
15
+ <div class="apsl-icon-block icon-<?php echo $value; ?> clearfix">
16
+ <i class="fa fa-<?php echo $value; ?>"></i>
17
+ </div>
18
+ </a>
19
+ <?php } ?>
20
+ <?php endforeach; ?>
21
+ </div>
22
+ </div>
inc/frontend/shortcode.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined( 'ABSPATH' ) or die( 'No script kiddies please!' ); ?>
2
+ <?php
3
+ if (is_user_logged_in()){
4
+ global $current_user;
5
+ $user_info = "<span class='display-name'>{$current_user->data->display_name}</span>&nbsp;";
6
+ $user_info .= get_avatar( $current_user->ID, 20 );
7
+ ?><div class="user-login">Welcome <b><?php echo $user_info;?></b>&nbsp;|&nbsp;<a href="<?php echo wp_logout_url(); ?>" title="Logout">Logout</a></div>
8
+ <?php
9
+ }else{
10
+ ?>
11
+ <?php $options = get_option( APSL_SETTINGS ); ?>
12
+ <?php
13
+ $current_url = APSL_Lite_Login_Check_Class::curPageURL();
14
+ $encoded_url = urlencode($current_url);
15
+ ?>
16
+
17
+ <?php $theme = $options['apsl_icon_theme']; ?>
18
+
19
+ <div class='apsl-login-networks theme-<?php echo $theme; ?> clearfix'>
20
+ <?php if(isset($attr['login_text']) && $attr['login_text']!=''){ ?>
21
+ <span class='apsl-login-new-text'><?php echo $attr['login_text']; ?></span>
22
+ <?php } ?>
23
+ <?php if(isset($_REQUEST['error']) || isset($_REQUEST['denied'])){ ?>
24
+ <div class='apsl-error'><?php _e('You have Access Denied. Please authorize the app to login.', APSL_TEXT_DOMAIN ); ?></div>
25
+ <?php } ?>
26
+ <div class='social-networks'>
27
+ <?php foreach($options['network_ordering'] as $key=>$value): ?>
28
+ <?php if($options["apsl_{$value}_settings"]["apsl_{$value}_enable"]==='enable'){ ?>
29
+ <a href="?apsl_login_id=<?php echo $value; ?>_login&redirect_to=<?php echo $encoded_url; ?>" title='<?php _e('Login with', APSL_TEXT_DOMAIN ); echo ' '.$value; ?>'>
30
+ <div class="apsl-icon-block icon-<?php echo $value; ?>">
31
+ <i class="fa fa-<?php echo $value; ?>"></i>
32
+ </div>
33
+ </a>
34
+ <?php } ?>
35
+ <?php endforeach; ?>
36
+ </div>
37
+ </div>
38
+ <?php } ?>
index.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ //silence is golden
3
+
4
+ ?>
js/backend.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function($){
2
+ //for sorting the social networks
3
+ $('.network-settings').sortable({
4
+ containment: "parent",
5
+ });
6
+
7
+ //for the tabs
8
+ $('.apsl-settings-tab').click(function(){
9
+ $( '.apsl-settings-tab' ).removeClass( 'apsl-active-tab' );
10
+ $(this).addClass( 'apsl-active-tab' );
11
+ var tab_id = 'tab-'+$(this).attr('id');
12
+ $('.apsl-tab-contents').hide();
13
+ $('#'+tab_id).show();
14
+ });
15
+
16
+
17
+ $('.apsl-label').click(function(){
18
+ $(this).closest('.apsl-settings').find('.apsl_network_settings_wrapper').toggle('slow', function(){
19
+ if ($(this).closest('.apsl-settings').find('.apsl_network_settings_wrapper').is(':visible')) {
20
+ $(this).closest('.apsl-settings').find('.apsl_show_hide i').removeClass('fa-caret-down');
21
+ $(this).closest('.apsl-settings').find('.apsl_show_hide i').addClass('fa-caret-up');
22
+ } else {
23
+ $(this).closest('.apsl-settings').find('.apsl_show_hide i').removeClass('fa-caret-up');
24
+ $(this).closest('.apsl-settings').find('.apsl_show_hide i').addClass('fa-caret-down');
25
+ }
26
+
27
+ });
28
+ });
29
+
30
+ });
js/frontend.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ jQuery(document).ready(function($){
2
+ $('.show-apsl-container').on('click', function(e){
3
+ e.preventDefault();
4
+ $('.apsl-container').slideToggle();
5
+ });
6
+ });
readme.txt ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === AccessPress Social Login Lite ===
2
+ Contributors: Access Keys
3
+ Tags: social, login, social login, facebook, twitter, google, social connect, social network login, register, login with, signin, oauth, authorize, oauth
4
+ Donate link: http://accesspressthemes.com/donation/
5
+ Requires at least: 3.8
6
+ Tested up to: 4.2
7
+ Stable tag: 1.0.0
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ No WordPress account and user credentials to remember, login using any of the most popular 3 social media accounts!
12
+
13
+ == Description ==
14
+ AccessPress <strong>Social Login<strong> lite - is a perfect <strong>Free WordPress plugin</strong> to allow your website users to register/login to the website using one of their favorite social website accounts.
15
+
16
+ As a website owner you can easily configure which social accounts to enable/disable for login, which areas of the website social login should be displayed (login, registration, comments). Also you can select the social login buttons/icons from 4 beautifully designed templates to fit them with your website's overall design/theme. Your website will fetch real data of the user's social profile!
17
+
18
+ Your website visitors, can choose one of their favorite social accounts to login into your website. No need to fill up the long registration forms and remember many login credentials.
19
+
20
+ Plugin setup is as easy as 1, 2, 3!
21
+
22
+ <strong>Select from the most popular 3 social media<strong>
23
+ configure which social media option to display at login area.
24
+
25
+ <strong>Easy setup</strong>
26
+ Just put a few authorization details for each option you want to enable. Select which login area you'd like to show the social login option ( login, registration, comments).
27
+
28
+ <strong>Beautify your login page</strong>
29
+ Select from 4 beautiful designs of social login buttons/icons.
30
+
31
+
32
+ <strong>Your website visitors can now login using one of their favorite social account login. Easy, quick and convenient.<strong>
33
+
34
+ = Free Features: =
35
+ * Login with the most popular 3 social media.
36
+ * Configure each social accounts by setting up a few authorization details.
37
+ * Configure which social media account to enable/disable in the login area.
38
+ * Configure which area of the website the social login should be displayed (eg. Registration, login, comments).
39
+ * Option to choose from 4 beautifully designed social login buttons/icons.
40
+ * Option to configure the order of the social login buttons.
41
+ * Use shortcode anywhere in the post/page to display social login.
42
+ * Use widget to display social login.
43
+ * Option to enable / disable social login (completely).
44
+ * One click registration/login.
45
+ * Ability to send the login details to the user's email.
46
+ * Integrate with the wordpress users.
47
+ * Nice and easy to use admin interface for site admin to manage, configure the plugin.
48
+ * Translation ready.
49
+ * <strong>Support</strong>
50
+ - Dedicated email, forum support.
51
+
52
+ = Supported Networks: =
53
+ * Facebook
54
+ * Twitter
55
+ * Google
56
+
57
+
58
+ = Premium Features: =
59
+
60
+ For more features upgrade to PRO version
61
+
62
+ Upgrade to PRO version for:
63
+ ★ 9 social network support
64
+ - Facebook
65
+ - Twitter
66
+ - Google
67
+ - LinkedIn
68
+ - Vkonate
69
+ - Instagram
70
+ - Foursquare
71
+ - Wordpress
72
+ - Buffer
73
+
74
+ ★ 16 Beautiful design templates.
75
+
76
+ ★ Works with Woocommerce.
77
+
78
+ ★ Works with Buddypress.
79
+
80
+ ★ High level of customization/configuration - admin can change the title
81
+ attributes for social media icons, other texts, strings etc.
82
+
83
+ = Premium upgrade =
84
+
85
+ For premium upgrade please go [here](https://accesspressthemes.com/wordpress-plugins/accesspress-social-login/)
86
+
87
+
88
+ = Some Useful Links =
89
+ * <strong>Support Email</strong>: support@accesspressthemes.com
90
+ * <strong>Support Forum Link</strong>: http://accesspressthemes.com/support/
91
+ * <strong>Website Link</strong>: http://accesspressthemes.com/
92
+ * <strong>Youtube channel link</strong>: https://www.youtube.com/watch?v=TjZNcVG3fDE
93
+ * <strong>Facebook link</strong>: https://www.facebook.com/AccessPressThemes
94
+
95
+
96
+
97
+ For a easy installation guide checkout the Installation tab above.
98
+
99
+ For complete information and documentation regarding plugin, please visit below links.
100
+
101
+ [Plugin information](https://accesspressthemes.com/wordpress-plugins/accesspress-social-login-lite/)
102
+
103
+ [Docs](https://accesspressthemes.com/documentation/documentationplugin-instruction-accesspress-social-login-lite/)
104
+
105
+ [Demo](https://accesspressthemes.com/demo/wordpress-plugins/accesspress-social-login-lite/)
106
+
107
+
108
+ == Installation ==
109
+ 1. Unzip accesspress-social-login-lite.zip
110
+ 2. Upload all the files to the /wp-content/plugins/accesspress-social-login-lite
111
+ 3. Activate the plugin through the 'Plugins' menu in WordPress.
112
+ 4. For customizing the plugin's settings, click on AccessPress Social login lite menu in Wordpress left admin menu.
113
+
114
+ == Frequently Asked Questions ==
115
+ = What does this plugin do? =
116
+ This plugin provides the ability to allow anyone to login into your site using major social media (Facebook, Twitter, google) by the use of the latest APIs on your website!
117
+
118
+ = Will it effect my site's speed? =
119
+ No, because we have integrated the plugin with the minimal codes to do the social login.
120
+
121
+ = Do I need to design the icons again? =
122
+ No , you won't need to get any trouble regarding design and layout of the icons since we have provided inbuilt 4 beautiful icon themes.You can choose any as per your requirement.
123
+
124
+ = Can I use AccessPress social Login lite where ever I want? =
125
+ Yes. You can use the AccessPress social login lite anywhere by using shortcode in your templates files or in posts and pages content. Also you can use login widget in sidebar.
126
+
127
+ == Screenshots ==
128
+ 1. Backend Display of Social Login.
129
+ 2. Frontend Display of Social Login.
130
+ 3. Backend Networks settings section.
131
+ 4. Backend Other settings Section.
132
+
133
+ == Changelog ==
134
+ = 1.0.0 =
135
+ * Plugin submitted to http://wordpress.org for review and approval
136
+
137
+ == Upgrade Notice ==
138
+ There is an update available for the AccessPress Social Login lite Plugin. Please update to recieve new updates and bug fixes.
twitter/OAuth.php ADDED
@@ -0,0 +1,895 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // vim: foldmethod=marker
3
+
4
+ /* Generic exception class
5
+ */
6
+ class OAuthException extends Exception {
7
+ // pass
8
+ }
9
+
10
+ class OAuthConsumer {
11
+ public $key;
12
+ public $secret;
13
+
14
+ function __construct($key, $secret, $callback_url=NULL) {
15
+ $this->key = $key;
16
+ $this->secret = $secret;
17
+ $this->callback_url = $callback_url;
18
+ }
19
+
20
+ function __toString() {
21
+ return "OAuthConsumer[key=$this->key,secret=$this->secret]";
22
+ }
23
+ }
24
+
25
+ class OAuthToken {
26
+ // access tokens and request tokens
27
+ public $key;
28
+ public $secret;
29
+
30
+ /**
31
+ * key = the token
32
+ * secret = the token secret
33
+ */
34
+ function __construct($key, $secret) {
35
+ $this->key = $key;
36
+ $this->secret = $secret;
37
+ }
38
+
39
+ /**
40
+ * generates the basic string serialization of a token that a server
41
+ * would respond to request_token and access_token calls with
42
+ */
43
+ function to_string() {
44
+ return "oauth_token=" .
45
+ OAuthUtil::urlencode_rfc3986($this->key) .
46
+ "&oauth_token_secret=" .
47
+ OAuthUtil::urlencode_rfc3986($this->secret);
48
+ }
49
+
50
+ function __toString() {
51
+ return $this->to_string();
52
+ }
53
+ }
54
+
55
+ /**
56
+ * A class for implementing a Signature Method
57
+ * See section 9 ("Signing Requests") in the spec
58
+ */
59
+ abstract class OAuthSignatureMethod {
60
+ /**
61
+ * Needs to return the name of the Signature Method (ie HMAC-SHA1)
62
+ * @return string
63
+ */
64
+ abstract public function get_name();
65
+
66
+ /**
67
+ * Build up the signature
68
+ * NOTE: The output of this function MUST NOT be urlencoded.
69
+ * the encoding is handled in OAuthRequest when the final
70
+ * request is serialized
71
+ * @param OAuthRequest $request
72
+ * @param OAuthConsumer $consumer
73
+ * @param OAuthToken $token
74
+ * @return string
75
+ */
76
+ abstract public function build_signature($request, $consumer, $token);
77
+
78
+ /**
79
+ * Verifies that a given signature is correct
80
+ * @param OAuthRequest $request
81
+ * @param OAuthConsumer $consumer
82
+ * @param OAuthToken $token
83
+ * @param string $signature
84
+ * @return bool
85
+ */
86
+ public function check_signature($request, $consumer, $token, $signature) {
87
+ $built = $this->build_signature($request, $consumer, $token);
88
+
89
+ // Check for zero length, although unlikely here
90
+ if (strlen($built) == 0 || strlen($signature) == 0) {
91
+ return false;
92
+ }
93
+
94
+ if (strlen($built) != strlen($signature)) {
95
+ return false;
96
+ }
97
+
98
+ // Avoid a timing leak with a (hopefully) time insensitive compare
99
+ $result = 0;
100
+ for ($i = 0; $i < strlen($signature); $i++) {
101
+ $result |= ord($built{$i}) ^ ord($signature{$i});
102
+ }
103
+
104
+ return $result == 0;
105
+ }
106
+ }
107
+
108
+ /**
109
+ * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
110
+ * where the Signature Base String is the text and the key is the concatenated values (each first
111
+ * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
112
+ * character (ASCII code 38) even if empty.
113
+ * - Chapter 9.2 ("HMAC-SHA1")
114
+ */
115
+ class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
116
+ function get_name() {
117
+ return "HMAC-SHA1";
118
+ }
119
+
120
+ public function build_signature($request, $consumer, $token) {
121
+ $base_string = $request->get_signature_base_string();
122
+ $request->base_string = $base_string;
123
+
124
+ $key_parts = array(
125
+ $consumer->secret,
126
+ ($token) ? $token->secret : ""
127
+ );
128
+
129
+ $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
130
+ $key = implode('&', $key_parts);
131
+
132
+ return base64_encode(hash_hmac('sha1', $base_string, $key, true));
133
+ }
134
+ }
135
+
136
+ /**
137
+ * The PLAINTEXT method does not provide any security protection and SHOULD only be used
138
+ * over a secure channel such as HTTPS. It does not use the Signature Base String.
139
+ * - Chapter 9.4 ("PLAINTEXT")
140
+ */
141
+ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
142
+ public function get_name() {
143
+ return "PLAINTEXT";
144
+ }
145
+
146
+ /**
147
+ * oauth_signature is set to the concatenated encoded values of the Consumer Secret and
148
+ * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is
149
+ * empty. The result MUST be encoded again.
150
+ * - Chapter 9.4.1 ("Generating Signatures")
151
+ *
152
+ * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
153
+ * OAuthRequest handles this!
154
+ */
155
+ public function build_signature($request, $consumer, $token) {
156
+ $key_parts = array(
157
+ $consumer->secret,
158
+ ($token) ? $token->secret : ""
159
+ );
160
+
161
+ $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
162
+ $key = implode('&', $key_parts);
163
+ $request->base_string = $key;
164
+
165
+ return $key;
166
+ }
167
+ }
168
+
169
+ /**
170
+ * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
171
+ * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for
172
+ * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a
173
+ * verified way to the Service Provider, in a manner which is beyond the scope of this
174
+ * specification.
175
+ * - Chapter 9.3 ("RSA-SHA1")
176
+ */
177
+ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
178
+ public function get_name() {
179
+ return "RSA-SHA1";
180
+ }
181
+
182
+ // Up to the SP to implement this lookup of keys. Possible ideas are:
183
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
184
+ // (2) fetch via http using a url provided by the requester
185
+ // (3) some sort of specific discovery code based on request
186
+ //
187
+ // Either way should return a string representation of the certificate
188
+ protected abstract function fetch_public_cert(&$request);
189
+
190
+ // Up to the SP to implement this lookup of keys. Possible ideas are:
191
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
192
+ //
193
+ // Either way should return a string representation of the certificate
194
+ protected abstract function fetch_private_cert(&$request);
195
+
196
+ public function build_signature($request, $consumer, $token) {
197
+ $base_string = $request->get_signature_base_string();
198
+ $request->base_string = $base_string;
199
+
200
+ // Fetch the private key cert based on the request
201
+ $cert = $this->fetch_private_cert($request);
202
+
203
+ // Pull the private key ID from the certificate
204
+ $privatekeyid = openssl_get_privatekey($cert);
205
+
206
+ // Sign using the key
207
+ $ok = openssl_sign($base_string, $signature, $privatekeyid);
208
+
209
+ // Release the key resource
210
+ openssl_free_key($privatekeyid);
211
+
212
+ return base64_encode($signature);
213
+ }
214
+
215
+ public function check_signature($request, $consumer, $token, $signature) {
216
+ $decoded_sig = base64_decode($signature);
217
+
218
+ $base_string = $request->get_signature_base_string();
219
+
220
+ // Fetch the public key cert based on the request
221
+ $cert = $this->fetch_public_cert($request);
222
+
223
+ // Pull the public key ID from the certificate
224
+ $publickeyid = openssl_get_publickey($cert);
225
+
226
+ // Check the computed signature against the one passed in the query
227
+ $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
228
+
229
+ // Release the key resource
230
+ openssl_free_key($publickeyid);
231
+
232
+ return $ok == 1;
233
+ }
234
+ }
235
+
236
+ class OAuthRequest {
237
+ protected $parameters;
238
+ protected $http_method;
239
+ protected $http_url;
240
+ // for debug purposes
241
+ public $base_string;
242
+ public static $version = '1.0';
243
+ public static $POST_INPUT = 'php://input';
244
+
245
+ function __construct($http_method, $http_url, $parameters=NULL) {
246
+ $parameters = ($parameters) ? $parameters : array();
247
+ $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
248
+ $this->parameters = $parameters;
249
+ $this->http_method = $http_method;
250
+ $this->http_url = $http_url;
251
+ }
252
+
253
+
254
+ /**
255
+ * attempt to build up a request from what was passed to the server
256
+ */
257
+ public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
258
+ $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
259
+ ? 'http'
260
+ : 'https';
261
+ $http_url = ($http_url) ? $http_url : $scheme .
262
+ '://' . $_SERVER['SERVER_NAME'] .
263
+ ':' .
264
+ $_SERVER['SERVER_PORT'] .
265
+ $_SERVER['REQUEST_URI'];
266
+ $http_method = ($http_method) ? $http_method : $_SERVER['REQUEST_METHOD'];
267
+
268
+ // We weren't handed any parameters, so let's find the ones relevant to
269
+ // this request.
270
+ // If you run XML-RPC or similar you should use this to provide your own
271
+ // parsed parameter-list
272
+ if (!$parameters) {
273
+ // Find request headers
274
+ $request_headers = OAuthUtil::get_headers();
275
+
276
+ // Parse the query-string to find GET parameters
277
+ $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
278
+
279
+ // It's a POST request of the proper content-type, so parse POST
280
+ // parameters and add those overriding any duplicates from GET
281
+ if ($http_method == "POST"
282
+ && isset($request_headers['Content-Type'])
283
+ && strstr($request_headers['Content-Type'],
284
+ 'application/x-www-form-urlencoded')
285
+ ) {
286
+ $post_data = OAuthUtil::parse_parameters(
287
+ file_get_contents(self::$POST_INPUT)
288
+ );
289
+ $parameters = array_merge($parameters, $post_data);
290
+ }
291
+
292
+ // We have a Authorization-header with OAuth data. Parse the header
293
+ // and add those overriding any duplicates from GET or POST
294
+ if (isset($request_headers['Authorization']) && substr($request_headers['Authorization'], 0, 6) == 'OAuth ') {
295
+ $header_parameters = OAuthUtil::split_header(
296
+ $request_headers['Authorization']
297
+ );
298
+ $parameters = array_merge($parameters, $header_parameters);
299
+ }
300
+
301
+ }
302
+
303
+ return new OAuthRequest($http_method, $http_url, $parameters);
304
+ }
305
+
306
+ /**
307
+ * pretty much a helper function to set up the request
308
+ */
309
+ public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
310
+ $parameters = ($parameters) ? $parameters : array();
311
+ $defaults = array("oauth_version" => OAuthRequest::$version,
312
+ "oauth_nonce" => OAuthRequest::generate_nonce(),
313
+ "oauth_timestamp" => OAuthRequest::generate_timestamp(),
314
+ "oauth_consumer_key" => $consumer->key);
315
+ if ($token)
316
+ $defaults['oauth_token'] = $token->key;
317
+
318
+ $parameters = array_merge($defaults, $parameters);
319
+
320
+ return new OAuthRequest($http_method, $http_url, $parameters);
321
+ }
322
+
323
+ public function set_parameter($name, $value, $allow_duplicates = true) {
324
+ if ($allow_duplicates && isset($this->parameters[$name])) {
325
+ // We have already added parameter(s) with this name, so add to the list
326
+ if (is_scalar($this->parameters[$name])) {
327
+ // This is the first duplicate, so transform scalar (string)
328
+ // into an array so we can add the duplicates
329
+ $this->parameters[$name] = array($this->parameters[$name]);
330
+ }
331
+
332
+ $this->parameters[$name][] = $value;
333
+ } else {
334
+ $this->parameters[$name] = $value;
335
+ }
336
+ }
337
+
338
+ public function get_parameter($name) {
339
+ return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
340
+ }
341
+
342
+ public function get_parameters() {
343
+ return $this->parameters;
344
+ }
345
+
346
+ public function unset_parameter($name) {
347
+ unset($this->parameters[$name]);
348
+ }
349
+
350
+ /**
351
+ * The request parameters, sorted and concatenated into a normalized string.
352
+ * @return string
353
+ */
354
+ public function get_signable_parameters() {
355
+ // Grab all parameters
356
+ $params = $this->parameters;
357
+
358
+ // Remove oauth_signature if present
359
+ // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
360
+ if (isset($params['oauth_signature'])) {
361
+ unset($params['oauth_signature']);
362
+ }
363
+
364
+ return OAuthUtil::build_http_query($params);
365
+ }
366
+
367
+ /**
368
+ * Returns the base string of this request
369
+ *
370
+ * The base string defined as the method, the url
371
+ * and the parameters (normalized), each urlencoded
372
+ * and the concated with &.
373
+ */
374
+ public function get_signature_base_string() {
375
+ $parts = array(
376
+ $this->get_normalized_http_method(),
377
+ $this->get_normalized_http_url(),
378
+ $this->get_signable_parameters()
379
+ );
380
+
381
+ $parts = OAuthUtil::urlencode_rfc3986($parts);
382
+
383
+ return implode('&', $parts);
384
+ }
385
+
386
+ /**
387
+ * just uppercases the http method
388
+ */
389
+ public function get_normalized_http_method() {
390
+ return strtoupper($this->http_method);
391
+ }
392
+
393
+ /**
394
+ * parses the url and rebuilds it to be
395
+ * scheme://host/path
396
+ */
397
+ public function get_normalized_http_url() {
398
+ $parts = parse_url($this->http_url);
399
+
400
+ $scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http';
401
+ $port = (isset($parts['port'])) ? $parts['port'] : (($scheme == 'https') ? '443' : '80');
402
+ $host = (isset($parts['host'])) ? strtolower($parts['host']) : '';
403
+ $path = (isset($parts['path'])) ? $parts['path'] : '';
404
+
405
+ if (($scheme == 'https' && $port != '443')
406
+ || ($scheme == 'http' && $port != '80')) {
407
+ $host = "$host:$port";
408
+ }
409
+ return "$scheme://$host$path";
410
+ }
411
+
412
+ /**
413
+ * builds a url usable for a GET request
414
+ */
415
+ public function to_url() {
416
+ $post_data = $this->to_postdata();
417
+ $out = $this->get_normalized_http_url();
418
+ if ($post_data) {
419
+ $out .= '?'.$post_data;
420
+ }
421
+ return $out;
422
+ }
423
+
424
+ /**
425
+ * builds the data one would send in a POST request
426
+ */
427
+ public function to_postdata() {
428
+ return OAuthUtil::build_http_query($this->parameters);
429
+ }
430
+
431
+ /**
432
+ * builds the Authorization: header
433
+ */
434
+ public function to_header($realm=null) {
435
+ $first = true;
436
+ if($realm) {
437
+ $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
438
+ $first = false;
439
+ } else
440
+ $out = 'Authorization: OAuth';
441
+
442
+ $total = array();
443
+ foreach ($this->parameters as $k => $v) {
444
+ if (substr($k, 0, 5) != "oauth") continue;
445
+ if (is_array($v)) {
446
+ throw new OAuthException('Arrays not supported in headers');
447
+ }
448
+ $out .= ($first) ? ' ' : ',';
449
+ $out .= OAuthUtil::urlencode_rfc3986($k) .
450
+ '="' .
451
+ OAuthUtil::urlencode_rfc3986($v) .
452
+ '"';
453
+ $first = false;
454
+ }
455
+ return $out;
456
+ }
457
+
458
+ public function __toString() {
459
+ return $this->to_url();
460
+ }
461
+
462
+
463
+ public function sign_request($signature_method, $consumer, $token) {
464
+ $this->set_parameter(
465
+ "oauth_signature_method",
466
+ $signature_method->get_name(),
467
+ false
468
+ );
469
+ $signature = $this->build_signature($signature_method, $consumer, $token);
470
+ $this->set_parameter("oauth_signature", $signature, false);
471
+ }
472
+
473
+ public function build_signature($signature_method, $consumer, $token) {
474
+ $signature = $signature_method->build_signature($this, $consumer, $token);
475
+ return $signature;
476
+ }
477
+
478
+ /**
479
+ * util function: current timestamp
480
+ */
481
+ private static function generate_timestamp() {
482
+ return time();
483
+ }
484
+
485
+ /**
486
+ * util function: current nonce
487
+ */
488
+ private static function generate_nonce() {
489
+ $mt = microtime();
490
+ $rand = mt_rand();
491
+
492
+ return md5($mt . $rand); // md5s look nicer than numbers
493
+ }
494
+ }
495
+
496
+ class OAuthServer {
497
+ protected $timestamp_threshold = 300; // in seconds, five minutes
498
+ protected $version = '1.0'; // hi blaine
499
+ protected $signature_methods = array();
500
+
501
+ protected $data_store;
502
+
503
+ function __construct($data_store) {
504
+ $this->data_store = $data_store;
505
+ }
506
+
507
+ public function add_signature_method($signature_method) {
508
+ $this->signature_methods[$signature_method->get_name()] =
509
+ $signature_method;
510
+ }
511
+
512
+ // high level functions
513
+
514
+ /**
515
+ * process a request_token request
516
+ * returns the request token on success
517
+ */
518
+ public function fetch_request_token(&$request) {
519
+ $this->get_version($request);
520
+
521
+ $consumer = $this->get_consumer($request);
522
+
523
+ // no token required for the initial token request
524
+ $token = NULL;
525
+
526
+ $this->check_signature($request, $consumer, $token);
527
+
528
+ // Rev A change
529
+ $callback = $request->get_parameter('oauth_callback');
530
+ $new_token = $this->data_store->new_request_token($consumer, $callback);
531
+
532
+ return $new_token;
533
+ }
534
+
535
+ /**
536
+ * process an access_token request
537
+ * returns the access token on success
538
+ */
539
+ public function fetch_access_token(&$request) {
540
+ $this->get_version($request);
541
+
542
+ $consumer = $this->get_consumer($request);
543
+
544
+ // requires authorized request token
545
+ $token = $this->get_token($request, $consumer, "request");
546
+
547
+ $this->check_signature($request, $consumer, $token);
548
+
549
+ // Rev A change
550
+ $verifier = $request->get_parameter('oauth_verifier');
551
+ $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
552
+
553
+ return $new_token;
554
+ }
555
+
556
+ /**
557
+ * verify an api call, checks all the parameters
558
+ */
559
+ public function verify_request(&$request) {
560
+ $this->get_version($request);
561
+ $consumer = $this->get_consumer($request);
562
+ $token = $this->get_token($request, $consumer, "access");
563
+ $this->check_signature($request, $consumer, $token);
564
+ return array($consumer, $token);
565
+ }
566
+
567
+ // Internals from here
568
+ /**
569
+ * version 1
570
+ */
571
+ private function get_version(&$request) {
572
+ $version = $request->get_parameter("oauth_version");
573
+ if (!$version) {
574
+ // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
575
+ // Chapter 7.0 ("Accessing Protected Ressources")
576
+ $version = '1.0';
577
+ }
578
+ if ($version !== $this->version) {
579
+ throw new OAuthException("OAuth version '$version' not supported");
580
+ }
581
+ return $version;
582
+ }
583
+
584
+ /**
585
+ * figure out the signature with some defaults
586
+ */
587
+ private function get_signature_method($request) {
588
+ $signature_method = $request instanceof OAuthRequest
589
+ ? $request->get_parameter("oauth_signature_method")
590
+ : NULL;
591
+
592
+ if (!$signature_method) {
593
+ // According to chapter 7 ("Accessing Protected Ressources") the signature-method
594
+ // parameter is required, and we can't just fallback to PLAINTEXT
595
+ throw new OAuthException('No signature method parameter. This parameter is required');
596
+ }
597
+
598
+ if (!in_array($signature_method,
599
+ array_keys($this->signature_methods))) {
600
+ throw new OAuthException(
601
+ "Signature method '$signature_method' not supported " .
602
+ "try one of the following: " .
603
+ implode(", ", array_keys($this->signature_methods))
604
+ );
605
+ }
606
+ return $this->signature_methods[$signature_method];
607
+ }
608
+
609
+ /**
610
+ * try to find the consumer for the provided request's consumer key
611
+ */
612
+ private function get_consumer($request) {
613
+ $consumer_key = $request instanceof OAuthRequest
614
+ ? $request->get_parameter("oauth_consumer_key")
615
+ : NULL;
616
+
617
+ if (!$consumer_key) {
618
+ throw new OAuthException("Invalid consumer key");
619
+ }
620
+
621
+ $consumer = $this->data_store->lookup_consumer($consumer_key);
622
+ if (!$consumer) {
623
+ throw new OAuthException("Invalid consumer");
624
+ }
625
+
626
+ return $consumer;
627
+ }
628
+
629
+ /**
630
+ * try to find the token for the provided request's token key
631
+ */
632
+ private function get_token($request, $consumer, $token_type="access") {
633
+ $token_field = $request instanceof OAuthRequest
634
+ ? $request->get_parameter('oauth_token')
635
+ : NULL;
636
+
637
+ $token = $this->data_store->lookup_token(
638
+ $consumer, $token_type, $token_field
639
+ );
640
+ if (!$token) {
641
+ throw new OAuthException("Invalid $token_type token: $token_field");
642
+ }
643
+ return $token;
644
+ }
645
+
646
+ /**
647
+ * all-in-one function to check the signature on a request
648
+ * should guess the signature method appropriately
649
+ */
650
+ private function check_signature($request, $consumer, $token) {
651
+ // this should probably be in a different method
652
+ $timestamp = $request instanceof OAuthRequest
653
+ ? $request->get_parameter('oauth_timestamp')
654
+ : NULL;
655
+ $nonce = $request instanceof OAuthRequest
656
+ ? $request->get_parameter('oauth_nonce')
657
+ : NULL;
658
+
659
+ $this->check_timestamp($timestamp);
660
+ $this->check_nonce($consumer, $token, $nonce, $timestamp);
661
+
662
+ $signature_method = $this->get_signature_method($request);
663
+
664
+ $signature = $request->get_parameter('oauth_signature');
665
+ $valid_sig = $signature_method->check_signature(
666
+ $request,
667
+ $consumer,
668
+ $token,
669
+ $signature
670
+ );
671
+
672
+ if (!$valid_sig) {
673
+ throw new OAuthException("Invalid signature");
674
+ }
675
+ }
676
+
677
+ /**
678
+ * check that the timestamp is new enough
679
+ */
680
+ private function check_timestamp($timestamp) {
681
+ if( ! $timestamp )
682
+ throw new OAuthException(
683
+ 'Missing timestamp parameter. The parameter is required'
684
+ );
685
+
686
+ // verify that timestamp is recentish
687
+ $now = time();
688
+ if (abs($now - $timestamp) > $this->timestamp_threshold) {
689
+ throw new OAuthException(
690
+ "Expired timestamp, yours $timestamp, ours $now"
691
+ );
692
+ }
693
+ }
694
+
695
+ /**
696
+ * check that the nonce is not repeated
697
+ */
698
+ private function check_nonce($consumer, $token, $nonce, $timestamp) {
699
+ if( ! $nonce )
700
+ throw new OAuthException(
701
+ 'Missing nonce parameter. The parameter is required'
702
+ );
703
+
704
+ // verify that the nonce is uniqueish
705
+ $found = $this->data_store->lookup_nonce(
706
+ $consumer,
707
+ $token,
708
+ $nonce,
709
+ $timestamp
710
+ );
711
+ if ($found) {
712
+ throw new OAuthException("Nonce already used: $nonce");
713
+ }
714
+ }
715
+
716
+ }
717
+
718
+ class OAuthDataStore {
719
+ function lookup_consumer($consumer_key) {
720
+ // implement me
721
+ }
722
+
723
+ function lookup_token($consumer, $token_type, $token) {
724
+ // implement me
725
+ }
726
+
727
+ function lookup_nonce($consumer, $token, $nonce, $timestamp) {
728
+ // implement me
729
+ }
730
+
731
+ function new_request_token($consumer, $callback = null) {
732
+ // return a new token attached to this consumer
733
+ }
734
+
735
+ function new_access_token($token, $consumer, $verifier = null) {
736
+ // return a new access token attached to this consumer
737
+ // for the user associated with this token if the request token
738
+ // is authorized
739
+ // should also invalidate the request token
740
+ }
741
+
742
+ }
743
+
744
+ class OAuthUtil {
745
+ public static function urlencode_rfc3986($input) {
746
+ if (is_array($input)) {
747
+ return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
748
+ } else if (is_scalar($input)) {
749
+ return str_replace(
750
+ '+',
751
+ ' ',
752
+ str_replace('%7E', '~', rawurlencode($input))
753
+ );
754
+ } else {
755
+ return '';
756
+ }
757
+ }
758
+
759
+
760
+ // This decode function isn't taking into consideration the above
761
+ // modifications to the encoding process. However, this method doesn't
762
+ // seem to be used anywhere so leaving it as is.
763
+ public static function urldecode_rfc3986($string) {
764
+ return urldecode($string);
765
+ }
766
+
767
+ // Utility function for turning the Authorization: header into
768
+ // parameters, has to do some unescaping
769
+ // Can filter out any non-oauth parameters if needed (default behaviour)
770
+ // May 28th, 2010 - method updated to tjerk.meesters for a speed improvement.
771
+ // see http://code.google.com/p/oauth/issues/detail?id=163
772
+ public static function split_header($header, $only_allow_oauth_parameters = true) {
773
+ $params = array();
774
+ if (preg_match_all('/('.($only_allow_oauth_parameters ? 'oauth_' : '').'[a-z_-]*)=(:?"([^"]*)"|([^,]*))/', $header, $matches)) {
775
+ foreach ($matches[1] as $i => $h) {
776
+ $params[$h] = OAuthUtil::urldecode_rfc3986(empty($matches[3][$i]) ? $matches[4][$i] : $matches[3][$i]);
777
+ }
778
+ if (isset($params['realm'])) {
779
+ unset($params['realm']);
780
+ }
781
+ }
782
+ return $params;
783
+ }
784
+
785
+ // helper to try to sort out headers for people who aren't running apache
786
+ public static function get_headers() {
787
+ if (function_exists('apache_request_headers')) {
788
+ // we need this to get the actual Authorization: header
789
+ // because apache tends to tell us it doesn't exist
790
+ $headers = apache_request_headers();
791
+
792
+ // sanitize the output of apache_request_headers because
793
+ // we always want the keys to be Cased-Like-This and arh()
794
+ // returns the headers in the same case as they are in the
795
+ // request
796
+ $out = array();
797
+ foreach ($headers AS $key => $value) {
798
+ $key = str_replace(
799
+ " ",
800
+ "-",
801
+ ucwords(strtolower(str_replace("-", " ", $key)))
802
+ );
803
+ $out[$key] = $value;
804
+ }
805
+ } else {
806
+ // otherwise we don't have apache and are just going to have to hope
807
+ // that $_SERVER actually contains what we need
808
+ $out = array();
809
+ if( isset($_SERVER['CONTENT_TYPE']) )
810
+ $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
811
+ if( isset($_ENV['CONTENT_TYPE']) )
812
+ $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
813
+
814
+ foreach ($_SERVER as $key => $value) {
815
+ if (substr($key, 0, 5) == "HTTP_") {
816
+ // this is chaos, basically it is just there to capitalize the first
817
+ // letter of every word that is not an initial HTTP and strip HTTP
818
+ // code from przemek
819
+ $key = str_replace(
820
+ " ",
821
+ "-",
822
+ ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
823
+ );
824
+ $out[$key] = $value;
825
+ }
826
+ }
827
+ }
828
+ return $out;
829
+ }
830
+
831
+ // This function takes a input like a=b&a=c&d=e and returns the parsed
832
+ // parameters like this
833
+ // array('a' => array('b','c'), 'd' => 'e')
834
+ public static function parse_parameters( $input ) {
835
+ if (!isset($input) || !$input) return array();
836
+
837
+ $pairs = explode('&', $input);
838
+
839
+ $parsed_parameters = array();
840
+ foreach ($pairs as $pair) {
841
+ $split = explode('=', $pair, 2);
842
+ $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
843
+ $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
844
+
845
+ if (isset($parsed_parameters[$parameter])) {
846
+ // We have already recieved parameter(s) with this name, so add to the list
847
+ // of parameters with this name
848
+
849
+ if (is_scalar($parsed_parameters[$parameter])) {
850
+ // This is the first duplicate, so transform scalar (string) into an array
851
+ // so we can add the duplicates
852
+ $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
853
+ }
854
+
855
+ $parsed_parameters[$parameter][] = $value;
856
+ } else {
857
+ $parsed_parameters[$parameter] = $value;
858
+ }
859
+ }
860
+ return $parsed_parameters;
861
+ }
862
+
863
+ public static function build_http_query($params) {
864
+ if (!$params) return '';
865
+
866
+ // Urlencode both keys and values
867
+ $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
868
+ $values = OAuthUtil::urlencode_rfc3986(array_values($params));
869
+ $params = array_combine($keys, $values);
870
+
871
+ // Parameters are sorted by name, using lexicographical byte value ordering.
872
+ // Ref: Spec: 9.1.1 (1)
873
+ uksort($params, 'strcmp');
874
+
875
+ $pairs = array();
876
+ foreach ($params as $parameter => $value) {
877
+ if (is_array($value)) {
878
+ // If two or more parameters share the same name, they are sorted by their value
879
+ // Ref: Spec: 9.1.1 (1)
880
+ // June 12th, 2010 - changed to sort because of issue 164 by hidetaka
881
+ sort($value, SORT_STRING);
882
+ foreach ($value as $duplicate_value) {
883
+ $pairs[] = $parameter . '=' . $duplicate_value;
884
+ }
885
+ } else {
886
+ $pairs[] = $parameter . '=' . $value;
887
+ }
888
+ }
889
+ // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
890
+ // Each name-value pair is separated by an '&' character (ASCII code 38)
891
+ return implode('&', $pairs);
892
+ }
893
+ }
894
+
895
+ ?>
twitter/twitteroauth.php ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Twitter OAuth class
4
+ */
5
+ class TwitterOAuth {
6
+ /* Contains the last HTTP status code returned. */
7
+ public $http_code;
8
+ /* Contains the last API call. */
9
+ public $url;
10
+ /* Set up the API root URL. */
11
+ public $host = "https://api.twitter.com/1.1/";//https://dev.twitter.com/docs/api/1.1/overview
12
+ /* Set timeout default. */
13
+ public $timeout = 30;
14
+ /* Set connect timeout. */
15
+ public $connecttimeout = 30;
16
+ /* Verify SSL Cert. */
17
+ public $ssl_verifypeer = FALSE;
18
+ /* Respons format. */
19
+ public $format = 'json';
20
+ /* Decode returned json data. */
21
+ public $decode_json = TRUE;
22
+ /* Contains the last HTTP headers returned. */
23
+ public $http_info;
24
+ /* Set the useragnet. */
25
+ public $useragent = 'TwitterOAuth v0.2.0-beta2';
26
+ /* Immediately retry the API call if the response was not successful. */
27
+ //public $retry = TRUE;
28
+
29
+
30
+
31
+
32
+ /**
33
+ * Set API URLS
34
+ */
35
+ function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; }
36
+ function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
37
+ function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; }
38
+ function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }
39
+
40
+ /**
41
+ * Debug helpers
42
+ */
43
+ function lastStatusCode() { return $this->http_status; }
44
+ function lastAPICall() { return $this->last_api_call; }
45
+
46
+ /**
47
+ * construct TwitterOAuth object
48
+ */
49
+ function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
50
+ $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
51
+ $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
52
+ if (!empty($oauth_token) && !empty($oauth_token_secret)) {
53
+ $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
54
+ } else {
55
+ $this->token = NULL;
56
+ }
57
+ }
58
+
59
+
60
+ /**
61
+ * Get a request_token from Twitter
62
+ *
63
+ * @returns a key/value array containing oauth_token and oauth_token_secret
64
+ */
65
+ function getRequestToken($oauth_callback = NULL) {
66
+ $parameters = array();
67
+ if (!empty($oauth_callback)) {
68
+ $parameters['oauth_callback'] = $oauth_callback;
69
+ }
70
+ $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
71
+ $token = OAuthUtil::parse_parameters($request);
72
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
73
+ return $token;
74
+ }
75
+
76
+ /**
77
+ * Get the authorize URL
78
+ *
79
+ * @returns a string
80
+ */
81
+ function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) {
82
+ if (is_array($token)) {
83
+ $token = $token['oauth_token'];
84
+ }
85
+ if (empty($sign_in_with_twitter)) {
86
+ return $this->authorizeURL() . "?oauth_token={$token}";
87
+ } else {
88
+ return $this->authenticateURL() . "?oauth_token={$token}";
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Exchange request token and secret for an access token and
94
+ * secret, to sign API calls.
95
+ *
96
+ * @returns array("oauth_token" => "the-access-token",
97
+ * "oauth_token_secret" => "the-access-secret",
98
+ * "user_id" => "9436992",
99
+ * "screen_name" => "abraham")
100
+ */
101
+ function getAccessToken($oauth_verifier = FALSE) {
102
+ $parameters = array();
103
+ if (!empty($oauth_verifier)) {
104
+ $parameters['oauth_verifier'] = $oauth_verifier;
105
+ }
106
+ $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
107
+ $token = OAuthUtil::parse_parameters($request);
108
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
109
+ return $token;
110
+ }
111
+
112
+ /**
113
+ * One time exchange of username and password for access token and secret.
114
+ *
115
+ * @returns array("oauth_token" => "the-access-token",
116
+ * "oauth_token_secret" => "the-access-secret",
117
+ * "user_id" => "9436992",
118
+ * "screen_name" => "abraham",
119
+ * "x_auth_expires" => "0")
120
+ */
121
+ function getXAuthToken($username, $password) {
122
+ $parameters = array();
123
+ $parameters['x_auth_username'] = $username;
124
+ $parameters['x_auth_password'] = $password;
125
+ $parameters['x_auth_mode'] = 'client_auth';
126
+ $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
127
+ $token = OAuthUtil::parse_parameters($request);
128
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
129
+ return $token;
130
+ }
131
+
132
+ /**
133
+ * GET wrapper for oAuthRequest.
134
+ */
135
+ function get($url, $parameters = array()) {
136
+ $response = $this->oAuthRequest($url, 'GET', $parameters);
137
+ if ($this->format === 'json' && $this->decode_json) {
138
+ return json_decode($response);
139
+ }
140
+ return $response;
141
+ }
142
+
143
+ /**
144
+ * POST wrapper for oAuthRequest.
145
+ */
146
+ function post($url, $parameters = array()) {
147
+ $response = $this->oAuthRequest($url, 'POST', $parameters);
148
+ if ($this->format === 'json' && $this->decode_json) {
149
+ return json_decode($response);
150
+ }
151
+ return $response;
152
+ }
153
+
154
+ /**
155
+ * DELETE wrapper for oAuthReqeust.
156
+ */
157
+ function delete($url, $parameters = array()) {
158
+ $response = $this->oAuthRequest($url, 'DELETE', $parameters);
159
+ if ($this->format === 'json' && $this->decode_json) {
160
+ return json_decode($response);
161
+ }
162
+ return $response;
163
+ }
164
+
165
+ /**
166
+ * Format and sign an OAuth / API request
167
+ */
168
+ function oAuthRequest($url, $method, $parameters) {
169
+ if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
170
+ $url = "{$this->host}{$url}.{$this->format}";
171
+ }
172
+ $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
173
+ $request->sign_request($this->sha1_method, $this->consumer, $this->token);
174
+ switch ($method) {
175
+ case 'GET':
176
+ return $this->http($request->to_url(), 'GET');
177
+ default:
178
+ return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Make an HTTP request
184
+ *
185
+ * @return API results
186
+ */
187
+ function http($url, $method, $postfields = NULL) {
188
+ $this->http_info = array();
189
+ $ci = curl_init();
190
+ /* Curl settings */
191
+ curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
192
+ curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
193
+ curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
194
+ curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
195
+ curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
196
+ curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
197
+ curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
198
+ curl_setopt($ci, CURLOPT_HEADER, FALSE);
199
+
200
+ switch ($method) {
201
+ case 'POST':
202
+ curl_setopt($ci, CURLOPT_POST, TRUE);
203
+ if (!empty($postfields)) {
204
+ curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
205
+ }
206
+ break;
207
+ case 'DELETE':
208
+ curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
209
+ if (!empty($postfields)) {
210
+ $url = "{$url}?{$postfields}";
211
+ }
212
+ }
213
+
214
+ curl_setopt($ci, CURLOPT_URL, $url);
215
+ $response = curl_exec($ci);
216
+ $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
217
+ $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
218
+ $this->url = $url;
219
+ curl_close ($ci);
220
+ return $response;
221
+ }
222
+
223
+ /**
224
+ * Get the header info to store.
225
+ */
226
+ function getHeader($ch, $header) {
227
+ $i = strpos($header, ':');
228
+ if (!empty($i)) {
229
+ $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
230
+ $value = trim(substr($header, $i + 2));
231
+ $this->http_header[$key] = $value;
232
+ }
233
+ return strlen($header);
234
+ }
235
+ }