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

Version Description

  • Bug fixing for the social login issues with facebook.
  • Implemented the new version of the facebook php sdk v5.0
Download this release

Release Info

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

Code changes from version 1.0.6 to 1.0.7

Files changed (77) hide show
  1. accesspress-social-login-lite.php +2 -2
  2. css/frontend.css +3 -1
  3. facebook/Authentication/AccessToken.php +160 -0
  4. facebook/Authentication/AccessTokenMetadata.php +390 -0
  5. facebook/Authentication/OAuth2Client.php +292 -0
  6. facebook/Exceptions/FacebookAuthenticationException.php +33 -0
  7. facebook/Exceptions/FacebookAuthorizationException.php +33 -0
  8. facebook/Exceptions/FacebookClientException.php +33 -0
  9. facebook/Exceptions/FacebookOtherException.php +33 -0
  10. facebook/Exceptions/FacebookResponseException.php +208 -0
  11. facebook/Exceptions/FacebookSDKException.php +33 -0
  12. facebook/Exceptions/FacebookServerException.php +33 -0
  13. facebook/Exceptions/FacebookThrottleException.php +33 -0
  14. facebook/Facebook.php +589 -0
  15. facebook/FacebookApp.php +101 -0
  16. facebook/FacebookBatchRequest.php +303 -0
  17. facebook/FacebookBatchResponse.php +154 -0
  18. facebook/FacebookClient.php +250 -0
  19. facebook/FacebookRequest.php +536 -0
  20. facebook/FacebookResponse.php +410 -0
  21. facebook/FileUpload/FacebookFile.php +135 -0
  22. facebook/FileUpload/FacebookVideo.php +33 -0
  23. facebook/FileUpload/Mimetypes.php +987 -0
  24. facebook/GraphNodes/Collection.php +242 -0
  25. facebook/GraphNodes/GraphAchievement.php +113 -0
  26. facebook/GraphNodes/GraphAlbum.php +183 -0
  27. facebook/GraphNodes/GraphApplication.php +43 -0
  28. facebook/GraphNodes/GraphCoverPhoto.php +72 -0
  29. facebook/GraphNodes/GraphEdge.php +260 -0
  30. facebook/GraphNodes/GraphEvent.php +242 -0
  31. facebook/GraphNodes/GraphGroup.php +171 -0
  32. facebook/GraphNodes/GraphList.php +36 -0
  33. facebook/GraphNodes/GraphLocation.php +102 -0
  34. facebook/GraphNodes/GraphNode.php +185 -0
  35. facebook/GraphNodes/GraphNodeFactory.php +392 -0
  36. facebook/GraphNodes/GraphObject.php +36 -0
  37. facebook/GraphNodes/GraphObjectFactory.php +88 -0
  38. facebook/GraphNodes/GraphPage.php +125 -0
  39. facebook/GraphNodes/GraphPicture.php +72 -0
  40. facebook/GraphNodes/GraphSessionInfo.php +102 -0
  41. facebook/GraphNodes/GraphUser.php +162 -0
  42. facebook/Helpers/FacebookCanvasHelper.php +52 -0
  43. facebook/Helpers/FacebookJavaScriptHelper.php +42 -0
  44. facebook/Helpers/FacebookPageTabHelper.php +95 -0
  45. facebook/Helpers/FacebookRedirectLoginHelper.php +360 -0
  46. facebook/Helpers/FacebookSignedRequestFromInputHelper.php +166 -0
  47. facebook/Http/GraphRawResponse.php +137 -0
  48. facebook/Http/RequestBodyInterface.php +39 -0
  49. facebook/Http/RequestBodyMultipart.php +170 -0
  50. facebook/Http/RequestBodyUrlEncoded.php +55 -0
  51. facebook/HttpClients/FacebookCurl.php +129 -0
  52. facebook/HttpClients/FacebookCurlHttpClient.php +210 -0
  53. facebook/HttpClients/FacebookGuzzleHttpClient.php +97 -0
  54. facebook/HttpClients/FacebookHttpClientInterface.php +47 -0
  55. facebook/HttpClients/FacebookStream.php +80 -0
  56. facebook/HttpClients/FacebookStreamHttpClient.php +94 -0
  57. facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem +23 -0
  58. facebook/PersistentData/FacebookMemoryPersistentDataHandler.php +53 -0
  59. facebook/PersistentData/FacebookSessionPersistentDataHandler.php +76 -0
  60. facebook/PersistentData/PersistentDataInterface.php +49 -0
  61. facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php +68 -0
  62. facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php +67 -0
  63. facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php +45 -0
  64. facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php +58 -0
  65. facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php +89 -0
  66. facebook/SignedRequest.php +332 -0
  67. facebook/Url/FacebookUrlDetectionHandler.php +163 -0
  68. facebook/Url/FacebookUrlManipulator.php +167 -0
  69. facebook/Url/UrlDetectionInterface.php +39 -0
  70. facebook/apsl_facebook_class.php +0 -85
  71. facebook/autoload.php +79 -0
  72. facebook/src/base_facebook.php +0 -1543
  73. facebook/src/facebook.php +0 -227
  74. facebook/src/fb_ca_chain_bundle.crt +0 -3920
  75. inc/backend/main-page.php +1 -0
  76. inc/frontend/login_check.php +93 -50
  77. readme.txt +5 -1
accesspress-social-login-lite.php CHANGED
@@ -4,7 +4,7 @@ defined( 'ABSPATH' ) or die( "No script kiddies please!" );
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.6
8
  Author: AccessPress Themes
9
  Author URI: https://accesspressthemes.com/
10
  Text Domain: apsl-lite
@@ -14,7 +14,7 @@ License: GPLv2 or later
14
 
15
  //Declearation of the necessary constants for plugin
16
  if(!defined ( 'APSL_VERSION' ) ){
17
- define ( 'APSL_VERSION', '1.0.6' );
18
  }
19
 
20
  if( !defined( 'APSL_IMAGE_DIR' ) ){
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.7
8
  Author: AccessPress Themes
9
  Author URI: https://accesspressthemes.com/
10
  Text Domain: apsl-lite
14
 
15
  //Declearation of the necessary constants for plugin
16
  if(!defined ( 'APSL_VERSION' ) ){
17
+ define ( 'APSL_VERSION', '1.0.7' );
18
  }
19
 
20
  if( !defined( 'APSL_IMAGE_DIR' ) ){
css/frontend.css CHANGED
@@ -540,4 +540,6 @@ span.apsl-login-new-text{
540
  color:red;
541
  margin-bottom: 10px;
542
  display: block;
543
- }
 
 
540
  color:red;
541
  margin-bottom: 10px;
542
  display: block;
543
+ }
544
+
545
+ .apsl-icon-block:before{ display:none !important}
facebook/Authentication/AccessToken.php ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Authentication;
25
+
26
+ /**
27
+ * Class AccessToken
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class AccessToken
32
+ {
33
+ /**
34
+ * The access token value.
35
+ *
36
+ * @var string
37
+ */
38
+ protected $value = '';
39
+
40
+ /**
41
+ * Date when token expires.
42
+ *
43
+ * @var \DateTime|null
44
+ */
45
+ protected $expiresAt;
46
+
47
+ /**
48
+ * Create a new access token entity.
49
+ *
50
+ * @param string $accessToken
51
+ * @param int $expiresAt
52
+ */
53
+ public function __construct($accessToken, $expiresAt = 0)
54
+ {
55
+ $this->value = $accessToken;
56
+ if ($expiresAt) {
57
+ $this->setExpiresAtFromTimeStamp($expiresAt);
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Generate an app secret proof to sign a request to Graph.
63
+ *
64
+ * @param string $appSecret The app secret.
65
+ *
66
+ * @return string
67
+ */
68
+ public function getAppSecretProof($appSecret)
69
+ {
70
+ return hash_hmac('sha256', $this->value, $appSecret);
71
+ }
72
+
73
+ /**
74
+ * Getter for expiresAt.
75
+ *
76
+ * @return \DateTime|null
77
+ */
78
+ public function getExpiresAt()
79
+ {
80
+ return $this->expiresAt;
81
+ }
82
+
83
+ /**
84
+ * Determines whether or not this is an app access token.
85
+ *
86
+ * @return bool
87
+ */
88
+ public function isAppAccessToken()
89
+ {
90
+ return strpos($this->value, '|') !== false;
91
+ }
92
+
93
+ /**
94
+ * Determines whether or not this is a long-lived token.
95
+ *
96
+ * @return bool
97
+ */
98
+ public function isLongLived()
99
+ {
100
+ if ($this->expiresAt) {
101
+ return $this->expiresAt->getTimestamp() > time() + (60 * 60 * 2);
102
+ }
103
+
104
+ if ($this->isAppAccessToken()) {
105
+ return true;
106
+ }
107
+
108
+ return false;
109
+ }
110
+
111
+ /**
112
+ * Checks the expiration of the access token.
113
+ *
114
+ * @return boolean|null
115
+ */
116
+ public function isExpired()
117
+ {
118
+ if ($this->getExpiresAt() instanceof \DateTime) {
119
+ return $this->getExpiresAt()->getTimestamp() < time();
120
+ }
121
+
122
+ if ($this->isAppAccessToken()) {
123
+ return false;
124
+ }
125
+
126
+ return null;
127
+ }
128
+
129
+ /**
130
+ * Returns the access token as a string.
131
+ *
132
+ * @return string
133
+ */
134
+ public function getValue()
135
+ {
136
+ return $this->value;
137
+ }
138
+
139
+ /**
140
+ * Returns the access token as a string.
141
+ *
142
+ * @return string
143
+ */
144
+ public function __toString()
145
+ {
146
+ return $this->getValue();
147
+ }
148
+
149
+ /**
150
+ * Setter for expires_at.
151
+ *
152
+ * @param int $timeStamp
153
+ */
154
+ protected function setExpiresAtFromTimeStamp($timeStamp)
155
+ {
156
+ $dt = new \DateTime();
157
+ $dt->setTimestamp($timeStamp);
158
+ $this->expiresAt = $dt;
159
+ }
160
+ }
facebook/Authentication/AccessTokenMetadata.php ADDED
@@ -0,0 +1,390 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Authentication;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ /**
29
+ * Class AccessTokenMetadata
30
+ *
31
+ * Represents metadata from an access token.
32
+ *
33
+ * @package Facebook
34
+ * @see https://developers.facebook.com/docs/graph-api/reference/debug_token
35
+ */
36
+ class AccessTokenMetadata
37
+ {
38
+ /**
39
+ * The access token metadata.
40
+ *
41
+ * @var array
42
+ */
43
+ protected $metadata = [];
44
+
45
+ /**
46
+ * Properties that should be cast as DateTime objects.
47
+ *
48
+ * @var array
49
+ */
50
+ protected static $dateProperties = ['expires_at', 'issued_at'];
51
+
52
+ /**
53
+ * @param array $metadata
54
+ *
55
+ * @throws FacebookSDKException
56
+ */
57
+ public function __construct(array $metadata)
58
+ {
59
+ if (!isset($metadata['data'])) {
60
+ throw new FacebookSDKException('Unexpected debug token response data.', 401);
61
+ }
62
+
63
+ $this->metadata = $metadata['data'];
64
+
65
+ $this->castTimestampsToDateTime();
66
+ }
67
+
68
+ /**
69
+ * Returns a value from the metadata.
70
+ *
71
+ * @param string $field The property to retrieve.
72
+ * @param mixed $default The default to return if the property doesn't exist.
73
+ *
74
+ * @return mixed
75
+ */
76
+ public function getField($field, $default = null)
77
+ {
78
+ if (isset($this->metadata[$field])) {
79
+ return $this->metadata[$field];
80
+ }
81
+
82
+ return $default;
83
+ }
84
+
85
+ /**
86
+ * Returns a value from the metadata.
87
+ *
88
+ * @param string $field The property to retrieve.
89
+ * @param mixed $default The default to return if the property doesn't exist.
90
+ *
91
+ * @return mixed
92
+ *
93
+ * @deprecated 5.0.0 getProperty() has been renamed to getField()
94
+ * @todo v6: Remove this method
95
+ */
96
+ public function getProperty($field, $default = null)
97
+ {
98
+ return $this->getField($field, $default);
99
+ }
100
+
101
+ /**
102
+ * Returns a value from a child property in the metadata.
103
+ *
104
+ * @param string $parentField The parent property.
105
+ * @param string $field The property to retrieve.
106
+ * @param mixed $default The default to return if the property doesn't exist.
107
+ *
108
+ * @return mixed
109
+ */
110
+ public function getChildProperty($parentField, $field, $default = null)
111
+ {
112
+ if (!isset($this->metadata[$parentField])) {
113
+ return $default;
114
+ }
115
+
116
+ if (!isset($this->metadata[$parentField][$field])) {
117
+ return $default;
118
+ }
119
+
120
+ return $this->metadata[$parentField][$field];
121
+ }
122
+
123
+ /**
124
+ * Returns a value from the error metadata.
125
+ *
126
+ * @param string $field The property to retrieve.
127
+ * @param mixed $default The default to return if the property doesn't exist.
128
+ *
129
+ * @return mixed
130
+ */
131
+ public function getErrorProperty($field, $default = null)
132
+ {
133
+ return $this->getChildProperty('error', $field, $default);
134
+ }
135
+
136
+ /**
137
+ * Returns a value from the "metadata" metadata. *Brain explodes*
138
+ *
139
+ * @param string $field The property to retrieve.
140
+ * @param mixed $default The default to return if the property doesn't exist.
141
+ *
142
+ * @return mixed
143
+ */
144
+ public function getMetadataProperty($field, $default = null)
145
+ {
146
+ return $this->getChildProperty('metadata', $field, $default);
147
+ }
148
+
149
+ /**
150
+ * The ID of the application this access token is for.
151
+ *
152
+ * @return string|null
153
+ */
154
+ public function getAppId()
155
+ {
156
+ return $this->getField('app_id');
157
+ }
158
+
159
+ /**
160
+ * Name of the application this access token is for.
161
+ *
162
+ * @return string|null
163
+ */
164
+ public function getApplication()
165
+ {
166
+ return $this->getField('application');
167
+ }
168
+
169
+ /**
170
+ * Any error that a request to the graph api
171
+ * would return due to the access token.
172
+ *
173
+ * @return bool|null
174
+ */
175
+ public function isError()
176
+ {
177
+ return $this->getField('error') !== null;
178
+ }
179
+
180
+ /**
181
+ * The error code for the error.
182
+ *
183
+ * @return int|null
184
+ */
185
+ public function getErrorCode()
186
+ {
187
+ return $this->getErrorProperty('code');
188
+ }
189
+
190
+ /**
191
+ * The error message for the error.
192
+ *
193
+ * @return string|null
194
+ */
195
+ public function getErrorMessage()
196
+ {
197
+ return $this->getErrorProperty('message');
198
+ }
199
+
200
+ /**
201
+ * The error subcode for the error.
202
+ *
203
+ * @return int|null
204
+ */
205
+ public function getErrorSubcode()
206
+ {
207
+ return $this->getErrorProperty('subcode');
208
+ }
209
+
210
+ /**
211
+ * DateTime when this access token expires.
212
+ *
213
+ * @return \DateTime|null
214
+ */
215
+ public function getExpiresAt()
216
+ {
217
+ return $this->getField('expires_at');
218
+ }
219
+
220
+ /**
221
+ * Whether the access token is still valid or not.
222
+ *
223
+ * @return boolean|null
224
+ */
225
+ public function getIsValid()
226
+ {
227
+ return $this->getField('is_valid');
228
+ }
229
+
230
+ /**
231
+ * DateTime when this access token was issued.
232
+ *
233
+ * Note that the issued_at field is not returned
234
+ * for short-lived access tokens.
235
+ *
236
+ * @see https://developers.facebook.com/docs/facebook-login/access-tokens#debug
237
+ *
238
+ * @return \DateTime|null
239
+ */
240
+ public function getIssuedAt()
241
+ {
242
+ return $this->getField('issued_at');
243
+ }
244
+
245
+ /**
246
+ * General metadata associated with the access token.
247
+ * Can contain data like 'sso', 'auth_type', 'auth_nonce'.
248
+ *
249
+ * @return array|null
250
+ */
251
+ public function getMetadata()
252
+ {
253
+ return $this->getField('metadata');
254
+ }
255
+
256
+ /**
257
+ * The 'sso' child property from the 'metadata' parent property.
258
+ *
259
+ * @return string|null
260
+ */
261
+ public function getSso()
262
+ {
263
+ return $this->getMetadataProperty('sso');
264
+ }
265
+
266
+ /**
267
+ * The 'auth_type' child property from the 'metadata' parent property.
268
+ *
269
+ * @return string|null
270
+ */
271
+ public function getAuthType()
272
+ {
273
+ return $this->getMetadataProperty('auth_type');
274
+ }
275
+
276
+ /**
277
+ * The 'auth_nonce' child property from the 'metadata' parent property.
278
+ *
279
+ * @return string|null
280
+ */
281
+ public function getAuthNonce()
282
+ {
283
+ return $this->getMetadataProperty('auth_nonce');
284
+ }
285
+
286
+ /**
287
+ * For impersonated access tokens, the ID of
288
+ * the page this token contains.
289
+ *
290
+ * @return string|null
291
+ */
292
+ public function getProfileId()
293
+ {
294
+ return $this->getField('profile_id');
295
+ }
296
+
297
+ /**
298
+ * List of permissions that the user has granted for
299
+ * the app in this access token.
300
+ *
301
+ * @return array
302
+ */
303
+ public function getScopes()
304
+ {
305
+ return $this->getField('scopes');
306
+ }
307
+
308
+ /**
309
+ * The ID of the user this access token is for.
310
+ *
311
+ * @return string|null
312
+ */
313
+ public function getUserId()
314
+ {
315
+ return $this->getField('user_id');
316
+ }
317
+
318
+ /**
319
+ * Ensures the app ID from the access token
320
+ * metadata is what we expect.
321
+ *
322
+ * @param string $appId
323
+ *
324
+ * @throws FacebookSDKException
325
+ */
326
+ public function validateAppId($appId)
327
+ {
328
+ if ($this->getAppId() !== $appId) {
329
+ throw new FacebookSDKException('Access token metadata contains unexpected app ID.', 401);
330
+ }
331
+ }
332
+
333
+ /**
334
+ * Ensures the user ID from the access token
335
+ * metadata is what we expect.
336
+ *
337
+ * @param string $userId
338
+ *
339
+ * @throws FacebookSDKException
340
+ */
341
+ public function validateUserId($userId)
342
+ {
343
+ if ($this->getUserId() !== $userId) {
344
+ throw new FacebookSDKException('Access token metadata contains unexpected user ID.', 401);
345
+ }
346
+ }
347
+
348
+ /**
349
+ * Ensures the access token has not expired yet.
350
+ *
351
+ * @throws FacebookSDKException
352
+ */
353
+ public function validateExpiration()
354
+ {
355
+ if (!$this->getExpiresAt() instanceof \DateTime) {
356
+ return;
357
+ }
358
+
359
+ if ($this->getExpiresAt()->getTimestamp() < time()) {
360
+ throw new FacebookSDKException('Inspection of access token metadata shows that the access token has expired.', 401);
361
+ }
362
+ }
363
+
364
+ /**
365
+ * Converts a unix timestamp into a DateTime entity.
366
+ *
367
+ * @param int $timestamp
368
+ *
369
+ * @return \DateTime
370
+ */
371
+ private function convertTimestampToDateTime($timestamp)
372
+ {
373
+ $dt = new \DateTime();
374
+ $dt->setTimestamp($timestamp);
375
+
376
+ return $dt;
377
+ }
378
+
379
+ /**
380
+ * Casts the unix timestamps as DateTime entities.
381
+ */
382
+ private function castTimestampsToDateTime()
383
+ {
384
+ foreach (static::$dateProperties as $key) {
385
+ if (isset($this->metadata[$key])) {
386
+ $this->metadata[$key] = $this->convertTimestampToDateTime($this->metadata[$key]);
387
+ }
388
+ }
389
+ }
390
+ }
facebook/Authentication/OAuth2Client.php ADDED
@@ -0,0 +1,292 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Authentication;
25
+
26
+ use Facebook\Facebook;
27
+ use Facebook\FacebookApp;
28
+ use Facebook\FacebookRequest;
29
+ use Facebook\FacebookResponse;
30
+ use Facebook\FacebookClient;
31
+ use Facebook\Exceptions\FacebookResponseException;
32
+ use Facebook\Exceptions\FacebookSDKException;
33
+
34
+ /**
35
+ * Class OAuth2Client
36
+ *
37
+ * @package Facebook
38
+ */
39
+ class OAuth2Client
40
+ {
41
+ /**
42
+ * @const string The base authorization URL.
43
+ */
44
+ const BASE_AUTHORIZATION_URL = 'https://www.facebook.com';
45
+
46
+ /**
47
+ * The FacebookApp entity.
48
+ *
49
+ * @var FacebookApp
50
+ */
51
+ protected $app;
52
+
53
+ /**
54
+ * The Facebook client.
55
+ *
56
+ * @var FacebookClient
57
+ */
58
+ protected $client;
59
+
60
+ /**
61
+ * The version of the Graph API to use.
62
+ *
63
+ * @var string
64
+ */
65
+ protected $graphVersion;
66
+
67
+ /**
68
+ * The last request sent to Graph.
69
+ *
70
+ * @var FacebookRequest|null
71
+ */
72
+ protected $lastRequest;
73
+
74
+ /**
75
+ * @param FacebookApp $app
76
+ * @param FacebookClient $client
77
+ * @param string|null $graphVersion The version of the Graph API to use.
78
+ */
79
+ public function __construct(FacebookApp $app, FacebookClient $client, $graphVersion = null)
80
+ {
81
+ $this->app = $app;
82
+ $this->client = $client;
83
+ $this->graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
84
+ }
85
+
86
+ /**
87
+ * Returns the last FacebookRequest that was sent.
88
+ * Useful for debugging and testing.
89
+ *
90
+ * @return FacebookRequest|null
91
+ */
92
+ public function getLastRequest()
93
+ {
94
+ return $this->lastRequest;
95
+ }
96
+
97
+ /**
98
+ * Get the metadata associated with the access token.
99
+ *
100
+ * @param AccessToken|string $accessToken The access token to debug.
101
+ *
102
+ * @return AccessTokenMetadata
103
+ */
104
+ public function debugToken($accessToken)
105
+ {
106
+ $accessToken = $accessToken instanceof AccessToken ? $accessToken->getValue() : $accessToken;
107
+ $params = ['input_token' => $accessToken];
108
+
109
+ $this->lastRequest = new FacebookRequest(
110
+ $this->app,
111
+ $this->app->getAccessToken(),
112
+ 'GET',
113
+ '/debug_token',
114
+ $params,
115
+ null,
116
+ $this->graphVersion
117
+ );
118
+ $response = $this->client->sendRequest($this->lastRequest);
119
+ $metadata = $response->getDecodedBody();
120
+
121
+ return new AccessTokenMetadata($metadata);
122
+ }
123
+
124
+ /**
125
+ * Generates an authorization URL to begin the process of authenticating a user.
126
+ *
127
+ * @param string $redirectUrl The callback URL to redirect to.
128
+ * @param array $scope An array of permissions to request.
129
+ * @param string $state The CSPRNG-generated CSRF value.
130
+ * @param array $params An array of parameters to generate URL.
131
+ * @param string $separator The separator to use in http_build_query().
132
+ *
133
+ * @return string
134
+ */
135
+ public function getAuthorizationUrl($redirectUrl, $state, array $scope = [], array $params = [], $separator = '&')
136
+ {
137
+ $params += [
138
+ 'client_id' => $this->app->getId(),
139
+ 'state' => $state,
140
+ 'response_type' => 'code',
141
+ 'sdk' => 'php-sdk-' . Facebook::VERSION,
142
+ 'redirect_uri' => $redirectUrl,
143
+ 'scope' => implode(',', $scope)
144
+ ];
145
+
146
+ return static::BASE_AUTHORIZATION_URL . '/' . $this->graphVersion . '/dialog/oauth?' . http_build_query($params, null, $separator);
147
+ }
148
+
149
+ /**
150
+ * Get a valid access token from a code.
151
+ *
152
+ * @param string $code
153
+ * @param string $redirectUri
154
+ *
155
+ * @return AccessToken
156
+ *
157
+ * @throws FacebookSDKException
158
+ */
159
+ public function getAccessTokenFromCode($code, $redirectUri = '')
160
+ {
161
+ $params = [
162
+ 'code' => $code,
163
+ 'redirect_uri' => $redirectUri,
164
+ ];
165
+
166
+ return $this->requestAnAccessToken($params);
167
+ }
168
+
169
+ /**
170
+ * Exchanges a short-lived access token with a long-lived access token.
171
+ *
172
+ * @param AccessToken|string $accessToken
173
+ *
174
+ * @return AccessToken
175
+ *
176
+ * @throws FacebookSDKException
177
+ */
178
+ public function getLongLivedAccessToken($accessToken)
179
+ {
180
+ $accessToken = $accessToken instanceof AccessToken ? $accessToken->getValue() : $accessToken;
181
+ $params = [
182
+ 'grant_type' => 'fb_exchange_token',
183
+ 'fb_exchange_token' => $accessToken,
184
+ ];
185
+
186
+ return $this->requestAnAccessToken($params);
187
+ }
188
+
189
+ /**
190
+ * Get a valid code from an access token.
191
+ *
192
+ * @param AccessToken|string $accessToken
193
+ * @param string $redirectUri
194
+ *
195
+ * @return AccessToken
196
+ *
197
+ * @throws FacebookSDKException
198
+ */
199
+ public function getCodeFromLongLivedAccessToken($accessToken, $redirectUri = '')
200
+ {
201
+ $params = [
202
+ 'redirect_uri' => $redirectUri,
203
+ ];
204
+
205
+ $response = $this->sendRequestWithClientParams('/oauth/client_code', $params, $accessToken);
206
+ $data = $response->getDecodedBody();
207
+
208
+ if (!isset($data['code'])) {
209
+ throw new FacebookSDKException('Code was not returned from Graph.', 401);
210
+ }
211
+
212
+ return $data['code'];
213
+ }
214
+
215
+ /**
216
+ * Send a request to the OAuth endpoint.
217
+ *
218
+ * @param array $params
219
+ *
220
+ * @return AccessToken
221
+ *
222
+ * @throws FacebookSDKException
223
+ */
224
+ protected function requestAnAccessToken(array $params)
225
+ {
226
+ $response = $this->sendRequestWithClientParams('/oauth/access_token', $params);
227
+ $data = $response->getDecodedBody();
228
+
229
+ if (!isset($data['access_token'])) {
230
+ throw new FacebookSDKException('Access token was not returned from Graph.', 401);
231
+ }
232
+
233
+ // Graph returns two different key names for expiration time
234
+ // on the same endpoint. Doh! :/
235
+ $expiresAt = 0;
236
+ if (isset($data['expires'])) {
237
+ // For exchanging a short lived token with a long lived token.
238
+ // The expiration time in seconds will be returned as "expires".
239
+ $expiresAt = time() + $data['expires'];
240
+ } elseif (isset($data['expires_in'])) {
241
+ // For exchanging a code for a short lived access token.
242
+ // The expiration time in seconds will be returned as "expires_in".
243
+ // See: https://developers.facebook.com/docs/facebook-login/access-tokens#long-via-code
244
+ $expiresAt = time() + $data['expires_in'];
245
+ }
246
+
247
+ return new AccessToken($data['access_token'], $expiresAt);
248
+ }
249
+
250
+ /**
251
+ * Send a request to Graph with an app access token.
252
+ *
253
+ * @param string $endpoint
254
+ * @param array $params
255
+ * @param string|null $accessToken
256
+ *
257
+ * @return FacebookResponse
258
+ *
259
+ * @throws FacebookResponseException
260
+ */
261
+ protected function sendRequestWithClientParams($endpoint, array $params, $accessToken = null)
262
+ {
263
+ $params += $this->getClientParams();
264
+
265
+ $accessToken = $accessToken ?: $this->app->getAccessToken();
266
+
267
+ $this->lastRequest = new FacebookRequest(
268
+ $this->app,
269
+ $accessToken,
270
+ 'GET',
271
+ $endpoint,
272
+ $params,
273
+ null,
274
+ $this->graphVersion
275
+ );
276
+
277
+ return $this->client->sendRequest($this->lastRequest);
278
+ }
279
+
280
+ /**
281
+ * Returns the client_* params for OAuth requests.
282
+ *
283
+ * @return array
284
+ */
285
+ protected function getClientParams()
286
+ {
287
+ return [
288
+ 'client_id' => $this->app->getId(),
289
+ 'client_secret' => $this->app->getSecret(),
290
+ ];
291
+ }
292
+ }
facebook/Exceptions/FacebookAuthenticationException.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ /**
27
+ * Class FacebookAuthenticationException
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookAuthenticationException extends FacebookSDKException
32
+ {
33
+ }
facebook/Exceptions/FacebookAuthorizationException.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ /**
27
+ * Class FacebookAuthorizationException
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookAuthorizationException extends FacebookSDKException
32
+ {
33
+ }
facebook/Exceptions/FacebookClientException.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ /**
27
+ * Class FacebookClientException
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookClientException extends FacebookSDKException
32
+ {
33
+ }
facebook/Exceptions/FacebookOtherException.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ /**
27
+ * Class FacebookOtherException
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookOtherException extends FacebookSDKException
32
+ {
33
+ }
facebook/Exceptions/FacebookResponseException.php ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ use Facebook\FacebookResponse;
27
+
28
+ /**
29
+ * Class FacebookResponseException
30
+ *
31
+ * @package Facebook
32
+ */
33
+ class FacebookResponseException extends FacebookSDKException
34
+ {
35
+ /**
36
+ * @var FacebookResponse The response that threw the exception.
37
+ */
38
+ protected $response;
39
+
40
+ /**
41
+ * @var array Decoded response.
42
+ */
43
+ protected $responseData;
44
+
45
+ /**
46
+ * Creates a FacebookResponseException.
47
+ *
48
+ * @param FacebookResponse $response The response that threw the exception.
49
+ * @param FacebookSDKException $previousException The more detailed exception.
50
+ */
51
+ public function __construct(FacebookResponse $response, FacebookSDKException $previousException = null)
52
+ {
53
+ $this->response = $response;
54
+ $this->responseData = $response->getDecodedBody();
55
+
56
+ $errorMessage = $this->get('message', 'Unknown error from Graph.');
57
+ $errorCode = $this->get('code', -1);
58
+
59
+ parent::__construct($errorMessage, $errorCode, $previousException);
60
+ }
61
+
62
+ /**
63
+ * A factory for creating the appropriate exception based on the response from Graph.
64
+ *
65
+ * @param FacebookResponse $response The response that threw the exception.
66
+ *
67
+ * @return FacebookResponseException
68
+ */
69
+ public static function create(FacebookResponse $response)
70
+ {
71
+ $data = $response->getDecodedBody();
72
+
73
+ if (!isset($data['error']['code']) && isset($data['code'])) {
74
+ $data = ['error' => $data];
75
+ }
76
+
77
+ $code = isset($data['error']['code']) ? $data['error']['code'] : null;
78
+ $message = isset($data['error']['message']) ? $data['error']['message'] : 'Unknown error from Graph.';
79
+
80
+ $previousException = null;
81
+
82
+ if (isset($data['error']['error_subcode'])) {
83
+ switch ($data['error']['error_subcode']) {
84
+ // Other authentication issues
85
+ case 458:
86
+ case 459:
87
+ case 460:
88
+ case 463:
89
+ case 464:
90
+ case 467:
91
+ return new static($response, new FacebookAuthenticationException($message, $code));
92
+ }
93
+ }
94
+
95
+ switch ($code) {
96
+ // Login status or token expired, revoked, or invalid
97
+ case 100:
98
+ case 102:
99
+ case 190:
100
+ return new static($response, new FacebookAuthenticationException($message, $code));
101
+
102
+ // Server issue, possible downtime
103
+ case 1:
104
+ case 2:
105
+ return new static($response, new FacebookServerException($message, $code));
106
+
107
+ // API Throttling
108
+ case 4:
109
+ case 17:
110
+ case 341:
111
+ return new static($response, new FacebookThrottleException($message, $code));
112
+
113
+ // Duplicate Post
114
+ case 506:
115
+ return new static($response, new FacebookClientException($message, $code));
116
+ }
117
+
118
+ // Missing Permissions
119
+ if ($code == 10 || ($code >= 200 && $code <= 299)) {
120
+ return new static($response, new FacebookAuthorizationException($message, $code));
121
+ }
122
+
123
+ // OAuth authentication error
124
+ if (isset($data['error']['type']) && $data['error']['type'] === 'OAuthException') {
125
+ return new static($response, new FacebookAuthenticationException($message, $code));
126
+ }
127
+
128
+ // All others
129
+ return new static($response, new FacebookOtherException($message, $code));
130
+ }
131
+
132
+ /**
133
+ * Checks isset and returns that or a default value.
134
+ *
135
+ * @param string $key
136
+ * @param mixed $default
137
+ *
138
+ * @return mixed
139
+ */
140
+ private function get($key, $default = null)
141
+ {
142
+ if (isset($this->responseData['error'][$key])) {
143
+ return $this->responseData['error'][$key];
144
+ }
145
+
146
+ return $default;
147
+ }
148
+
149
+ /**
150
+ * Returns the HTTP status code
151
+ *
152
+ * @return int
153
+ */
154
+ public function getHttpStatusCode()
155
+ {
156
+ return $this->response->getHttpStatusCode();
157
+ }
158
+
159
+ /**
160
+ * Returns the sub-error code
161
+ *
162
+ * @return int
163
+ */
164
+ public function getSubErrorCode()
165
+ {
166
+ return $this->get('error_subcode', -1);
167
+ }
168
+
169
+ /**
170
+ * Returns the error type
171
+ *
172
+ * @return string
173
+ */
174
+ public function getErrorType()
175
+ {
176
+ return $this->get('type', '');
177
+ }
178
+
179
+ /**
180
+ * Returns the raw response used to create the exception.
181
+ *
182
+ * @return string
183
+ */
184
+ public function getRawResponse()
185
+ {
186
+ return $this->response->getBody();
187
+ }
188
+
189
+ /**
190
+ * Returns the decoded response used to create the exception.
191
+ *
192
+ * @return array
193
+ */
194
+ public function getResponseData()
195
+ {
196
+ return $this->responseData;
197
+ }
198
+
199
+ /**
200
+ * Returns the response entity used to create the exception.
201
+ *
202
+ * @return FacebookResponse
203
+ */
204
+ public function getResponse()
205
+ {
206
+ return $this->response;
207
+ }
208
+ }
facebook/Exceptions/FacebookSDKException.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ /**
27
+ * Class FacebookSDKException
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookSDKException extends \Exception
32
+ {
33
+ }
facebook/Exceptions/FacebookServerException.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ /**
27
+ * Class FacebookServerException
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookServerException extends FacebookSDKException
32
+ {
33
+ }
facebook/Exceptions/FacebookThrottleException.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Exceptions;
25
+
26
+ /**
27
+ * Class FacebookThrottleException
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookThrottleException extends FacebookSDKException
32
+ {
33
+ }
facebook/Facebook.php ADDED
@@ -0,0 +1,589 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use Facebook\Authentication\AccessToken;
27
+ use Facebook\Authentication\OAuth2Client;
28
+ use Facebook\FileUpload\FacebookFile;
29
+ use Facebook\FileUpload\FacebookVideo;
30
+ use Facebook\GraphNodes\GraphEdge;
31
+ use Facebook\Url\UrlDetectionInterface;
32
+ use Facebook\Url\FacebookUrlDetectionHandler;
33
+ use Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface;
34
+ use Facebook\PseudoRandomString\McryptPseudoRandomStringGenerator;
35
+ use Facebook\PseudoRandomString\OpenSslPseudoRandomStringGenerator;
36
+ use Facebook\PseudoRandomString\UrandomPseudoRandomStringGenerator;
37
+ use Facebook\HttpClients\FacebookHttpClientInterface;
38
+ use Facebook\HttpClients\FacebookCurlHttpClient;
39
+ use Facebook\HttpClients\FacebookStreamHttpClient;
40
+ use Facebook\HttpClients\FacebookGuzzleHttpClient;
41
+ use Facebook\PersistentData\PersistentDataInterface;
42
+ use Facebook\PersistentData\FacebookSessionPersistentDataHandler;
43
+ use Facebook\PersistentData\FacebookMemoryPersistentDataHandler;
44
+ use Facebook\Helpers\FacebookCanvasHelper;
45
+ use Facebook\Helpers\FacebookJavaScriptHelper;
46
+ use Facebook\Helpers\FacebookPageTabHelper;
47
+ use Facebook\Helpers\FacebookRedirectLoginHelper;
48
+ use Facebook\Exceptions\FacebookSDKException;
49
+
50
+ /**
51
+ * Class Facebook
52
+ *
53
+ * @package Facebook
54
+ */
55
+ class Facebook
56
+ {
57
+ /**
58
+ * @const string Version number of the Facebook PHP SDK.
59
+ */
60
+ const VERSION = '5.0.0';
61
+
62
+ /**
63
+ * @const string Default Graph API version for requests.
64
+ */
65
+ const DEFAULT_GRAPH_VERSION = 'v2.4';
66
+
67
+ /**
68
+ * @const string The name of the environment variable that contains the app ID.
69
+ */
70
+ const APP_ID_ENV_NAME = 'FACEBOOK_APP_ID';
71
+
72
+ /**
73
+ * @const string The name of the environment variable that contains the app secret.
74
+ */
75
+ const APP_SECRET_ENV_NAME = 'FACEBOOK_APP_SECRET';
76
+
77
+ /**
78
+ * @var FacebookApp The FacebookApp entity.
79
+ */
80
+ protected $app;
81
+
82
+ /**
83
+ * @var FacebookClient The Facebook client service.
84
+ */
85
+ protected $client;
86
+
87
+ /**
88
+ * @var OAuth2Client The OAuth 2.0 client service.
89
+ */
90
+ protected $oAuth2Client;
91
+
92
+ /**
93
+ * @var UrlDetectionInterface|null The URL detection handler.
94
+ */
95
+ protected $urlDetectionHandler;
96
+
97
+ /**
98
+ * @var PseudoRandomStringGeneratorInterface|null The cryptographically secure pseudo-random string generator.
99
+ */
100
+ protected $pseudoRandomStringGenerator;
101
+
102
+ /**
103
+ * @var AccessToken|null The default access token to use with requests.
104
+ */
105
+ protected $defaultAccessToken;
106
+
107
+ /**
108
+ * @var string|null The default Graph version we want to use.
109
+ */
110
+ protected $defaultGraphVersion;
111
+
112
+ /**
113
+ * @var PersistentDataInterface|null The persistent data handler.
114
+ */
115
+ protected $persistentDataHandler;
116
+
117
+ /**
118
+ * @var FacebookResponse|FacebookBatchResponse|null Stores the last request made to Graph.
119
+ */
120
+ protected $lastResponse;
121
+
122
+ /**
123
+ * Instantiates a new Facebook super-class object.
124
+ *
125
+ * @param array $config
126
+ *
127
+ * @throws FacebookSDKException
128
+ */
129
+ public function __construct(array $config = [])
130
+ {
131
+ $appId = isset($config['app_id']) ? $config['app_id'] : getenv(static::APP_ID_ENV_NAME);
132
+ if (!$appId) {
133
+ throw new FacebookSDKException('Required "app_id" key not supplied in config and could not find fallback environment variable "' . static::APP_ID_ENV_NAME . '"');
134
+ }
135
+
136
+ $appSecret = isset($config['app_secret']) ? $config['app_secret'] : getenv(static::APP_SECRET_ENV_NAME);
137
+ if (!$appSecret) {
138
+ throw new FacebookSDKException('Required "app_secret" key not supplied in config and could not find fallback environment variable "' . static::APP_SECRET_ENV_NAME . '"');
139
+ }
140
+
141
+ $this->app = new FacebookApp($appId, $appSecret);
142
+
143
+ $httpClientHandler = null;
144
+ if (isset($config['http_client_handler'])) {
145
+ if ($config['http_client_handler'] instanceof FacebookHttpClientInterface) {
146
+ $httpClientHandler = $config['http_client_handler'];
147
+ } elseif ($config['http_client_handler'] === 'curl') {
148
+ $httpClientHandler = new FacebookCurlHttpClient();
149
+ } elseif ($config['http_client_handler'] === 'stream') {
150
+ $httpClientHandler = new FacebookStreamHttpClient();
151
+ } elseif ($config['http_client_handler'] === 'guzzle') {
152
+ $httpClientHandler = new FacebookGuzzleHttpClient();
153
+ } else {
154
+ throw new \InvalidArgumentException('The http_client_handler must be set to "curl", "stream", "guzzle", or be an instance of Facebook\HttpClients\FacebookHttpClientInterface');
155
+ }
156
+ }
157
+
158
+ $enableBeta = isset($config['enable_beta_mode']) && $config['enable_beta_mode'] === true;
159
+ $this->client = new FacebookClient($httpClientHandler, $enableBeta);
160
+
161
+ if (isset($config['url_detection_handler'])) {
162
+ if ($config['url_detection_handler'] instanceof UrlDetectionInterface) {
163
+ $this->urlDetectionHandler = $config['url_detection_handler'];
164
+ } else {
165
+ throw new \InvalidArgumentException('The url_detection_handler must be an instance of Facebook\Url\UrlDetectionInterface');
166
+ }
167
+ }
168
+
169
+ if (isset($config['pseudo_random_string_generator'])) {
170
+ if ($config['pseudo_random_string_generator'] instanceof PseudoRandomStringGeneratorInterface) {
171
+ $this->pseudoRandomStringGenerator = $config['pseudo_random_string_generator'];
172
+ } elseif ($config['pseudo_random_string_generator'] === 'mcrypt') {
173
+ $this->pseudoRandomStringGenerator = new McryptPseudoRandomStringGenerator();
174
+ } elseif ($config['pseudo_random_string_generator'] === 'openssl') {
175
+ $this->pseudoRandomStringGenerator = new OpenSslPseudoRandomStringGenerator();
176
+ } elseif ($config['pseudo_random_string_generator'] === 'urandom') {
177
+ $this->pseudoRandomStringGenerator = new UrandomPseudoRandomStringGenerator();
178
+ } else {
179
+ throw new \InvalidArgumentException('The pseudo_random_string_generator must be set to "mcrypt", "openssl", or "urandom", or be an instance of Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface');
180
+ }
181
+ }
182
+
183
+ if (isset($config['persistent_data_handler'])) {
184
+ if ($config['persistent_data_handler'] instanceof PersistentDataInterface) {
185
+ $this->persistentDataHandler = $config['persistent_data_handler'];
186
+ } elseif ($config['persistent_data_handler'] === 'session') {
187
+ $this->persistentDataHandler = new FacebookSessionPersistentDataHandler();
188
+ } elseif ($config['persistent_data_handler'] === 'memory') {
189
+ $this->persistentDataHandler = new FacebookMemoryPersistentDataHandler();
190
+ } else {
191
+ throw new \InvalidArgumentException('The persistent_data_handler must be set to "session", "memory", or be an instance of Facebook\PersistentData\PersistentDataInterface');
192
+ }
193
+ }
194
+
195
+ if (isset($config['default_access_token'])) {
196
+ $this->setDefaultAccessToken($config['default_access_token']);
197
+ }
198
+
199
+ if (isset($config['default_graph_version'])) {
200
+ $this->defaultGraphVersion = $config['default_graph_version'];
201
+ } else {
202
+ // @todo v6: Throw an InvalidArgumentException if "default_graph_version" is not set
203
+ $this->defaultGraphVersion = static::DEFAULT_GRAPH_VERSION;
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Returns the FacebookApp entity.
209
+ *
210
+ * @return FacebookApp
211
+ */
212
+ public function getApp()
213
+ {
214
+ return $this->app;
215
+ }
216
+
217
+ /**
218
+ * Returns the FacebookClient service.
219
+ *
220
+ * @return FacebookClient
221
+ */
222
+ public function getClient()
223
+ {
224
+ return $this->client;
225
+ }
226
+
227
+ /**
228
+ * Returns the OAuth 2.0 client service.
229
+ *
230
+ * @return OAuth2Client
231
+ */
232
+ public function getOAuth2Client()
233
+ {
234
+ if (!$this->oAuth2Client instanceof OAuth2Client) {
235
+ $app = $this->getApp();
236
+ $client = $this->getClient();
237
+ $this->oAuth2Client = new OAuth2Client($app, $client, $this->defaultGraphVersion);
238
+ }
239
+
240
+ return $this->oAuth2Client;
241
+ }
242
+
243
+ /**
244
+ * Returns the last response returned from Graph.
245
+ *
246
+ * @return FacebookResponse|FacebookBatchResponse|null
247
+ */
248
+ public function getLastResponse()
249
+ {
250
+ return $this->lastResponse;
251
+ }
252
+
253
+ /**
254
+ * Returns the URL detection handler.
255
+ *
256
+ * @return UrlDetectionInterface
257
+ */
258
+ public function getUrlDetectionHandler()
259
+ {
260
+ if (!$this->urlDetectionHandler instanceof UrlDetectionInterface) {
261
+ $this->urlDetectionHandler = new FacebookUrlDetectionHandler();
262
+ }
263
+
264
+ return $this->urlDetectionHandler;
265
+ }
266
+
267
+ /**
268
+ * Returns the default AccessToken entity.
269
+ *
270
+ * @return AccessToken|null
271
+ */
272
+ public function getDefaultAccessToken()
273
+ {
274
+ return $this->defaultAccessToken;
275
+ }
276
+
277
+ /**
278
+ * Sets the default access token to use with requests.
279
+ *
280
+ * @param AccessToken|string $accessToken The access token to save.
281
+ *
282
+ * @throws \InvalidArgumentException
283
+ */
284
+ public function setDefaultAccessToken($accessToken)
285
+ {
286
+ if (is_string($accessToken)) {
287
+ $this->defaultAccessToken = new AccessToken($accessToken);
288
+
289
+ return;
290
+ }
291
+
292
+ if ($accessToken instanceof AccessToken) {
293
+ $this->defaultAccessToken = $accessToken;
294
+
295
+ return;
296
+ }
297
+
298
+ throw new \InvalidArgumentException('The default access token must be of type "string" or Facebook\AccessToken');
299
+ }
300
+
301
+ /**
302
+ * Returns the default Graph version.
303
+ *
304
+ * @return string
305
+ */
306
+ public function getDefaultGraphVersion()
307
+ {
308
+ return $this->defaultGraphVersion;
309
+ }
310
+
311
+ /**
312
+ * Returns the redirect login helper.
313
+ *
314
+ * @return FacebookRedirectLoginHelper
315
+ */
316
+ public function getRedirectLoginHelper()
317
+ {
318
+ return new FacebookRedirectLoginHelper(
319
+ $this->getOAuth2Client(),
320
+ $this->persistentDataHandler,
321
+ $this->urlDetectionHandler,
322
+ $this->pseudoRandomStringGenerator
323
+ );
324
+ }
325
+
326
+ /**
327
+ * Returns the JavaScript helper.
328
+ *
329
+ * @return FacebookJavaScriptHelper
330
+ */
331
+ public function getJavaScriptHelper()
332
+ {
333
+ return new FacebookJavaScriptHelper($this->app, $this->client, $this->defaultGraphVersion);
334
+ }
335
+
336
+ /**
337
+ * Returns the canvas helper.
338
+ *
339
+ * @return FacebookCanvasHelper
340
+ */
341
+ public function getCanvasHelper()
342
+ {
343
+ return new FacebookCanvasHelper($this->app, $this->client, $this->defaultGraphVersion);
344
+ }
345
+
346
+ /**
347
+ * Returns the page tab helper.
348
+ *
349
+ * @return FacebookPageTabHelper
350
+ */
351
+ public function getPageTabHelper()
352
+ {
353
+ return new FacebookPageTabHelper($this->app, $this->client, $this->defaultGraphVersion);
354
+ }
355
+
356
+ /**
357
+ * Sends a GET request to Graph and returns the result.
358
+ *
359
+ * @param string $endpoint
360
+ * @param AccessToken|string|null $accessToken
361
+ * @param string|null $eTag
362
+ * @param string|null $graphVersion
363
+ *
364
+ * @return FacebookResponse
365
+ *
366
+ * @throws FacebookSDKException
367
+ */
368
+ public function get($endpoint, $accessToken = null, $eTag = null, $graphVersion = null)
369
+ {
370
+ return $this->sendRequest(
371
+ 'GET',
372
+ $endpoint,
373
+ $params = [],
374
+ $accessToken,
375
+ $eTag,
376
+ $graphVersion
377
+ );
378
+ }
379
+
380
+ /**
381
+ * Sends a POST request to Graph and returns the result.
382
+ *
383
+ * @param string $endpoint
384
+ * @param array $params
385
+ * @param AccessToken|string|null $accessToken
386
+ * @param string|null $eTag
387
+ * @param string|null $graphVersion
388
+ *
389
+ * @return FacebookResponse
390
+ *
391
+ * @throws FacebookSDKException
392
+ */
393
+ public function post($endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
394
+ {
395
+ return $this->sendRequest(
396
+ 'POST',
397
+ $endpoint,
398
+ $params,
399
+ $accessToken,
400
+ $eTag,
401
+ $graphVersion
402
+ );
403
+ }
404
+
405
+ /**
406
+ * Sends a DELETE request to Graph and returns the result.
407
+ *
408
+ * @param string $endpoint
409
+ * @param array $params
410
+ * @param AccessToken|string|null $accessToken
411
+ * @param string|null $eTag
412
+ * @param string|null $graphVersion
413
+ *
414
+ * @return FacebookResponse
415
+ *
416
+ * @throws FacebookSDKException
417
+ */
418
+ public function delete($endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
419
+ {
420
+ return $this->sendRequest(
421
+ 'DELETE',
422
+ $endpoint,
423
+ $params,
424
+ $accessToken,
425
+ $eTag,
426
+ $graphVersion
427
+ );
428
+ }
429
+
430
+ /**
431
+ * Sends a request to Graph for the next page of results.
432
+ *
433
+ * @param GraphEdge $graphEdge The GraphEdge to paginate over.
434
+ *
435
+ * @return GraphEdge|null
436
+ *
437
+ * @throws FacebookSDKException
438
+ */
439
+ public function next(GraphEdge $graphEdge)
440
+ {
441
+ return $this->getPaginationResults($graphEdge, 'next');
442
+ }
443
+
444
+ /**
445
+ * Sends a request to Graph for the previous page of results.
446
+ *
447
+ * @param GraphEdge $graphEdge The GraphEdge to paginate over.
448
+ *
449
+ * @return GraphEdge|null
450
+ *
451
+ * @throws FacebookSDKException
452
+ */
453
+ public function previous(GraphEdge $graphEdge)
454
+ {
455
+ return $this->getPaginationResults($graphEdge, 'previous');
456
+ }
457
+
458
+ /**
459
+ * Sends a request to Graph for the next page of results.
460
+ *
461
+ * @param GraphEdge $graphEdge The GraphEdge to paginate over.
462
+ * @param string $direction The direction of the pagination: next|previous.
463
+ *
464
+ * @return GraphEdge|null
465
+ *
466
+ * @throws FacebookSDKException
467
+ */
468
+ public function getPaginationResults(GraphEdge $graphEdge, $direction)
469
+ {
470
+ $paginationRequest = $graphEdge->getPaginationRequest($direction);
471
+ if (!$paginationRequest) {
472
+ return null;
473
+ }
474
+
475
+ $this->lastResponse = $this->client->sendRequest($paginationRequest);
476
+
477
+ // Keep the same GraphNode subclass
478
+ $subClassName = $graphEdge->getSubClassName();
479
+ $graphEdge = $this->lastResponse->getGraphEdge($subClassName, false);
480
+
481
+ return count($graphEdge) > 0 ? $graphEdge : null;
482
+ }
483
+
484
+ /**
485
+ * Sends a request to Graph and returns the result.
486
+ *
487
+ * @param string $method
488
+ * @param string $endpoint
489
+ * @param array $params
490
+ * @param AccessToken|string|null $accessToken
491
+ * @param string|null $eTag
492
+ * @param string|null $graphVersion
493
+ *
494
+ * @return FacebookResponse
495
+ *
496
+ * @throws FacebookSDKException
497
+ */
498
+ public function sendRequest($method, $endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
499
+ {
500
+ $accessToken = $accessToken ?: $this->defaultAccessToken;
501
+ $graphVersion = $graphVersion ?: $this->defaultGraphVersion;
502
+ $request = $this->request($method, $endpoint, $params, $accessToken, $eTag, $graphVersion);
503
+
504
+ return $this->lastResponse = $this->client->sendRequest($request);
505
+ }
506
+
507
+ /**
508
+ * Sends a batched request to Graph and returns the result.
509
+ *
510
+ * @param array $requests
511
+ * @param AccessToken|string|null $accessToken
512
+ * @param string|null $graphVersion
513
+ *
514
+ * @return FacebookBatchResponse
515
+ *
516
+ * @throws FacebookSDKException
517
+ */
518
+ public function sendBatchRequest(array $requests, $accessToken = null, $graphVersion = null)
519
+ {
520
+ $accessToken = $accessToken ?: $this->defaultAccessToken;
521
+ $graphVersion = $graphVersion ?: $this->defaultGraphVersion;
522
+ $batchRequest = new FacebookBatchRequest(
523
+ $this->app,
524
+ $requests,
525
+ $accessToken,
526
+ $graphVersion
527
+ );
528
+
529
+ return $this->lastResponse = $this->client->sendBatchRequest($batchRequest);
530
+ }
531
+
532
+ /**
533
+ * Instantiates a new FacebookRequest entity.
534
+ *
535
+ * @param string $method
536
+ * @param string $endpoint
537
+ * @param array $params
538
+ * @param AccessToken|string|null $accessToken
539
+ * @param string|null $eTag
540
+ * @param string|null $graphVersion
541
+ *
542
+ * @return FacebookRequest
543
+ *
544
+ * @throws FacebookSDKException
545
+ */
546
+ public function request($method, $endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
547
+ {
548
+ $accessToken = $accessToken ?: $this->defaultAccessToken;
549
+ $graphVersion = $graphVersion ?: $this->defaultGraphVersion;
550
+
551
+ return new FacebookRequest(
552
+ $this->app,
553
+ $accessToken,
554
+ $method,
555
+ $endpoint,
556
+ $params,
557
+ $eTag,
558
+ $graphVersion
559
+ );
560
+ }
561
+
562
+ /**
563
+ * Factory to create FacebookFile's.
564
+ *
565
+ * @param string $pathToFile
566
+ *
567
+ * @return FacebookFile
568
+ *
569
+ * @throws FacebookSDKException
570
+ */
571
+ public function fileToUpload($pathToFile)
572
+ {
573
+ return new FacebookFile($pathToFile);
574
+ }
575
+
576
+ /**
577
+ * Factory to create FacebookVideo's.
578
+ *
579
+ * @param string $pathToFile
580
+ *
581
+ * @return FacebookVideo
582
+ *
583
+ * @throws FacebookSDKException
584
+ */
585
+ public function videoToUpload($pathToFile)
586
+ {
587
+ return new FacebookVideo($pathToFile);
588
+ }
589
+ }
facebook/FacebookApp.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use Facebook\Authentication\AccessToken;
27
+
28
+ class FacebookApp implements \Serializable
29
+ {
30
+ /**
31
+ * @var string The app ID.
32
+ */
33
+ protected $id;
34
+
35
+ /**
36
+ * @var string The app secret.
37
+ */
38
+ protected $secret;
39
+
40
+ /**
41
+ * @param string $id
42
+ * @param string $secret
43
+ */
44
+ public function __construct($id, $secret)
45
+ {
46
+ $this->id = $id;
47
+ $this->secret = $secret;
48
+ }
49
+
50
+ /**
51
+ * Returns the app ID.
52
+ *
53
+ * @return string
54
+ */
55
+ public function getId()
56
+ {
57
+ return $this->id;
58
+ }
59
+
60
+ /**
61
+ * Returns the app secret.
62
+ *
63
+ * @return string
64
+ */
65
+ public function getSecret()
66
+ {
67
+ return $this->secret;
68
+ }
69
+
70
+ /**
71
+ * Returns an app access token.
72
+ *
73
+ * @return AccessToken
74
+ */
75
+ public function getAccessToken()
76
+ {
77
+ return new AccessToken($this->id . '|' . $this->secret);
78
+ }
79
+
80
+ /**
81
+ * Serializes the FacebookApp entity as a string.
82
+ *
83
+ * @return string
84
+ */
85
+ public function serialize()
86
+ {
87
+ return serialize([$this->id, $this->secret]);
88
+ }
89
+
90
+ /**
91
+ * Unserializes a string as a FacebookApp entity.
92
+ *
93
+ * @param string $serialized
94
+ */
95
+ public function unserialize($serialized)
96
+ {
97
+ list($id, $secret) = unserialize($serialized);
98
+
99
+ $this->__construct($id, $secret);
100
+ }
101
+ }
facebook/FacebookBatchRequest.php ADDED
@@ -0,0 +1,303 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use ArrayIterator;
27
+ use IteratorAggregate;
28
+ use ArrayAccess;
29
+ use Facebook\Authentication\AccessToken;
30
+ use Facebook\Exceptions\FacebookSDKException;
31
+
32
+ /**
33
+ * Class BatchRequest
34
+ *
35
+ * @package Facebook
36
+ */
37
+ class FacebookBatchRequest extends FacebookRequest implements IteratorAggregate, ArrayAccess
38
+ {
39
+ /**
40
+ * @var array An array of FacebookRequest entities to send.
41
+ */
42
+ protected $requests;
43
+
44
+ /**
45
+ * @var array An array of files to upload.
46
+ */
47
+ protected $attachedFiles;
48
+
49
+ /**
50
+ * Creates a new Request entity.
51
+ *
52
+ * @param FacebookApp|null $app
53
+ * @param array $requests
54
+ * @param AccessToken|string|null $accessToken
55
+ * @param string|null $graphVersion
56
+ */
57
+ public function __construct(FacebookApp $app = null, array $requests = [], $accessToken = null, $graphVersion = null)
58
+ {
59
+ parent::__construct($app, $accessToken, 'POST', '', [], null, $graphVersion);
60
+
61
+ $this->add($requests);
62
+ }
63
+
64
+ /**
65
+ * A a new request to the array.
66
+ *
67
+ * @param FacebookRequest|array $request
68
+ * @param string|null $name
69
+ *
70
+ * @return FacebookBatchRequest
71
+ *
72
+ * @throws \InvalidArgumentException
73
+ */
74
+ public function add($request, $name = null)
75
+ {
76
+ if (is_array($request)) {
77
+ foreach ($request as $key => $req) {
78
+ $this->add($req, $key);
79
+ }
80
+
81
+ return $this;
82
+ }
83
+
84
+ if (!$request instanceof FacebookRequest) {
85
+ throw new \InvalidArgumentException('Argument for add() must be of type array or FacebookRequest.');
86
+ }
87
+
88
+ $this->addFallbackDefaults($request);
89
+ $requestToAdd = [
90
+ 'name' => $name,
91
+ 'request' => $request,
92
+ ];
93
+
94
+ // File uploads
95
+ $attachedFiles = $this->extractFileAttachments($request);
96
+ if ($attachedFiles) {
97
+ $requestToAdd['attached_files'] = $attachedFiles;
98
+ }
99
+ $this->requests[] = $requestToAdd;
100
+
101
+ return $this;
102
+ }
103
+
104
+ /**
105
+ * Ensures that the FacebookApp and access token fall back when missing.
106
+ *
107
+ * @param FacebookRequest $request
108
+ *
109
+ * @throws FacebookSDKException
110
+ */
111
+ public function addFallbackDefaults(FacebookRequest $request)
112
+ {
113
+ if (!$request->getApp()) {
114
+ $app = $this->getApp();
115
+ if (!$app) {
116
+ throw new FacebookSDKException('Missing FacebookApp on FacebookRequest and no fallback detected on FacebookBatchRequest.');
117
+ }
118
+ $request->setApp($app);
119
+ }
120
+
121
+ if (!$request->getAccessToken()) {
122
+ $accessToken = $this->getAccessToken();
123
+ if (!$accessToken) {
124
+ throw new FacebookSDKException('Missing access token on FacebookRequest and no fallback detected on FacebookBatchRequest.');
125
+ }
126
+ $request->setAccessToken($accessToken);
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Extracts the files from a request.
132
+ *
133
+ * @param FacebookRequest $request
134
+ *
135
+ * @return string|null
136
+ *
137
+ * @throws FacebookSDKException
138
+ */
139
+ public function extractFileAttachments(FacebookRequest $request)
140
+ {
141
+ if (!$request->containsFileUploads()) {
142
+ return null;
143
+ }
144
+
145
+ $files = $request->getFiles();
146
+ $fileNames = [];
147
+ foreach ($files as $file) {
148
+ $fileName = uniqid();
149
+ $this->addFile($fileName, $file);
150
+ $fileNames[] = $fileName;
151
+ }
152
+
153
+ $request->resetFiles();
154
+
155
+ // @TODO Does Graph support multiple uploads on one endpoint?
156
+ return implode(',', $fileNames);
157
+ }
158
+
159
+ /**
160
+ * Return the FacebookRequest entities.
161
+ *
162
+ * @return array
163
+ */
164
+ public function getRequests()
165
+ {
166
+ return $this->requests;
167
+ }
168
+
169
+ /**
170
+ * Prepares the requests to be sent as a batch request.
171
+ *
172
+ * @return string
173
+ */
174
+ public function prepareRequestsForBatch()
175
+ {
176
+ $this->validateBatchRequestCount();
177
+
178
+ $params = [
179
+ 'batch' => $this->convertRequestsToJson(),
180
+ 'include_headers' => true,
181
+ ];
182
+ $this->setParams($params);
183
+ }
184
+
185
+ /**
186
+ * Converts the requests into a JSON(P) string.
187
+ *
188
+ * @return string
189
+ */
190
+ public function convertRequestsToJson()
191
+ {
192
+ $requests = [];
193
+ foreach ($this->requests as $request) {
194
+ $attachedFiles = isset($request['attached_files']) ? $request['attached_files'] : null;
195
+ $requests[] = $this->requestEntityToBatchArray($request['request'], $request['name'], $attachedFiles);
196
+ }
197
+
198
+ return json_encode($requests);
199
+ }
200
+
201
+ /**
202
+ * Validate the request count before sending them as a batch.
203
+ *
204
+ * @throws FacebookSDKException
205
+ */
206
+ public function validateBatchRequestCount()
207
+ {
208
+ $batchCount = count($this->requests);
209
+ if ($batchCount === 0) {
210
+ throw new FacebookSDKException('There are no batch requests to send.');
211
+ } elseif ($batchCount > 50) {
212
+ // Per: https://developers.facebook.com/docs/graph-api/making-multiple-requests#limits
213
+ throw new FacebookSDKException('You cannot send more than 50 batch requests at a time.');
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Converts a Request entity into an array that is batch-friendly.
219
+ *
220
+ * @param FacebookRequest $request The request entity to convert.
221
+ * @param string|null $requestName The name of the request.
222
+ * @param string|null $attachedFiles Names of files associated with the request.
223
+ *
224
+ * @return array
225
+ */
226
+ public function requestEntityToBatchArray(FacebookRequest $request, $requestName = null, $attachedFiles = null)
227
+ {
228
+ $compiledHeaders = [];
229
+ $headers = $request->getHeaders();
230
+ foreach ($headers as $name => $value) {
231
+ $compiledHeaders[] = $name . ': ' . $value;
232
+ }
233
+
234
+ $batch = [
235
+ 'headers' => $compiledHeaders,
236
+ 'method' => $request->getMethod(),
237
+ 'relative_url' => $request->getUrl(),
238
+ ];
239
+
240
+ // Since file uploads are moved to the root request of a batch request,
241
+ // the child requests will always be URL-encoded.
242
+ $body = $request->getUrlEncodedBody()->getBody();
243
+ if ($body) {
244
+ $batch['body'] = $body;
245
+ }
246
+
247
+ if (isset($requestName)) {
248
+ $batch['name'] = $requestName;
249
+ }
250
+
251
+ if (isset($attachedFiles)) {
252
+ $batch['attached_files'] = $attachedFiles;
253
+ }
254
+
255
+ // @TODO Add support for "omit_response_on_success"
256
+ // @TODO Add support for "depends_on"
257
+ // @TODO Add support for JSONP with "callback"
258
+
259
+ return $batch;
260
+ }
261
+
262
+ /**
263
+ * Get an iterator for the items.
264
+ *
265
+ * @return ArrayIterator
266
+ */
267
+ public function getIterator()
268
+ {
269
+ return new ArrayIterator($this->requests);
270
+ }
271
+
272
+ /**
273
+ * @inheritdoc
274
+ */
275
+ public function offsetSet($offset, $value)
276
+ {
277
+ $this->add($value, $offset);
278
+ }
279
+
280
+ /**
281
+ * @inheritdoc
282
+ */
283
+ public function offsetExists($offset)
284
+ {
285
+ return isset($this->requests[$offset]);
286
+ }
287
+
288
+ /**
289
+ * @inheritdoc
290
+ */
291
+ public function offsetUnset($offset)
292
+ {
293
+ unset($this->requests[$offset]);
294
+ }
295
+
296
+ /**
297
+ * @inheritdoc
298
+ */
299
+ public function offsetGet($offset)
300
+ {
301
+ return isset($this->requests[$offset]) ? $this->requests[$offset] : null;
302
+ }
303
+ }
facebook/FacebookBatchResponse.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use ArrayIterator;
27
+ use IteratorAggregate;
28
+ use ArrayAccess;
29
+
30
+ /**
31
+ * Class FacebookBatchResponse
32
+ *
33
+ * @package Facebook
34
+ */
35
+ class FacebookBatchResponse extends FacebookResponse implements IteratorAggregate, ArrayAccess
36
+ {
37
+ /**
38
+ * @var FacebookBatchRequest The original entity that made the batch request.
39
+ */
40
+ protected $batchRequest;
41
+
42
+ /**
43
+ * @var array An array of FacebookResponse entities.
44
+ */
45
+ protected $responses = [];
46
+
47
+ /**
48
+ * Creates a new Response entity.
49
+ *
50
+ * @param FacebookBatchRequest $batchRequest
51
+ * @param FacebookResponse $response
52
+ */
53
+ public function __construct(FacebookBatchRequest $batchRequest, FacebookResponse $response)
54
+ {
55
+ $this->batchRequest = $batchRequest;
56
+
57
+ $request = $response->getRequest();
58
+ $body = $response->getBody();
59
+ $httpStatusCode = $response->getHttpStatusCode();
60
+ $headers = $response->getHeaders();
61
+ parent::__construct($request, $body, $httpStatusCode, $headers);
62
+
63
+ $responses = $response->getDecodedBody();
64
+ $this->setResponses($responses);
65
+ }
66
+
67
+ /**
68
+ * Returns an array of FacebookResponse entities.
69
+ *
70
+ * @return array
71
+ */
72
+ public function getResponses()
73
+ {
74
+ return $this->responses;
75
+ }
76
+
77
+ /**
78
+ * The main batch response will be an array of requests so
79
+ * we need to iterate over all the responses.
80
+ *
81
+ * @param array $responses
82
+ */
83
+ public function setResponses(array $responses)
84
+ {
85
+ $this->responses = [];
86
+
87
+ foreach ($responses as $key => $graphResponse) {
88
+ $this->addResponse($key, $graphResponse);
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Add a response to the list.
94
+ *
95
+ * @param int $key
96
+ * @param array|null $response
97
+ */
98
+ public function addResponse($key, $response)
99
+ {
100
+ $originalRequestName = isset($this->batchRequest[$key]['name']) ? $this->batchRequest[$key]['name'] : $key;
101
+ $originalRequest = isset($this->batchRequest[$key]['request']) ? $this->batchRequest[$key]['request'] : null;
102
+
103
+ $httpResponseBody = isset($response['body']) ? $response['body'] : null;
104
+ $httpResponseCode = isset($response['code']) ? $response['code'] : null;
105
+ $httpResponseHeaders = isset($response['headers']) ? $response['headers'] : [];
106
+
107
+ $this->responses[$originalRequestName] = new FacebookResponse(
108
+ $originalRequest,
109
+ $httpResponseBody,
110
+ $httpResponseCode,
111
+ $httpResponseHeaders
112
+ );
113
+ }
114
+
115
+ /**
116
+ * @inheritdoc
117
+ */
118
+ public function getIterator()
119
+ {
120
+ return new ArrayIterator($this->responses);
121
+ }
122
+
123
+ /**
124
+ * @inheritdoc
125
+ */
126
+ public function offsetSet($offset, $value)
127
+ {
128
+ $this->addResponse($offset, $value);
129
+ }
130
+
131
+ /**
132
+ * @inheritdoc
133
+ */
134
+ public function offsetExists($offset)
135
+ {
136
+ return isset($this->responses[$offset]);
137
+ }
138
+
139
+ /**
140
+ * @inheritdoc
141
+ */
142
+ public function offsetUnset($offset)
143
+ {
144
+ unset($this->responses[$offset]);
145
+ }
146
+
147
+ /**
148
+ * @inheritdoc
149
+ */
150
+ public function offsetGet($offset)
151
+ {
152
+ return isset($this->responses[$offset]) ? $this->responses[$offset] : null;
153
+ }
154
+ }
facebook/FacebookClient.php ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use Facebook\HttpClients\FacebookHttpClientInterface;
27
+ use Facebook\HttpClients\FacebookCurlHttpClient;
28
+ use Facebook\HttpClients\FacebookStreamHttpClient;
29
+ use Facebook\Exceptions\FacebookSDKException;
30
+
31
+ /**
32
+ * Class FacebookClient
33
+ *
34
+ * @package Facebook
35
+ */
36
+ class FacebookClient
37
+ {
38
+ /**
39
+ * @const string Production Graph API URL.
40
+ */
41
+ const BASE_GRAPH_URL = 'https://graph.facebook.com';
42
+
43
+ /**
44
+ * @const string Graph API URL for video uploads.
45
+ */
46
+ const BASE_GRAPH_VIDEO_URL = 'https://graph-video.facebook.com';
47
+
48
+ /**
49
+ * @const string Beta Graph API URL.
50
+ */
51
+ const BASE_GRAPH_URL_BETA = 'https://graph.beta.facebook.com';
52
+
53
+ /**
54
+ * @const string Beta Graph API URL for video uploads.
55
+ */
56
+ const BASE_GRAPH_VIDEO_URL_BETA = 'https://graph-video.beta.facebook.com';
57
+
58
+ /**
59
+ * @const int The timeout in seconds for a normal request.
60
+ */
61
+ const DEFAULT_REQUEST_TIMEOUT = 60;
62
+
63
+ /**
64
+ * @const int The timeout in seconds for a request that contains file uploads.
65
+ */
66
+ const DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT = 3600;
67
+
68
+ /**
69
+ * @const int The timeout in seconds for a request that contains video uploads.
70
+ */
71
+ const DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT = 7200;
72
+
73
+ /**
74
+ * @var bool Toggle to use Graph beta url.
75
+ */
76
+ protected $enableBetaMode = false;
77
+
78
+ /**
79
+ * @var FacebookHttpClientInterface HTTP client handler.
80
+ */
81
+ protected $httpClientHandler;
82
+
83
+ /**
84
+ * @var int The number of calls that have been made to Graph.
85
+ */
86
+ public static $requestCount = 0;
87
+
88
+ /**
89
+ * Instantiates a new FacebookClient object.
90
+ *
91
+ * @param FacebookHttpClientInterface|null $httpClientHandler
92
+ * @param boolean $enableBeta
93
+ */
94
+ public function __construct(FacebookHttpClientInterface $httpClientHandler = null, $enableBeta = false)
95
+ {
96
+ $this->httpClientHandler = $httpClientHandler ?: $this->detectHttpClientHandler();
97
+ $this->enableBetaMode = $enableBeta;
98
+ }
99
+
100
+ /**
101
+ * Sets the HTTP client handler.
102
+ *
103
+ * @param FacebookHttpClientInterface $httpClientHandler
104
+ */
105
+ public function setHttpClientHandler(FacebookHttpClientInterface $httpClientHandler)
106
+ {
107
+ $this->httpClientHandler = $httpClientHandler;
108
+ }
109
+
110
+ /**
111
+ * Returns the HTTP client handler.
112
+ *
113
+ * @return FacebookHttpClientInterface
114
+ */
115
+ public function getHttpClientHandler()
116
+ {
117
+ return $this->httpClientHandler;
118
+ }
119
+
120
+ /**
121
+ * Detects which HTTP client handler to use.
122
+ *
123
+ * @return FacebookHttpClientInterface
124
+ */
125
+ public function detectHttpClientHandler()
126
+ {
127
+ return function_exists('curl_init') ? new FacebookCurlHttpClient() : new FacebookStreamHttpClient();
128
+ }
129
+
130
+ /**
131
+ * Toggle beta mode.
132
+ *
133
+ * @param boolean $betaMode
134
+ */
135
+ public function enableBetaMode($betaMode = true)
136
+ {
137
+ $this->enableBetaMode = $betaMode;
138
+ }
139
+
140
+ /**
141
+ * Returns the base Graph URL.
142
+ *
143
+ * @param boolean $postToVideoUrl Post to the video API if videos are being uploaded.
144
+ *
145
+ * @return string
146
+ */
147
+ public function getBaseGraphUrl($postToVideoUrl = false)
148
+ {
149
+ if ($postToVideoUrl) {
150
+ return $this->enableBetaMode ? static::BASE_GRAPH_VIDEO_URL_BETA : static::BASE_GRAPH_VIDEO_URL;
151
+ }
152
+
153
+ return $this->enableBetaMode ? static::BASE_GRAPH_URL_BETA : static::BASE_GRAPH_URL;
154
+ }
155
+
156
+ /**
157
+ * Prepares the request for sending to the client handler.
158
+ *
159
+ * @param FacebookRequest $request
160
+ *
161
+ * @return array
162
+ */
163
+ public function prepareRequestMessage(FacebookRequest $request)
164
+ {
165
+ $postToVideoUrl = $request->containsVideoUploads();
166
+ $url = $this->getBaseGraphUrl($postToVideoUrl) . $request->getUrl();
167
+
168
+ // If we're sending files they should be sent as multipart/form-data
169
+ if ($request->containsFileUploads()) {
170
+ $requestBody = $request->getMultipartBody();
171
+ $request->setHeaders([
172
+ 'Content-Type' => 'multipart/form-data; boundary=' . $requestBody->getBoundary(),
173
+ ]);
174
+ } else {
175
+ $requestBody = $request->getUrlEncodedBody();
176
+ $request->setHeaders([
177
+ 'Content-Type' => 'application/x-www-form-urlencoded',
178
+ ]);
179
+ }
180
+
181
+ return [
182
+ $url,
183
+ $request->getMethod(),
184
+ $request->getHeaders(),
185
+ $requestBody->getBody(),
186
+ ];
187
+ }
188
+
189
+ /**
190
+ * Makes the request to Graph and returns the result.
191
+ *
192
+ * @param FacebookRequest $request
193
+ *
194
+ * @return FacebookResponse
195
+ *
196
+ * @throws FacebookSDKException
197
+ */
198
+ public function sendRequest(FacebookRequest $request)
199
+ {
200
+ if (get_class($request) === 'FacebookRequest') {
201
+ $request->validateAccessToken();
202
+ }
203
+
204
+ list($url, $method, $headers, $body) = $this->prepareRequestMessage($request);
205
+
206
+ // Since file uploads can take a while, we need to give more time for uploads
207
+ $timeOut = static::DEFAULT_REQUEST_TIMEOUT;
208
+ if ($request->containsFileUploads()) {
209
+ $timeOut = static::DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT;
210
+ } elseif ($request->containsVideoUploads()) {
211
+ $timeOut = static::DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT;
212
+ }
213
+
214
+ // Should throw `FacebookSDKException` exception on HTTP client error.
215
+ // Don't catch to allow it to bubble up.
216
+ $rawResponse = $this->httpClientHandler->send($url, $method, $body, $headers, $timeOut);
217
+
218
+ static::$requestCount++;
219
+
220
+ $returnResponse = new FacebookResponse(
221
+ $request,
222
+ $rawResponse->getBody(),
223
+ $rawResponse->getHttpResponseCode(),
224
+ $rawResponse->getHeaders()
225
+ );
226
+
227
+ if ($returnResponse->isError()) {
228
+ throw $returnResponse->getThrownException();
229
+ }
230
+
231
+ return $returnResponse;
232
+ }
233
+
234
+ /**
235
+ * Makes a batched request to Graph and returns the result.
236
+ *
237
+ * @param FacebookBatchRequest $request
238
+ *
239
+ * @return FacebookBatchResponse
240
+ *
241
+ * @throws FacebookSDKException
242
+ */
243
+ public function sendBatchRequest(FacebookBatchRequest $request)
244
+ {
245
+ $request->prepareRequestsForBatch();
246
+ $facebookResponse = $this->sendRequest($request);
247
+
248
+ return new FacebookBatchResponse($request, $facebookResponse);
249
+ }
250
+ }
facebook/FacebookRequest.php ADDED
@@ -0,0 +1,536 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use Facebook\Authentication\AccessToken;
27
+ use Facebook\Url\FacebookUrlManipulator;
28
+ use Facebook\FileUpload\FacebookFile;
29
+ use Facebook\FileUpload\FacebookVideo;
30
+ use Facebook\Http\RequestBodyMultipart;
31
+ use Facebook\Http\RequestBodyUrlEncoded;
32
+ use Facebook\Exceptions\FacebookSDKException;
33
+
34
+ /**
35
+ * Class Request
36
+ *
37
+ * @package Facebook
38
+ */
39
+ class FacebookRequest
40
+ {
41
+ /**
42
+ * @var FacebookApp The Facebook app entity.
43
+ */
44
+ protected $app;
45
+
46
+ /**
47
+ * @var string|null The access token to use for this request.
48
+ */
49
+ protected $accessToken;
50
+
51
+ /**
52
+ * @var string The HTTP method for this request.
53
+ */
54
+ protected $method;
55
+
56
+ /**
57
+ * @var string The Graph endpoint for this request.
58
+ */
59
+ protected $endpoint;
60
+
61
+ /**
62
+ * @var array The headers to send with this request.
63
+ */
64
+ protected $headers = [];
65
+
66
+ /**
67
+ * @var array The parameters to send with this request.
68
+ */
69
+ protected $params = [];
70
+
71
+ /**
72
+ * @var array The files to send with this request.
73
+ */
74
+ protected $files = [];
75
+
76
+ /**
77
+ * @var string ETag to send with this request.
78
+ */
79
+ protected $eTag;
80
+
81
+ /**
82
+ * @var string Graph version to use for this request.
83
+ */
84
+ protected $graphVersion;
85
+
86
+ /**
87
+ * Creates a new Request entity.
88
+ *
89
+ * @param FacebookApp|null $app
90
+ * @param AccessToken|string|null $accessToken
91
+ * @param string|null $method
92
+ * @param string|null $endpoint
93
+ * @param array|null $params
94
+ * @param string|null $eTag
95
+ * @param string|null $graphVersion
96
+ */
97
+ public function __construct(FacebookApp $app = null, $accessToken = null, $method = null, $endpoint = null, array $params = [], $eTag = null, $graphVersion = null)
98
+ {
99
+ $this->setApp($app);
100
+ $this->setAccessToken($accessToken);
101
+ $this->setMethod($method);
102
+ $this->setEndpoint($endpoint);
103
+ $this->setParams($params);
104
+ $this->setETag($eTag);
105
+ $this->graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
106
+ }
107
+
108
+ /**
109
+ * Set the access token for this request.
110
+ *
111
+ * @param AccessToken|string
112
+ *
113
+ * @return FacebookRequest
114
+ */
115
+ public function setAccessToken($accessToken)
116
+ {
117
+ $this->accessToken = $accessToken;
118
+ if ($accessToken instanceof AccessToken) {
119
+ $this->accessToken = $accessToken->getValue();
120
+ }
121
+
122
+ return $this;
123
+ }
124
+
125
+ /**
126
+ * Sets the access token with one harvested from a URL or POST params.
127
+ *
128
+ * @param string $accessToken The access token.
129
+ *
130
+ * @return FacebookRequest
131
+ *
132
+ * @throws FacebookSDKException
133
+ */
134
+ public function setAccessTokenFromParams($accessToken)
135
+ {
136
+ $existingAccessToken = $this->getAccessToken();
137
+ if (!$existingAccessToken) {
138
+ $this->setAccessToken($accessToken);
139
+ } elseif ($accessToken !== $existingAccessToken) {
140
+ throw new FacebookSDKException('Access token mismatch. The access token provided in the FacebookRequest and the one provided in the URL or POST params do not match.');
141
+ }
142
+
143
+ return $this;
144
+ }
145
+
146
+ /**
147
+ * Return the access token for this request.
148
+ *
149
+ * @return string|null
150
+ */
151
+ public function getAccessToken()
152
+ {
153
+ return $this->accessToken;
154
+ }
155
+
156
+ /**
157
+ * Return the access token for this request an an AccessToken entity.
158
+ *
159
+ * @return AccessToken|null
160
+ */
161
+ public function getAccessTokenEntity()
162
+ {
163
+ return $this->accessToken ? new AccessToken($this->accessToken) : null;
164
+ }
165
+
166
+ /**
167
+ * Set the FacebookApp entity used for this request.
168
+ *
169
+ * @param FacebookApp|null $app
170
+ */
171
+ public function setApp(FacebookApp $app = null)
172
+ {
173
+ $this->app = $app;
174
+ }
175
+
176
+ /**
177
+ * Return the FacebookApp entity used for this request.
178
+ *
179
+ * @return FacebookApp
180
+ */
181
+ public function getApp()
182
+ {
183
+ return $this->app;
184
+ }
185
+
186
+ /**
187
+ * Generate an app secret proof to sign this request.
188
+ *
189
+ * @return string|null
190
+ */
191
+ public function getAppSecretProof()
192
+ {
193
+ if (!$accessTokenEntity = $this->getAccessTokenEntity()) {
194
+ return null;
195
+ }
196
+
197
+ return $accessTokenEntity->getAppSecretProof($this->app->getSecret());
198
+ }
199
+
200
+ /**
201
+ * Validate that an access token exists for this request.
202
+ *
203
+ * @throws FacebookSDKException
204
+ */
205
+ public function validateAccessToken()
206
+ {
207
+ $accessToken = $this->getAccessToken();
208
+ if (!$accessToken) {
209
+ throw new FacebookSDKException('You must provide an access token.');
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Set the HTTP method for this request.
215
+ *
216
+ * @param string
217
+ *
218
+ * @return FacebookRequest
219
+ */
220
+ public function setMethod($method)
221
+ {
222
+ $this->method = strtoupper($method);
223
+ }
224
+
225
+ /**
226
+ * Return the HTTP method for this request.
227
+ *
228
+ * @return string
229
+ */
230
+ public function getMethod()
231
+ {
232
+ return $this->method;
233
+ }
234
+
235
+ /**
236
+ * Validate that the HTTP method is set.
237
+ *
238
+ * @throws FacebookSDKException
239
+ */
240
+ public function validateMethod()
241
+ {
242
+ if (!$this->method) {
243
+ throw new FacebookSDKException('HTTP method not specified.');
244
+ }
245
+
246
+ if (!in_array($this->method, ['GET', 'POST', 'DELETE'])) {
247
+ throw new FacebookSDKException('Invalid HTTP method specified.');
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Set the endpoint for this request.
253
+ *
254
+ * @param string
255
+ *
256
+ * @return FacebookRequest
257
+ *
258
+ * @throws FacebookSDKException
259
+ */
260
+ public function setEndpoint($endpoint)
261
+ {
262
+ // Harvest the access token from the endpoint to keep things in sync
263
+ $params = FacebookUrlManipulator::getParamsAsArray($endpoint);
264
+ if (isset($params['access_token'])) {
265
+ $this->setAccessTokenFromParams($params['access_token']);
266
+ }
267
+
268
+ // Clean the token & app secret proof from the endpoint.
269
+ $filterParams = ['access_token', 'appsecret_proof'];
270
+ $this->endpoint = FacebookUrlManipulator::removeParamsFromUrl($endpoint, $filterParams);
271
+
272
+ return $this;
273
+ }
274
+
275
+ /**
276
+ * Return the HTTP method for this request.
277
+ *
278
+ * @return string
279
+ */
280
+ public function getEndpoint()
281
+ {
282
+ // For batch requests, this will be empty
283
+ return $this->endpoint;
284
+ }
285
+
286
+ /**
287
+ * Generate and return the headers for this request.
288
+ *
289
+ * @return array
290
+ */
291
+ public function getHeaders()
292
+ {
293
+ $headers = static::getDefaultHeaders();
294
+
295
+ if ($this->eTag) {
296
+ $headers['If-None-Match'] = $this->eTag;
297
+ }
298
+
299
+ return array_merge($this->headers, $headers);
300
+ }
301
+
302
+ /**
303
+ * Set the headers for this request.
304
+ *
305
+ * @param array $headers
306
+ */
307
+ public function setHeaders(array $headers)
308
+ {
309
+ $this->headers = array_merge($this->headers, $headers);
310
+ }
311
+
312
+ /**
313
+ * Sets the eTag value.
314
+ *
315
+ * @param string $eTag
316
+ */
317
+ public function setETag($eTag)
318
+ {
319
+ $this->eTag = $eTag;
320
+ }
321
+
322
+ /**
323
+ * Set the params for this request.
324
+ *
325
+ * @param array $params
326
+ *
327
+ * @return FacebookRequest
328
+ *
329
+ * @throws FacebookSDKException
330
+ */
331
+ public function setParams(array $params = [])
332
+ {
333
+ if (isset($params['access_token'])) {
334
+ $this->setAccessTokenFromParams($params['access_token']);
335
+ }
336
+
337
+ // Don't let these buggers slip in.
338
+ unset($params['access_token'], $params['appsecret_proof']);
339
+
340
+ // @TODO Refactor code above with this
341
+ //$params = $this->sanitizeAuthenticationParams($params);
342
+ $params = $this->sanitizeFileParams($params);
343
+ $this->dangerouslySetParams($params);
344
+
345
+ return $this;
346
+ }
347
+
348
+ /**
349
+ * Set the params for this request without filtering them first.
350
+ *
351
+ * @param array $params
352
+ *
353
+ * @return FacebookRequest
354
+ */
355
+ public function dangerouslySetParams(array $params = [])
356
+ {
357
+ $this->params = array_merge($this->params, $params);
358
+
359
+ return $this;
360
+ }
361
+
362
+ /**
363
+ * Iterate over the params and pull out the file uploads.
364
+ *
365
+ * @param array $params
366
+ *
367
+ * @return array
368
+ */
369
+ public function sanitizeFileParams(array $params)
370
+ {
371
+ foreach ($params as $key => $value) {
372
+ if ($value instanceof FacebookFile) {
373
+ $this->addFile($key, $value);
374
+ unset($params[$key]);
375
+ }
376
+ }
377
+
378
+ return $params;
379
+ }
380
+
381
+ /**
382
+ * Add a file to be uploaded.
383
+ *
384
+ * @param string $key
385
+ * @param FacebookFile $file
386
+ */
387
+ public function addFile($key, FacebookFile $file)
388
+ {
389
+ $this->files[$key] = $file;
390
+ }
391
+
392
+ /**
393
+ * Removes all the files from the upload queue.
394
+ */
395
+ public function resetFiles()
396
+ {
397
+ $this->files = [];
398
+ }
399
+
400
+ /**
401
+ * Get the list of files to be uploaded.
402
+ *
403
+ * @return array
404
+ */
405
+ public function getFiles()
406
+ {
407
+ return $this->files;
408
+ }
409
+
410
+ /**
411
+ * Let's us know if there is a file upload with this request.
412
+ *
413
+ * @return boolean
414
+ */
415
+ public function containsFileUploads()
416
+ {
417
+ return !empty($this->files);
418
+ }
419
+
420
+ /**
421
+ * Let's us know if there is a video upload with this request.
422
+ *
423
+ * @return boolean
424
+ */
425
+ public function containsVideoUploads()
426
+ {
427
+ foreach ($this->files as $file) {
428
+ if ($file instanceof FacebookVideo) {
429
+ return true;
430
+ }
431
+ }
432
+
433
+ return false;
434
+ }
435
+
436
+ /**
437
+ * Returns the body of the request as multipart/form-data.
438
+ *
439
+ * @return RequestBodyMultipart
440
+ */
441
+ public function getMultipartBody()
442
+ {
443
+ $params = $this->getPostParams();
444
+
445
+ return new RequestBodyMultipart($params, $this->files);
446
+ }
447
+
448
+ /**
449
+ * Returns the body of the request as URL-encoded.
450
+ *
451
+ * @return RequestBodyUrlEncoded
452
+ */
453
+ public function getUrlEncodedBody()
454
+ {
455
+ $params = $this->getPostParams();
456
+
457
+ return new RequestBodyUrlEncoded($params);
458
+ }
459
+
460
+ /**
461
+ * Generate and return the params for this request.
462
+ *
463
+ * @return array
464
+ */
465
+ public function getParams()
466
+ {
467
+ $params = $this->params;
468
+
469
+ $accessToken = $this->getAccessToken();
470
+ if ($accessToken) {
471
+ $params['access_token'] = $accessToken;
472
+ $params['appsecret_proof'] = $this->getAppSecretProof();
473
+ }
474
+
475
+ return $params;
476
+ }
477
+
478
+ /**
479
+ * Only return params on POST requests.
480
+ *
481
+ * @return array
482
+ */
483
+ public function getPostParams()
484
+ {
485
+ if ($this->getMethod() === 'POST') {
486
+ return $this->getParams();
487
+ }
488
+
489
+ return [];
490
+ }
491
+
492
+ /**
493
+ * The graph version used for this request.
494
+ *
495
+ * @return string
496
+ */
497
+ public function getGraphVersion()
498
+ {
499
+ return $this->graphVersion;
500
+ }
501
+
502
+ /**
503
+ * Generate and return the URL for this request.
504
+ *
505
+ * @return string
506
+ */
507
+ public function getUrl()
508
+ {
509
+ $this->validateMethod();
510
+
511
+ $graphVersion = FacebookUrlManipulator::forceSlashPrefix($this->graphVersion);
512
+ $endpoint = FacebookUrlManipulator::forceSlashPrefix($this->getEndpoint());
513
+
514
+ $url = $graphVersion . $endpoint;
515
+
516
+ if ($this->getMethod() !== 'POST') {
517
+ $params = $this->getParams();
518
+ $url = FacebookUrlManipulator::appendParamsToUrl($url, $params);
519
+ }
520
+
521
+ return $url;
522
+ }
523
+
524
+ /**
525
+ * Return the default headers that every request should use.
526
+ *
527
+ * @return array
528
+ */
529
+ public static function getDefaultHeaders()
530
+ {
531
+ return [
532
+ 'User-Agent' => 'fb-php-' . Facebook::VERSION,
533
+ 'Accept-Encoding' => '*',
534
+ ];
535
+ }
536
+ }
facebook/FacebookResponse.php ADDED
@@ -0,0 +1,410 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use Facebook\GraphNodes\GraphNodeFactory;
27
+ use Facebook\Exceptions\FacebookResponseException;
28
+ use Facebook\Exceptions\FacebookSDKException;
29
+
30
+ /**
31
+ * Class FacebookResponse
32
+ *
33
+ * @package Facebook
34
+ */
35
+ class FacebookResponse
36
+ {
37
+ /**
38
+ * @var int The HTTP status code response from Graph.
39
+ */
40
+ protected $httpStatusCode;
41
+
42
+ /**
43
+ * @var array The headers returned from Graph.
44
+ */
45
+ protected $headers;
46
+
47
+ /**
48
+ * @var string The raw body of the response from Graph.
49
+ */
50
+ protected $body;
51
+
52
+ /**
53
+ * @var array The decoded body of the Graph response.
54
+ */
55
+ protected $decodedBody = [];
56
+
57
+ /**
58
+ * @var FacebookRequest The original request that returned this response.
59
+ */
60
+ protected $request;
61
+
62
+ /**
63
+ * @var FacebookSDKException The exception thrown by this request.
64
+ */
65
+ protected $thrownException;
66
+
67
+ /**
68
+ * Creates a new Response entity.
69
+ *
70
+ * @param FacebookRequest $request
71
+ * @param string|null $body
72
+ * @param int|null $httpStatusCode
73
+ * @param array|null $headers
74
+ */
75
+ public function __construct(FacebookRequest $request, $body = null, $httpStatusCode = null, array $headers = [])
76
+ {
77
+ $this->request = $request;
78
+ $this->body = $body;
79
+ $this->httpStatusCode = $httpStatusCode;
80
+ $this->headers = $headers;
81
+
82
+ $this->decodeBody();
83
+ }
84
+
85
+ /**
86
+ * Return the original request that returned this response.
87
+ *
88
+ * @return FacebookRequest
89
+ */
90
+ public function getRequest()
91
+ {
92
+ return $this->request;
93
+ }
94
+
95
+ /**
96
+ * Return the FacebookApp entity used for this response.
97
+ *
98
+ * @return FacebookApp
99
+ */
100
+ public function getApp()
101
+ {
102
+ return $this->request->getApp();
103
+ }
104
+
105
+ /**
106
+ * Return the access token that was used for this response.
107
+ *
108
+ * @return string|null
109
+ */
110
+ public function getAccessToken()
111
+ {
112
+ return $this->request->getAccessToken();
113
+ }
114
+
115
+ /**
116
+ * Return the HTTP status code for this response.
117
+ *
118
+ * @return int
119
+ */
120
+ public function getHttpStatusCode()
121
+ {
122
+ return $this->httpStatusCode;
123
+ }
124
+
125
+ /**
126
+ * Return the HTTP headers for this response.
127
+ *
128
+ * @return array
129
+ */
130
+ public function getHeaders()
131
+ {
132
+ return $this->headers;
133
+ }
134
+
135
+ /**
136
+ * Return the raw body response.
137
+ *
138
+ * @return string
139
+ */
140
+ public function getBody()
141
+ {
142
+ return $this->body;
143
+ }
144
+
145
+ /**
146
+ * Return the decoded body response.
147
+ *
148
+ * @return array
149
+ */
150
+ public function getDecodedBody()
151
+ {
152
+ return $this->decodedBody;
153
+ }
154
+
155
+ /**
156
+ * Get the app secret proof that was used for this response.
157
+ *
158
+ * @return string|null
159
+ */
160
+ public function getAppSecretProof()
161
+ {
162
+ return $this->request->getAppSecretProof();
163
+ }
164
+
165
+ /**
166
+ * Get the ETag associated with the response.
167
+ *
168
+ * @return string|null
169
+ */
170
+ public function getETag()
171
+ {
172
+ return isset($this->headers['ETag']) ? $this->headers['ETag'] : null;
173
+ }
174
+
175
+ /**
176
+ * Get the version of Graph that returned this response.
177
+ *
178
+ * @return string|null
179
+ */
180
+ public function getGraphVersion()
181
+ {
182
+ return isset($this->headers['Facebook-API-Version']) ? $this->headers['Facebook-API-Version'] : null;
183
+ }
184
+
185
+ /**
186
+ * Returns true if Graph returned an error message.
187
+ *
188
+ * @return boolean
189
+ */
190
+ public function isError()
191
+ {
192
+ return isset($this->decodedBody['error']);
193
+ }
194
+
195
+ /**
196
+ * Throws the exception.
197
+ *
198
+ * @throws FacebookSDKException
199
+ */
200
+ public function throwException()
201
+ {
202
+ throw $this->thrownException;
203
+ }
204
+
205
+ /**
206
+ * Instantiates an exception to be thrown later.
207
+ */
208
+ public function makeException()
209
+ {
210
+ $this->thrownException = FacebookResponseException::create($this);
211
+ }
212
+
213
+ /**
214
+ * Returns the exception that was thrown for this request.
215
+ *
216
+ * @return FacebookSDKException|null
217
+ */
218
+ public function getThrownException()
219
+ {
220
+ return $this->thrownException;
221
+ }
222
+
223
+ /**
224
+ * Convert the raw response into an array if possible.
225
+ *
226
+ * Graph will return 2 types of responses:
227
+ * - JSON(P)
228
+ * Most responses from Grpah are JSON(P)
229
+ * - application/x-www-form-urlencoded key/value pairs
230
+ * Happens on the `/oauth/access_token` endpoint when exchanging
231
+ * a short-lived access token for a long-lived access token
232
+ * - And sometimes nothing :/ but that'd be a bug.
233
+ */
234
+ public function decodeBody()
235
+ {
236
+ $this->decodedBody = json_decode($this->body, true);
237
+
238
+ if ($this->decodedBody === null) {
239
+ $this->decodedBody = [];
240
+ parse_str($this->body, $this->decodedBody);
241
+ } elseif (is_bool($this->decodedBody)) {
242
+ // Backwards compatibility for Graph < 2.1.
243
+ // Mimics 2.1 responses.
244
+ // @TODO Remove this after Graph 2.0 is no longer supported
245
+ $this->decodedBody = ['success' => $this->decodedBody];
246
+ } elseif (is_numeric($this->decodedBody)) {
247
+ $this->decodedBody = ['id' => $this->decodedBody];
248
+ }
249
+
250
+ if (!is_array($this->decodedBody)) {
251
+ $this->decodedBody = [];
252
+ }
253
+
254
+ if ($this->isError()) {
255
+ $this->makeException();
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Instantiate a new GraphObject from response.
261
+ *
262
+ * @param string|null $subclassName The GraphNode sub class to cast to.
263
+ *
264
+ * @return \Facebook\GraphNodes\GraphObject
265
+ *
266
+ * @throws FacebookSDKException
267
+ *
268
+ * @deprecated 5.0.0 getGraphObject() has been renamed to getGraphNode()
269
+ * @todo v6: Remove this method
270
+ */
271
+ public function getGraphObject($subclassName = null)
272
+ {
273
+ return $this->getGraphNode($subclassName);
274
+ }
275
+
276
+ /**
277
+ * Instantiate a new GraphNode from response.
278
+ *
279
+ * @param string|null $subclassName The GraphNode sub class to cast to.
280
+ *
281
+ * @return \Facebook\GraphNodes\GraphNode
282
+ *
283
+ * @throws FacebookSDKException
284
+ */
285
+ public function getGraphNode($subclassName = null)
286
+ {
287
+ $factory = new GraphNodeFactory($this);
288
+
289
+ return $factory->makeGraphNode($subclassName);
290
+ }
291
+
292
+ /**
293
+ * Convenience method for creating a GraphAlbum collection.
294
+ *
295
+ * @return \Facebook\GraphNodes\GraphAlbum
296
+ *
297
+ * @throws FacebookSDKException
298
+ */
299
+ public function getGraphAlbum()
300
+ {
301
+ $factory = new GraphNodeFactory($this);
302
+
303
+ return $factory->makeGraphAlbum();
304
+ }
305
+
306
+ /**
307
+ * Convenience method for creating a GraphPage collection.
308
+ *
309
+ * @return \Facebook\GraphNodes\GraphPage
310
+ *
311
+ * @throws FacebookSDKException
312
+ */
313
+ public function getGraphPage()
314
+ {
315
+ $factory = new GraphNodeFactory($this);
316
+
317
+ return $factory->makeGraphPage();
318
+ }
319
+
320
+ /**
321
+ * Convenience method for creating a GraphSessionInfo collection.
322
+ *
323
+ * @return \Facebook\GraphNodes\GraphSessionInfo
324
+ *
325
+ * @throws FacebookSDKException
326
+ */
327
+ public function getGraphSessionInfo()
328
+ {
329
+ $factory = new GraphNodeFactory($this);
330
+
331
+ return $factory->makeGraphSessionInfo();
332
+ }
333
+
334
+ /**
335
+ * Convenience method for creating a GraphUser collection.
336
+ *
337
+ * @return \Facebook\GraphNodes\GraphUser
338
+ *
339
+ * @throws FacebookSDKException
340
+ */
341
+ public function getGraphUser()
342
+ {
343
+ $factory = new GraphNodeFactory($this);
344
+
345
+ return $factory->makeGraphUser();
346
+ }
347
+
348
+ /**
349
+ * Convenience method for creating a GraphEvent collection.
350
+ *
351
+ * @return \Facebook\GraphNodes\GraphEvent
352
+ *
353
+ * @throws FacebookSDKException
354
+ */
355
+ public function getGraphEvent()
356
+ {
357
+ $factory = new GraphNodeFactory($this);
358
+
359
+ return $factory->makeGraphEvent();
360
+ }
361
+
362
+ /**
363
+ * Convenience method for creating a GraphGroup collection.
364
+ *
365
+ * @return \Facebook\GraphNodes\GraphGroup
366
+ *
367
+ * @throws FacebookSDKException
368
+ */
369
+ public function getGraphGroup()
370
+ {
371
+ $factory = new GraphNodeFactory($this);
372
+
373
+ return $factory->makeGraphGroup();
374
+ }
375
+
376
+ /**
377
+ * Instantiate a new GraphList from response.
378
+ *
379
+ * @param string|null $subclassName The GraphNode sub class to cast list items to.
380
+ * @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
381
+ *
382
+ * @return \Facebook\GraphNodes\GraphList
383
+ *
384
+ * @throws FacebookSDKException
385
+ *
386
+ * @deprecated 5.0.0 getGraphList() has been renamed to getGraphEdge()
387
+ * @todo v6: Remove this method
388
+ */
389
+ public function getGraphList($subclassName = null, $auto_prefix = true)
390
+ {
391
+ return $this->getGraphEdge($subclassName, $auto_prefix);
392
+ }
393
+
394
+ /**
395
+ * Instantiate a new GraphEdge from response.
396
+ *
397
+ * @param string|null $subclassName The GraphNode sub class to cast list items to.
398
+ * @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
399
+ *
400
+ * @return \Facebook\GraphNodes\GraphEdge
401
+ *
402
+ * @throws FacebookSDKException
403
+ */
404
+ public function getGraphEdge($subclassName = null, $auto_prefix = true)
405
+ {
406
+ $factory = new GraphNodeFactory($this);
407
+
408
+ return $factory->makeGraphEdge($subclassName, $auto_prefix);
409
+ }
410
+ }
facebook/FileUpload/FacebookFile.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\FileUpload;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ /**
29
+ * Class FacebookFile
30
+ *
31
+ * @package Facebook
32
+ */
33
+ class FacebookFile
34
+ {
35
+ /**
36
+ * @var string The path to the file on the system.
37
+ */
38
+ protected $path;
39
+
40
+ /**
41
+ * @var resource The stream pointing to the file.
42
+ */
43
+ protected $stream;
44
+
45
+ /**
46
+ * Creates a new FacebookFile entity.
47
+ *
48
+ * @param string $filePath
49
+ *
50
+ * @throws FacebookSDKException
51
+ */
52
+ public function __construct($filePath)
53
+ {
54
+ $this->path = $filePath;
55
+ $this->open();
56
+ }
57
+
58
+ /**
59
+ * Closes the stream when destructed.
60
+ */
61
+ public function __destruct()
62
+ {
63
+ $this->close();
64
+ }
65
+
66
+ /**
67
+ * Opens a stream for the file.
68
+ *
69
+ * @throws FacebookSDKException
70
+ */
71
+ public function open()
72
+ {
73
+ if (!$this->isRemoteFile($this->path) && !is_readable($this->path)) {
74
+ throw new FacebookSDKException('Failed to create FacebookFile entity. Unable to read resource: ' . $this->path . '.');
75
+ }
76
+
77
+ $this->stream = fopen($this->path, 'r');
78
+
79
+ if (!$this->stream) {
80
+ throw new FacebookSDKException('Failed to create FacebookFile entity. Unable to open resource: ' . $this->path . '.');
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Stops the file stream.
86
+ */
87
+ public function close()
88
+ {
89
+ if (is_resource($this->stream)) {
90
+ fclose($this->stream);
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Return the contents of the file.
96
+ *
97
+ * @return string
98
+ */
99
+ public function getContents()
100
+ {
101
+ return stream_get_contents($this->stream);
102
+ }
103
+
104
+ /**
105
+ * Return the name of the file.
106
+ *
107
+ * @return string
108
+ */
109
+ public function getFileName()
110
+ {
111
+ return basename($this->path);
112
+ }
113
+
114
+ /**
115
+ * Return the mimetype of the file.
116
+ *
117
+ * @return string
118
+ */
119
+ public function getMimetype()
120
+ {
121
+ return Mimetypes::getInstance()->fromFilename($this->path) ?: 'text/plain';
122
+ }
123
+
124
+ /**
125
+ * Returns true if the path to the file is remote.
126
+ *
127
+ * @param string $pathToFile
128
+ *
129
+ * @return boolean
130
+ */
131
+ protected function isRemoteFile($pathToFile)
132
+ {
133
+ return preg_match('/^(https?|ftp):\/\/.*/', $pathToFile) === 1;
134
+ }
135
+ }
facebook/FileUpload/FacebookVideo.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\FileUpload;
25
+
26
+ /**
27
+ * Class FacebookVideo
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookVideo extends FacebookFile
32
+ {
33
+ }
facebook/FileUpload/Mimetypes.php ADDED
@@ -0,0 +1,987 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\FileUpload;
25
+
26
+ /**
27
+ * Provides mappings of file extensions to mimetypes
28
+ *
29
+ * Taken from Guzzle
30
+ *
31
+ * @see https://github.com/guzzle/guzzle/blob/master/src/Mimetypes.php
32
+ *
33
+ * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types
34
+ */
35
+ class Mimetypes
36
+ {
37
+ /** @var self */
38
+ protected static $instance;
39
+
40
+ /** @var array Mapping of extension to mimetype */
41
+ protected $mimetypes = [
42
+ '3dml' => 'text/vnd.in3d.3dml',
43
+ '3g2' => 'video/3gpp2',
44
+ '3gp' => 'video/3gpp',
45
+ '7z' => 'application/x-7z-compressed',
46
+ 'aab' => 'application/x-authorware-bin',
47
+ 'aac' => 'audio/x-aac',
48
+ 'aam' => 'application/x-authorware-map',
49
+ 'aas' => 'application/x-authorware-seg',
50
+ 'abw' => 'application/x-abiword',
51
+ 'ac' => 'application/pkix-attr-cert',
52
+ 'acc' => 'application/vnd.americandynamics.acc',
53
+ 'ace' => 'application/x-ace-compressed',
54
+ 'acu' => 'application/vnd.acucobol',
55
+ 'acutc' => 'application/vnd.acucorp',
56
+ 'adp' => 'audio/adpcm',
57
+ 'aep' => 'application/vnd.audiograph',
58
+ 'afm' => 'application/x-font-type1',
59
+ 'afp' => 'application/vnd.ibm.modcap',
60
+ 'ahead' => 'application/vnd.ahead.space',
61
+ 'ai' => 'application/postscript',
62
+ 'aif' => 'audio/x-aiff',
63
+ 'aifc' => 'audio/x-aiff',
64
+ 'aiff' => 'audio/x-aiff',
65
+ 'air' => 'application/vnd.adobe.air-application-installer-package+zip',
66
+ 'ait' => 'application/vnd.dvb.ait',
67
+ 'ami' => 'application/vnd.amiga.ami',
68
+ 'apk' => 'application/vnd.android.package-archive',
69
+ 'application' => 'application/x-ms-application',
70
+ 'apr' => 'application/vnd.lotus-approach',
71
+ 'asa' => 'text/plain',
72
+ 'asax' => 'application/octet-stream',
73
+ 'asc' => 'application/pgp-signature',
74
+ 'ascx' => 'text/plain',
75
+ 'asf' => 'video/x-ms-asf',
76
+ 'ashx' => 'text/plain',
77
+ 'asm' => 'text/x-asm',
78
+ 'asmx' => 'text/plain',
79
+ 'aso' => 'application/vnd.accpac.simply.aso',
80
+ 'asp' => 'text/plain',
81
+ 'aspx' => 'text/plain',
82
+ 'asx' => 'video/x-ms-asf',
83
+ 'atc' => 'application/vnd.acucorp',
84
+ 'atom' => 'application/atom+xml',
85
+ 'atomcat' => 'application/atomcat+xml',
86
+ 'atomsvc' => 'application/atomsvc+xml',
87
+ 'atx' => 'application/vnd.antix.game-component',
88
+ 'au' => 'audio/basic',
89
+ 'avi' => 'video/x-msvideo',
90
+ 'aw' => 'application/applixware',
91
+ 'axd' => 'text/plain',
92
+ 'azf' => 'application/vnd.airzip.filesecure.azf',
93
+ 'azs' => 'application/vnd.airzip.filesecure.azs',
94
+ 'azw' => 'application/vnd.amazon.ebook',
95
+ 'bat' => 'application/x-msdownload',
96
+ 'bcpio' => 'application/x-bcpio',
97
+ 'bdf' => 'application/x-font-bdf',
98
+ 'bdm' => 'application/vnd.syncml.dm+wbxml',
99
+ 'bed' => 'application/vnd.realvnc.bed',
100
+ 'bh2' => 'application/vnd.fujitsu.oasysprs',
101
+ 'bin' => 'application/octet-stream',
102
+ 'bmi' => 'application/vnd.bmi',
103
+ 'bmp' => 'image/bmp',
104
+ 'book' => 'application/vnd.framemaker',
105
+ 'box' => 'application/vnd.previewsystems.box',
106
+ 'boz' => 'application/x-bzip2',
107
+ 'bpk' => 'application/octet-stream',
108
+ 'btif' => 'image/prs.btif',
109
+ 'bz' => 'application/x-bzip',
110
+ 'bz2' => 'application/x-bzip2',
111
+ 'c' => 'text/x-c',
112
+ 'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
113
+ 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
114
+ 'c4d' => 'application/vnd.clonk.c4group',
115
+ 'c4f' => 'application/vnd.clonk.c4group',
116
+ 'c4g' => 'application/vnd.clonk.c4group',
117
+ 'c4p' => 'application/vnd.clonk.c4group',
118
+ 'c4u' => 'application/vnd.clonk.c4group',
119
+ 'cab' => 'application/vnd.ms-cab-compressed',
120
+ 'car' => 'application/vnd.curl.car',
121
+ 'cat' => 'application/vnd.ms-pki.seccat',
122
+ 'cc' => 'text/x-c',
123
+ 'cct' => 'application/x-director',
124
+ 'ccxml' => 'application/ccxml+xml',
125
+ 'cdbcmsg' => 'application/vnd.contact.cmsg',
126
+ 'cdf' => 'application/x-netcdf',
127
+ 'cdkey' => 'application/vnd.mediastation.cdkey',
128
+ 'cdmia' => 'application/cdmi-capability',
129
+ 'cdmic' => 'application/cdmi-container',
130
+ 'cdmid' => 'application/cdmi-domain',
131
+ 'cdmio' => 'application/cdmi-object',
132
+ 'cdmiq' => 'application/cdmi-queue',
133
+ 'cdx' => 'chemical/x-cdx',
134
+ 'cdxml' => 'application/vnd.chemdraw+xml',
135
+ 'cdy' => 'application/vnd.cinderella',
136
+ 'cer' => 'application/pkix-cert',
137
+ 'cfc' => 'application/x-coldfusion',
138
+ 'cfm' => 'application/x-coldfusion',
139
+ 'cgm' => 'image/cgm',
140
+ 'chat' => 'application/x-chat',
141
+ 'chm' => 'application/vnd.ms-htmlhelp',
142
+ 'chrt' => 'application/vnd.kde.kchart',
143
+ 'cif' => 'chemical/x-cif',
144
+ 'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
145
+ 'cil' => 'application/vnd.ms-artgalry',
146
+ 'cla' => 'application/vnd.claymore',
147
+ 'class' => 'application/java-vm',
148
+ 'clkk' => 'application/vnd.crick.clicker.keyboard',
149
+ 'clkp' => 'application/vnd.crick.clicker.palette',
150
+ 'clkt' => 'application/vnd.crick.clicker.template',
151
+ 'clkw' => 'application/vnd.crick.clicker.wordbank',
152
+ 'clkx' => 'application/vnd.crick.clicker',
153
+ 'clp' => 'application/x-msclip',
154
+ 'cmc' => 'application/vnd.cosmocaller',
155
+ 'cmdf' => 'chemical/x-cmdf',
156
+ 'cml' => 'chemical/x-cml',
157
+ 'cmp' => 'application/vnd.yellowriver-custom-menu',
158
+ 'cmx' => 'image/x-cmx',
159
+ 'cod' => 'application/vnd.rim.cod',
160
+ 'com' => 'application/x-msdownload',
161
+ 'conf' => 'text/plain',
162
+ 'cpio' => 'application/x-cpio',
163
+ 'cpp' => 'text/x-c',
164
+ 'cpt' => 'application/mac-compactpro',
165
+ 'crd' => 'application/x-mscardfile',
166
+ 'crl' => 'application/pkix-crl',
167
+ 'crt' => 'application/x-x509-ca-cert',
168
+ 'cryptonote' => 'application/vnd.rig.cryptonote',
169
+ 'cs' => 'text/plain',
170
+ 'csh' => 'application/x-csh',
171
+ 'csml' => 'chemical/x-csml',
172
+ 'csp' => 'application/vnd.commonspace',
173
+ 'css' => 'text/css',
174
+ 'cst' => 'application/x-director',
175
+ 'csv' => 'text/csv',
176
+ 'cu' => 'application/cu-seeme',
177
+ 'curl' => 'text/vnd.curl',
178
+ 'cww' => 'application/prs.cww',
179
+ 'cxt' => 'application/x-director',
180
+ 'cxx' => 'text/x-c',
181
+ 'dae' => 'model/vnd.collada+xml',
182
+ 'daf' => 'application/vnd.mobius.daf',
183
+ 'dataless' => 'application/vnd.fdsn.seed',
184
+ 'davmount' => 'application/davmount+xml',
185
+ 'dcr' => 'application/x-director',
186
+ 'dcurl' => 'text/vnd.curl.dcurl',
187
+ 'dd2' => 'application/vnd.oma.dd2+xml',
188
+ 'ddd' => 'application/vnd.fujixerox.ddd',
189
+ 'deb' => 'application/x-debian-package',
190
+ 'def' => 'text/plain',
191
+ 'deploy' => 'application/octet-stream',
192
+ 'der' => 'application/x-x509-ca-cert',
193
+ 'dfac' => 'application/vnd.dreamfactory',
194
+ 'dic' => 'text/x-c',
195
+ 'dir' => 'application/x-director',
196
+ 'dis' => 'application/vnd.mobius.dis',
197
+ 'dist' => 'application/octet-stream',
198
+ 'distz' => 'application/octet-stream',
199
+ 'djv' => 'image/vnd.djvu',
200
+ 'djvu' => 'image/vnd.djvu',
201
+ 'dll' => 'application/x-msdownload',
202
+ 'dmg' => 'application/octet-stream',
203
+ 'dms' => 'application/octet-stream',
204
+ 'dna' => 'application/vnd.dna',
205
+ 'doc' => 'application/msword',
206
+ 'docm' => 'application/vnd.ms-word.document.macroenabled.12',
207
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
208
+ 'dot' => 'application/msword',
209
+ 'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
210
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
211
+ 'dp' => 'application/vnd.osgi.dp',
212
+ 'dpg' => 'application/vnd.dpgraph',
213
+ 'dra' => 'audio/vnd.dra',
214
+ 'dsc' => 'text/prs.lines.tag',
215
+ 'dssc' => 'application/dssc+der',
216
+ 'dtb' => 'application/x-dtbook+xml',
217
+ 'dtd' => 'application/xml-dtd',
218
+ 'dts' => 'audio/vnd.dts',
219
+ 'dtshd' => 'audio/vnd.dts.hd',
220
+ 'dump' => 'application/octet-stream',
221
+ 'dvi' => 'application/x-dvi',
222
+ 'dwf' => 'model/vnd.dwf',
223
+ 'dwg' => 'image/vnd.dwg',
224
+ 'dxf' => 'image/vnd.dxf',
225
+ 'dxp' => 'application/vnd.spotfire.dxp',
226
+ 'dxr' => 'application/x-director',
227
+ 'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
228
+ 'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
229
+ 'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
230
+ 'ecma' => 'application/ecmascript',
231
+ 'edm' => 'application/vnd.novadigm.edm',
232
+ 'edx' => 'application/vnd.novadigm.edx',
233
+ 'efif' => 'application/vnd.picsel',
234
+ 'ei6' => 'application/vnd.pg.osasli',
235
+ 'elc' => 'application/octet-stream',
236
+ 'eml' => 'message/rfc822',
237
+ 'emma' => 'application/emma+xml',
238
+ 'eol' => 'audio/vnd.digital-winds',
239
+ 'eot' => 'application/vnd.ms-fontobject',
240
+ 'eps' => 'application/postscript',
241
+ 'epub' => 'application/epub+zip',
242
+ 'es3' => 'application/vnd.eszigno3+xml',
243
+ 'esf' => 'application/vnd.epson.esf',
244
+ 'et3' => 'application/vnd.eszigno3+xml',
245
+ 'etx' => 'text/x-setext',
246
+ 'exe' => 'application/x-msdownload',
247
+ 'exi' => 'application/exi',
248
+ 'ext' => 'application/vnd.novadigm.ext',
249
+ 'ez' => 'application/andrew-inset',
250
+ 'ez2' => 'application/vnd.ezpix-album',
251
+ 'ez3' => 'application/vnd.ezpix-package',
252
+ 'f' => 'text/x-fortran',
253
+ 'f4v' => 'video/x-f4v',
254
+ 'f77' => 'text/x-fortran',
255
+ 'f90' => 'text/x-fortran',
256
+ 'fbs' => 'image/vnd.fastbidsheet',
257
+ 'fcs' => 'application/vnd.isac.fcs',
258
+ 'fdf' => 'application/vnd.fdf',
259
+ 'fe_launch' => 'application/vnd.denovo.fcselayout-link',
260
+ 'fg5' => 'application/vnd.fujitsu.oasysgp',
261
+ 'fgd' => 'application/x-director',
262
+ 'fh' => 'image/x-freehand',
263
+ 'fh4' => 'image/x-freehand',
264
+ 'fh5' => 'image/x-freehand',
265
+ 'fh7' => 'image/x-freehand',
266
+ 'fhc' => 'image/x-freehand',
267
+ 'fig' => 'application/x-xfig',
268
+ 'fli' => 'video/x-fli',
269
+ 'flo' => 'application/vnd.micrografx.flo',
270
+ 'flv' => 'video/x-flv',
271
+ 'flw' => 'application/vnd.kde.kivio',
272
+ 'flx' => 'text/vnd.fmi.flexstor',
273
+ 'fly' => 'text/vnd.fly',
274
+ 'fm' => 'application/vnd.framemaker',
275
+ 'fnc' => 'application/vnd.frogans.fnc',
276
+ 'for' => 'text/x-fortran',
277
+ 'fpx' => 'image/vnd.fpx',
278
+ 'frame' => 'application/vnd.framemaker',
279
+ 'fsc' => 'application/vnd.fsc.weblaunch',
280
+ 'fst' => 'image/vnd.fst',
281
+ 'ftc' => 'application/vnd.fluxtime.clip',
282
+ 'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
283
+ 'fvt' => 'video/vnd.fvt',
284
+ 'fxp' => 'application/vnd.adobe.fxp',
285
+ 'fxpl' => 'application/vnd.adobe.fxp',
286
+ 'fzs' => 'application/vnd.fuzzysheet',
287
+ 'g2w' => 'application/vnd.geoplan',
288
+ 'g3' => 'image/g3fax',
289
+ 'g3w' => 'application/vnd.geospace',
290
+ 'gac' => 'application/vnd.groove-account',
291
+ 'gdl' => 'model/vnd.gdl',
292
+ 'geo' => 'application/vnd.dynageo',
293
+ 'gex' => 'application/vnd.geometry-explorer',
294
+ 'ggb' => 'application/vnd.geogebra.file',
295
+ 'ggt' => 'application/vnd.geogebra.tool',
296
+ 'ghf' => 'application/vnd.groove-help',
297
+ 'gif' => 'image/gif',
298
+ 'gim' => 'application/vnd.groove-identity-message',
299
+ 'gmx' => 'application/vnd.gmx',
300
+ 'gnumeric' => 'application/x-gnumeric',
301
+ 'gph' => 'application/vnd.flographit',
302
+ 'gqf' => 'application/vnd.grafeq',
303
+ 'gqs' => 'application/vnd.grafeq',
304
+ 'gram' => 'application/srgs',
305
+ 'gre' => 'application/vnd.geometry-explorer',
306
+ 'grv' => 'application/vnd.groove-injector',
307
+ 'grxml' => 'application/srgs+xml',
308
+ 'gsf' => 'application/x-font-ghostscript',
309
+ 'gtar' => 'application/x-gtar',
310
+ 'gtm' => 'application/vnd.groove-tool-message',
311
+ 'gtw' => 'model/vnd.gtw',
312
+ 'gv' => 'text/vnd.graphviz',
313
+ 'gxt' => 'application/vnd.geonext',
314
+ 'h' => 'text/x-c',
315
+ 'h261' => 'video/h261',
316
+ 'h263' => 'video/h263',
317
+ 'h264' => 'video/h264',
318
+ 'hal' => 'application/vnd.hal+xml',
319
+ 'hbci' => 'application/vnd.hbci',
320
+ 'hdf' => 'application/x-hdf',
321
+ 'hh' => 'text/x-c',
322
+ 'hlp' => 'application/winhlp',
323
+ 'hpgl' => 'application/vnd.hp-hpgl',
324
+ 'hpid' => 'application/vnd.hp-hpid',
325
+ 'hps' => 'application/vnd.hp-hps',
326
+ 'hqx' => 'application/mac-binhex40',
327
+ 'hta' => 'application/octet-stream',
328
+ 'htc' => 'text/html',
329
+ 'htke' => 'application/vnd.kenameaapp',
330
+ 'htm' => 'text/html',
331
+ 'html' => 'text/html',
332
+ 'hvd' => 'application/vnd.yamaha.hv-dic',
333
+ 'hvp' => 'application/vnd.yamaha.hv-voice',
334
+ 'hvs' => 'application/vnd.yamaha.hv-script',
335
+ 'i2g' => 'application/vnd.intergeo',
336
+ 'icc' => 'application/vnd.iccprofile',
337
+ 'ice' => 'x-conference/x-cooltalk',
338
+ 'icm' => 'application/vnd.iccprofile',
339
+ 'ico' => 'image/x-icon',
340
+ 'ics' => 'text/calendar',
341
+ 'ief' => 'image/ief',
342
+ 'ifb' => 'text/calendar',
343
+ 'ifm' => 'application/vnd.shana.informed.formdata',
344
+ 'iges' => 'model/iges',
345
+ 'igl' => 'application/vnd.igloader',
346
+ 'igm' => 'application/vnd.insors.igm',
347
+ 'igs' => 'model/iges',
348
+ 'igx' => 'application/vnd.micrografx.igx',
349
+ 'iif' => 'application/vnd.shana.informed.interchange',
350
+ 'imp' => 'application/vnd.accpac.simply.imp',
351
+ 'ims' => 'application/vnd.ms-ims',
352
+ 'in' => 'text/plain',
353
+ 'ini' => 'text/plain',
354
+ 'ipfix' => 'application/ipfix',
355
+ 'ipk' => 'application/vnd.shana.informed.package',
356
+ 'irm' => 'application/vnd.ibm.rights-management',
357
+ 'irp' => 'application/vnd.irepository.package+xml',
358
+ 'iso' => 'application/octet-stream',
359
+ 'itp' => 'application/vnd.shana.informed.formtemplate',
360
+ 'ivp' => 'application/vnd.immervision-ivp',
361
+ 'ivu' => 'application/vnd.immervision-ivu',
362
+ 'jad' => 'text/vnd.sun.j2me.app-descriptor',
363
+ 'jam' => 'application/vnd.jam',
364
+ 'jar' => 'application/java-archive',
365
+ 'java' => 'text/x-java-source',
366
+ 'jisp' => 'application/vnd.jisp',
367
+ 'jlt' => 'application/vnd.hp-jlyt',
368
+ 'jnlp' => 'application/x-java-jnlp-file',
369
+ 'joda' => 'application/vnd.joost.joda-archive',
370
+ 'jpe' => 'image/jpeg',
371
+ 'jpeg' => 'image/jpeg',
372
+ 'jpg' => 'image/jpeg',
373
+ 'jpgm' => 'video/jpm',
374
+ 'jpgv' => 'video/jpeg',
375
+ 'jpm' => 'video/jpm',
376
+ 'js' => 'text/javascript',
377
+ 'json' => 'application/json',
378
+ 'kar' => 'audio/midi',
379
+ 'karbon' => 'application/vnd.kde.karbon',
380
+ 'kfo' => 'application/vnd.kde.kformula',
381
+ 'kia' => 'application/vnd.kidspiration',
382
+ 'kml' => 'application/vnd.google-earth.kml+xml',
383
+ 'kmz' => 'application/vnd.google-earth.kmz',
384
+ 'kne' => 'application/vnd.kinar',
385
+ 'knp' => 'application/vnd.kinar',
386
+ 'kon' => 'application/vnd.kde.kontour',
387
+ 'kpr' => 'application/vnd.kde.kpresenter',
388
+ 'kpt' => 'application/vnd.kde.kpresenter',
389
+ 'ksp' => 'application/vnd.kde.kspread',
390
+ 'ktr' => 'application/vnd.kahootz',
391
+ 'ktx' => 'image/ktx',
392
+ 'ktz' => 'application/vnd.kahootz',
393
+ 'kwd' => 'application/vnd.kde.kword',
394
+ 'kwt' => 'application/vnd.kde.kword',
395
+ 'lasxml' => 'application/vnd.las.las+xml',
396
+ 'latex' => 'application/x-latex',
397
+ 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
398
+ 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
399
+ 'les' => 'application/vnd.hhe.lesson-player',
400
+ 'lha' => 'application/octet-stream',
401
+ 'link66' => 'application/vnd.route66.link66+xml',
402
+ 'list' => 'text/plain',
403
+ 'list3820' => 'application/vnd.ibm.modcap',
404
+ 'listafp' => 'application/vnd.ibm.modcap',
405
+ 'log' => 'text/plain',
406
+ 'lostxml' => 'application/lost+xml',
407
+ 'lrf' => 'application/octet-stream',
408
+ 'lrm' => 'application/vnd.ms-lrm',
409
+ 'ltf' => 'application/vnd.frogans.ltf',
410
+ 'lvp' => 'audio/vnd.lucent.voice',
411
+ 'lwp' => 'application/vnd.lotus-wordpro',
412
+ 'lzh' => 'application/octet-stream',
413
+ 'm13' => 'application/x-msmediaview',
414
+ 'm14' => 'application/x-msmediaview',
415
+ 'm1v' => 'video/mpeg',
416
+ 'm21' => 'application/mp21',
417
+ 'm2a' => 'audio/mpeg',
418
+ 'm2v' => 'video/mpeg',
419
+ 'm3a' => 'audio/mpeg',
420
+ 'm3u' => 'audio/x-mpegurl',
421
+ 'm3u8' => 'application/vnd.apple.mpegurl',
422
+ 'm4a' => 'audio/mp4',
423
+ 'm4u' => 'video/vnd.mpegurl',
424
+ 'm4v' => 'video/mp4',
425
+ 'ma' => 'application/mathematica',
426
+ 'mads' => 'application/mads+xml',
427
+ 'mag' => 'application/vnd.ecowin.chart',
428
+ 'maker' => 'application/vnd.framemaker',
429
+ 'man' => 'text/troff',
430
+ 'mathml' => 'application/mathml+xml',
431
+ 'mb' => 'application/mathematica',
432
+ 'mbk' => 'application/vnd.mobius.mbk',
433
+ 'mbox' => 'application/mbox',
434
+ 'mc1' => 'application/vnd.medcalcdata',
435
+ 'mcd' => 'application/vnd.mcd',
436
+ 'mcurl' => 'text/vnd.curl.mcurl',
437
+ 'mdb' => 'application/x-msaccess',
438
+ 'mdi' => 'image/vnd.ms-modi',
439
+ 'me' => 'text/troff',
440
+ 'mesh' => 'model/mesh',
441
+ 'meta4' => 'application/metalink4+xml',
442
+ 'mets' => 'application/mets+xml',
443
+ 'mfm' => 'application/vnd.mfmp',
444
+ 'mgp' => 'application/vnd.osgeo.mapguide.package',
445
+ 'mgz' => 'application/vnd.proteus.magazine',
446
+ 'mid' => 'audio/midi',
447
+ 'midi' => 'audio/midi',
448
+ 'mif' => 'application/vnd.mif',
449
+ 'mime' => 'message/rfc822',
450
+ 'mj2' => 'video/mj2',
451
+ 'mjp2' => 'video/mj2',
452
+ 'mlp' => 'application/vnd.dolby.mlp',
453
+ 'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
454
+ 'mmf' => 'application/vnd.smaf',
455
+ 'mmr' => 'image/vnd.fujixerox.edmics-mmr',
456
+ 'mny' => 'application/x-msmoney',
457
+ 'mobi' => 'application/x-mobipocket-ebook',
458
+ 'mods' => 'application/mods+xml',
459
+ 'mov' => 'video/quicktime',
460
+ 'movie' => 'video/x-sgi-movie',
461
+ 'mp2' => 'audio/mpeg',
462
+ 'mp21' => 'application/mp21',
463
+ 'mp2a' => 'audio/mpeg',
464
+ 'mp3' => 'audio/mpeg',
465
+ 'mp4' => 'video/mp4',
466
+ 'mp4a' => 'audio/mp4',
467
+ 'mp4s' => 'application/mp4',
468
+ 'mp4v' => 'video/mp4',
469
+ 'mpc' => 'application/vnd.mophun.certificate',
470
+ 'mpe' => 'video/mpeg',
471
+ 'mpeg' => 'video/mpeg',
472
+ 'mpg' => 'video/mpeg',
473
+ 'mpg4' => 'video/mp4',
474
+ 'mpga' => 'audio/mpeg',
475
+ 'mpkg' => 'application/vnd.apple.installer+xml',
476
+ 'mpm' => 'application/vnd.blueice.multipass',
477
+ 'mpn' => 'application/vnd.mophun.application',
478
+ 'mpp' => 'application/vnd.ms-project',
479
+ 'mpt' => 'application/vnd.ms-project',
480
+ 'mpy' => 'application/vnd.ibm.minipay',
481
+ 'mqy' => 'application/vnd.mobius.mqy',
482
+ 'mrc' => 'application/marc',
483
+ 'mrcx' => 'application/marcxml+xml',
484
+ 'ms' => 'text/troff',
485
+ 'mscml' => 'application/mediaservercontrol+xml',
486
+ 'mseed' => 'application/vnd.fdsn.mseed',
487
+ 'mseq' => 'application/vnd.mseq',
488
+ 'msf' => 'application/vnd.epson.msf',
489
+ 'msh' => 'model/mesh',
490
+ 'msi' => 'application/x-msdownload',
491
+ 'msl' => 'application/vnd.mobius.msl',
492
+ 'msty' => 'application/vnd.muvee.style',
493
+ 'mts' => 'model/vnd.mts',
494
+ 'mus' => 'application/vnd.musician',
495
+ 'musicxml' => 'application/vnd.recordare.musicxml+xml',
496
+ 'mvb' => 'application/x-msmediaview',
497
+ 'mwf' => 'application/vnd.mfer',
498
+ 'mxf' => 'application/mxf',
499
+ 'mxl' => 'application/vnd.recordare.musicxml',
500
+ 'mxml' => 'application/xv+xml',
501
+ 'mxs' => 'application/vnd.triscape.mxs',
502
+ 'mxu' => 'video/vnd.mpegurl',
503
+ 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
504
+ 'n3' => 'text/n3',
505
+ 'nb' => 'application/mathematica',
506
+ 'nbp' => 'application/vnd.wolfram.player',
507
+ 'nc' => 'application/x-netcdf',
508
+ 'ncx' => 'application/x-dtbncx+xml',
509
+ 'ngdat' => 'application/vnd.nokia.n-gage.data',
510
+ 'nlu' => 'application/vnd.neurolanguage.nlu',
511
+ 'nml' => 'application/vnd.enliven',
512
+ 'nnd' => 'application/vnd.noblenet-directory',
513
+ 'nns' => 'application/vnd.noblenet-sealer',
514
+ 'nnw' => 'application/vnd.noblenet-web',
515
+ 'npx' => 'image/vnd.net-fpx',
516
+ 'nsf' => 'application/vnd.lotus-notes',
517
+ 'oa2' => 'application/vnd.fujitsu.oasys2',
518
+ 'oa3' => 'application/vnd.fujitsu.oasys3',
519
+ 'oas' => 'application/vnd.fujitsu.oasys',
520
+ 'obd' => 'application/x-msbinder',
521
+ 'oda' => 'application/oda',
522
+ 'odb' => 'application/vnd.oasis.opendocument.database',
523
+ 'odc' => 'application/vnd.oasis.opendocument.chart',
524
+ 'odf' => 'application/vnd.oasis.opendocument.formula',
525
+ 'odft' => 'application/vnd.oasis.opendocument.formula-template',
526
+ 'odg' => 'application/vnd.oasis.opendocument.graphics',
527
+ 'odi' => 'application/vnd.oasis.opendocument.image',
528
+ 'odm' => 'application/vnd.oasis.opendocument.text-master',
529
+ 'odp' => 'application/vnd.oasis.opendocument.presentation',
530
+ 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
531
+ 'odt' => 'application/vnd.oasis.opendocument.text',
532
+ 'oga' => 'audio/ogg',
533
+ 'ogg' => 'audio/ogg',
534
+ 'ogv' => 'video/ogg',
535
+ 'ogx' => 'application/ogg',
536
+ 'onepkg' => 'application/onenote',
537
+ 'onetmp' => 'application/onenote',
538
+ 'onetoc' => 'application/onenote',
539
+ 'onetoc2' => 'application/onenote',
540
+ 'opf' => 'application/oebps-package+xml',
541
+ 'oprc' => 'application/vnd.palm',
542
+ 'org' => 'application/vnd.lotus-organizer',
543
+ 'osf' => 'application/vnd.yamaha.openscoreformat',
544
+ 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
545
+ 'otc' => 'application/vnd.oasis.opendocument.chart-template',
546
+ 'otf' => 'application/x-font-otf',
547
+ 'otg' => 'application/vnd.oasis.opendocument.graphics-template',
548
+ 'oth' => 'application/vnd.oasis.opendocument.text-web',
549
+ 'oti' => 'application/vnd.oasis.opendocument.image-template',
550
+ 'otp' => 'application/vnd.oasis.opendocument.presentation-template',
551
+ 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
552
+ 'ott' => 'application/vnd.oasis.opendocument.text-template',
553
+ 'oxt' => 'application/vnd.openofficeorg.extension',
554
+ 'p' => 'text/x-pascal',
555
+ 'p10' => 'application/pkcs10',
556
+ 'p12' => 'application/x-pkcs12',
557
+ 'p7b' => 'application/x-pkcs7-certificates',
558
+ 'p7c' => 'application/pkcs7-mime',
559
+ 'p7m' => 'application/pkcs7-mime',
560
+ 'p7r' => 'application/x-pkcs7-certreqresp',
561
+ 'p7s' => 'application/pkcs7-signature',
562
+ 'p8' => 'application/pkcs8',
563
+ 'pas' => 'text/x-pascal',
564
+ 'paw' => 'application/vnd.pawaafile',
565
+ 'pbd' => 'application/vnd.powerbuilder6',
566
+ 'pbm' => 'image/x-portable-bitmap',
567
+ 'pcf' => 'application/x-font-pcf',
568
+ 'pcl' => 'application/vnd.hp-pcl',
569
+ 'pclxl' => 'application/vnd.hp-pclxl',
570
+ 'pct' => 'image/x-pict',
571
+ 'pcurl' => 'application/vnd.curl.pcurl',
572
+ 'pcx' => 'image/x-pcx',
573
+ 'pdb' => 'application/vnd.palm',
574
+ 'pdf' => 'application/pdf',
575
+ 'pfa' => 'application/x-font-type1',
576
+ 'pfb' => 'application/x-font-type1',
577
+ 'pfm' => 'application/x-font-type1',
578
+ 'pfr' => 'application/font-tdpfr',
579
+ 'pfx' => 'application/x-pkcs12',
580
+ 'pgm' => 'image/x-portable-graymap',
581
+ 'pgn' => 'application/x-chess-pgn',
582
+ 'pgp' => 'application/pgp-encrypted',
583
+ 'php' => 'text/x-php',
584
+ 'phps' => 'application/x-httpd-phps',
585
+ 'pic' => 'image/x-pict',
586
+ 'pkg' => 'application/octet-stream',
587
+ 'pki' => 'application/pkixcmp',
588
+ 'pkipath' => 'application/pkix-pkipath',
589
+ 'plb' => 'application/vnd.3gpp.pic-bw-large',
590
+ 'plc' => 'application/vnd.mobius.plc',
591
+ 'plf' => 'application/vnd.pocketlearn',
592
+ 'pls' => 'application/pls+xml',
593
+ 'pml' => 'application/vnd.ctc-posml',
594
+ 'png' => 'image/png',
595
+ 'pnm' => 'image/x-portable-anymap',
596
+ 'portpkg' => 'application/vnd.macports.portpkg',
597
+ 'pot' => 'application/vnd.ms-powerpoint',
598
+ 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12',
599
+ 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
600
+ 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
601
+ 'ppd' => 'application/vnd.cups-ppd',
602
+ 'ppm' => 'image/x-portable-pixmap',
603
+ 'pps' => 'application/vnd.ms-powerpoint',
604
+ 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
605
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
606
+ 'ppt' => 'application/vnd.ms-powerpoint',
607
+ 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
608
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
609
+ 'pqa' => 'application/vnd.palm',
610
+ 'prc' => 'application/x-mobipocket-ebook',
611
+ 'pre' => 'application/vnd.lotus-freelance',
612
+ 'prf' => 'application/pics-rules',
613
+ 'ps' => 'application/postscript',
614
+ 'psb' => 'application/vnd.3gpp.pic-bw-small',
615
+ 'psd' => 'image/vnd.adobe.photoshop',
616
+ 'psf' => 'application/x-font-linux-psf',
617
+ 'pskcxml' => 'application/pskc+xml',
618
+ 'ptid' => 'application/vnd.pvi.ptid1',
619
+ 'pub' => 'application/x-mspublisher',
620
+ 'pvb' => 'application/vnd.3gpp.pic-bw-var',
621
+ 'pwn' => 'application/vnd.3m.post-it-notes',
622
+ 'pya' => 'audio/vnd.ms-playready.media.pya',
623
+ 'pyv' => 'video/vnd.ms-playready.media.pyv',
624
+ 'qam' => 'application/vnd.epson.quickanime',
625
+ 'qbo' => 'application/vnd.intu.qbo',
626
+ 'qfx' => 'application/vnd.intu.qfx',
627
+ 'qps' => 'application/vnd.publishare-delta-tree',
628
+ 'qt' => 'video/quicktime',
629
+ 'qwd' => 'application/vnd.quark.quarkxpress',
630
+ 'qwt' => 'application/vnd.quark.quarkxpress',
631
+ 'qxb' => 'application/vnd.quark.quarkxpress',
632
+ 'qxd' => 'application/vnd.quark.quarkxpress',
633
+ 'qxl' => 'application/vnd.quark.quarkxpress',
634
+ 'qxt' => 'application/vnd.quark.quarkxpress',
635
+ 'ra' => 'audio/x-pn-realaudio',
636
+ 'ram' => 'audio/x-pn-realaudio',
637
+ 'rar' => 'application/x-rar-compressed',
638
+ 'ras' => 'image/x-cmu-raster',
639
+ 'rb' => 'text/plain',
640
+ 'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
641
+ 'rdf' => 'application/rdf+xml',
642
+ 'rdz' => 'application/vnd.data-vision.rdz',
643
+ 'rep' => 'application/vnd.businessobjects',
644
+ 'res' => 'application/x-dtbresource+xml',
645
+ 'resx' => 'text/xml',
646
+ 'rgb' => 'image/x-rgb',
647
+ 'rif' => 'application/reginfo+xml',
648
+ 'rip' => 'audio/vnd.rip',
649
+ 'rl' => 'application/resource-lists+xml',
650
+ 'rlc' => 'image/vnd.fujixerox.edmics-rlc',
651
+ 'rld' => 'application/resource-lists-diff+xml',
652
+ 'rm' => 'application/vnd.rn-realmedia',
653
+ 'rmi' => 'audio/midi',
654
+ 'rmp' => 'audio/x-pn-realaudio-plugin',
655
+ 'rms' => 'application/vnd.jcp.javame.midlet-rms',
656
+ 'rnc' => 'application/relax-ng-compact-syntax',
657
+ 'roff' => 'text/troff',
658
+ 'rp9' => 'application/vnd.cloanto.rp9',
659
+ 'rpss' => 'application/vnd.nokia.radio-presets',
660
+ 'rpst' => 'application/vnd.nokia.radio-preset',
661
+ 'rq' => 'application/sparql-query',
662
+ 'rs' => 'application/rls-services+xml',
663
+ 'rsd' => 'application/rsd+xml',
664
+ 'rss' => 'application/rss+xml',
665
+ 'rtf' => 'application/rtf',
666
+ 'rtx' => 'text/richtext',
667
+ 's' => 'text/x-asm',
668
+ 'saf' => 'application/vnd.yamaha.smaf-audio',
669
+ 'sbml' => 'application/sbml+xml',
670
+ 'sc' => 'application/vnd.ibm.secure-container',
671
+ 'scd' => 'application/x-msschedule',
672
+ 'scm' => 'application/vnd.lotus-screencam',
673
+ 'scq' => 'application/scvp-cv-request',
674
+ 'scs' => 'application/scvp-cv-response',
675
+ 'scurl' => 'text/vnd.curl.scurl',
676
+ 'sda' => 'application/vnd.stardivision.draw',
677
+ 'sdc' => 'application/vnd.stardivision.calc',
678
+ 'sdd' => 'application/vnd.stardivision.impress',
679
+ 'sdkd' => 'application/vnd.solent.sdkm+xml',
680
+ 'sdkm' => 'application/vnd.solent.sdkm+xml',
681
+ 'sdp' => 'application/sdp',
682
+ 'sdw' => 'application/vnd.stardivision.writer',
683
+ 'see' => 'application/vnd.seemail',
684
+ 'seed' => 'application/vnd.fdsn.seed',
685
+ 'sema' => 'application/vnd.sema',
686
+ 'semd' => 'application/vnd.semd',
687
+ 'semf' => 'application/vnd.semf',
688
+ 'ser' => 'application/java-serialized-object',
689
+ 'setpay' => 'application/set-payment-initiation',
690
+ 'setreg' => 'application/set-registration-initiation',
691
+ 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',
692
+ 'sfs' => 'application/vnd.spotfire.sfs',
693
+ 'sgl' => 'application/vnd.stardivision.writer-global',
694
+ 'sgm' => 'text/sgml',
695
+ 'sgml' => 'text/sgml',
696
+ 'sh' => 'application/x-sh',
697
+ 'shar' => 'application/x-shar',
698
+ 'shf' => 'application/shf+xml',
699
+ 'sig' => 'application/pgp-signature',
700
+ 'silo' => 'model/mesh',
701
+ 'sis' => 'application/vnd.symbian.install',
702
+ 'sisx' => 'application/vnd.symbian.install',
703
+ 'sit' => 'application/x-stuffit',
704
+ 'sitx' => 'application/x-stuffitx',
705
+ 'skd' => 'application/vnd.koan',
706
+ 'skm' => 'application/vnd.koan',
707
+ 'skp' => 'application/vnd.koan',
708
+ 'skt' => 'application/vnd.koan',
709
+ 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
710
+ 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
711
+ 'slt' => 'application/vnd.epson.salt',
712
+ 'sm' => 'application/vnd.stepmania.stepchart',
713
+ 'smf' => 'application/vnd.stardivision.math',
714
+ 'smi' => 'application/smil+xml',
715
+ 'smil' => 'application/smil+xml',
716
+ 'snd' => 'audio/basic',
717
+ 'snf' => 'application/x-font-snf',
718
+ 'so' => 'application/octet-stream',
719
+ 'spc' => 'application/x-pkcs7-certificates',
720
+ 'spf' => 'application/vnd.yamaha.smaf-phrase',
721
+ 'spl' => 'application/x-futuresplash',
722
+ 'spot' => 'text/vnd.in3d.spot',
723
+ 'spp' => 'application/scvp-vp-response',
724
+ 'spq' => 'application/scvp-vp-request',
725
+ 'spx' => 'audio/ogg',
726
+ 'src' => 'application/x-wais-source',
727
+ 'sru' => 'application/sru+xml',
728
+ 'srx' => 'application/sparql-results+xml',
729
+ 'sse' => 'application/vnd.kodak-descriptor',
730
+ 'ssf' => 'application/vnd.epson.ssf',
731
+ 'ssml' => 'application/ssml+xml',
732
+ 'st' => 'application/vnd.sailingtracker.track',
733
+ 'stc' => 'application/vnd.sun.xml.calc.template',
734
+ 'std' => 'application/vnd.sun.xml.draw.template',
735
+ 'stf' => 'application/vnd.wt.stf',
736
+ 'sti' => 'application/vnd.sun.xml.impress.template',
737
+ 'stk' => 'application/hyperstudio',
738
+ 'stl' => 'application/vnd.ms-pki.stl',
739
+ 'str' => 'application/vnd.pg.format',
740
+ 'stw' => 'application/vnd.sun.xml.writer.template',
741
+ 'sub' => 'image/vnd.dvb.subtitle',
742
+ 'sus' => 'application/vnd.sus-calendar',
743
+ 'susp' => 'application/vnd.sus-calendar',
744
+ 'sv4cpio' => 'application/x-sv4cpio',
745
+ 'sv4crc' => 'application/x-sv4crc',
746
+ 'svc' => 'application/vnd.dvb.service',
747
+ 'svd' => 'application/vnd.svd',
748
+ 'svg' => 'image/svg+xml',
749
+ 'svgz' => 'image/svg+xml',
750
+ 'swa' => 'application/x-director',
751
+ 'swf' => 'application/x-shockwave-flash',
752
+ 'swi' => 'application/vnd.aristanetworks.swi',
753
+ 'sxc' => 'application/vnd.sun.xml.calc',
754
+ 'sxd' => 'application/vnd.sun.xml.draw',
755
+ 'sxg' => 'application/vnd.sun.xml.writer.global',
756
+ 'sxi' => 'application/vnd.sun.xml.impress',
757
+ 'sxm' => 'application/vnd.sun.xml.math',
758
+ 'sxw' => 'application/vnd.sun.xml.writer',
759
+ 't' => 'text/troff',
760
+ 'tao' => 'application/vnd.tao.intent-module-archive',
761
+ 'tar' => 'application/x-tar',
762
+ 'tcap' => 'application/vnd.3gpp2.tcap',
763
+ 'tcl' => 'application/x-tcl',
764
+ 'teacher' => 'application/vnd.smart.teacher',
765
+ 'tei' => 'application/tei+xml',
766
+ 'teicorpus' => 'application/tei+xml',
767
+ 'tex' => 'application/x-tex',
768
+ 'texi' => 'application/x-texinfo',
769
+ 'texinfo' => 'application/x-texinfo',
770
+ 'text' => 'text/plain',
771
+ 'tfi' => 'application/thraud+xml',
772
+ 'tfm' => 'application/x-tex-tfm',
773
+ 'thmx' => 'application/vnd.ms-officetheme',
774
+ 'tif' => 'image/tiff',
775
+ 'tiff' => 'image/tiff',
776
+ 'tmo' => 'application/vnd.tmobile-livetv',
777
+ 'torrent' => 'application/x-bittorrent',
778
+ 'tpl' => 'application/vnd.groove-tool-template',
779
+ 'tpt' => 'application/vnd.trid.tpt',
780
+ 'tr' => 'text/troff',
781
+ 'tra' => 'application/vnd.trueapp',
782
+ 'trm' => 'application/x-msterminal',
783
+ 'tsd' => 'application/timestamped-data',
784
+ 'tsv' => 'text/tab-separated-values',
785
+ 'ttc' => 'application/x-font-ttf',
786
+ 'ttf' => 'application/x-font-ttf',
787
+ 'ttl' => 'text/turtle',
788
+ 'twd' => 'application/vnd.simtech-mindmapper',
789
+ 'twds' => 'application/vnd.simtech-mindmapper',
790
+ 'txd' => 'application/vnd.genomatix.tuxedo',
791
+ 'txf' => 'application/vnd.mobius.txf',
792
+ 'txt' => 'text/plain',
793
+ 'u32' => 'application/x-authorware-bin',
794
+ 'udeb' => 'application/x-debian-package',
795
+ 'ufd' => 'application/vnd.ufdl',
796
+ 'ufdl' => 'application/vnd.ufdl',
797
+ 'umj' => 'application/vnd.umajin',
798
+ 'unityweb' => 'application/vnd.unity',
799
+ 'uoml' => 'application/vnd.uoml+xml',
800
+ 'uri' => 'text/uri-list',
801
+ 'uris' => 'text/uri-list',
802
+ 'urls' => 'text/uri-list',
803
+ 'ustar' => 'application/x-ustar',
804
+ 'utz' => 'application/vnd.uiq.theme',
805
+ 'uu' => 'text/x-uuencode',
806
+ 'uva' => 'audio/vnd.dece.audio',
807
+ 'uvd' => 'application/vnd.dece.data',
808
+ 'uvf' => 'application/vnd.dece.data',
809
+ 'uvg' => 'image/vnd.dece.graphic',
810
+ 'uvh' => 'video/vnd.dece.hd',
811
+ 'uvi' => 'image/vnd.dece.graphic',
812
+ 'uvm' => 'video/vnd.dece.mobile',
813
+ 'uvp' => 'video/vnd.dece.pd',
814
+ 'uvs' => 'video/vnd.dece.sd',
815
+ 'uvt' => 'application/vnd.dece.ttml+xml',
816
+ 'uvu' => 'video/vnd.uvvu.mp4',
817
+ 'uvv' => 'video/vnd.dece.video',
818
+ 'uvva' => 'audio/vnd.dece.audio',
819
+ 'uvvd' => 'application/vnd.dece.data',
820
+ 'uvvf' => 'application/vnd.dece.data',
821
+ 'uvvg' => 'image/vnd.dece.graphic',
822
+ 'uvvh' => 'video/vnd.dece.hd',
823
+ 'uvvi' => 'image/vnd.dece.graphic',
824
+ 'uvvm' => 'video/vnd.dece.mobile',
825
+ 'uvvp' => 'video/vnd.dece.pd',
826
+ 'uvvs' => 'video/vnd.dece.sd',
827
+ 'uvvt' => 'application/vnd.dece.ttml+xml',
828
+ 'uvvu' => 'video/vnd.uvvu.mp4',
829
+ 'uvvv' => 'video/vnd.dece.video',
830
+ 'uvvx' => 'application/vnd.dece.unspecified',
831
+ 'uvx' => 'application/vnd.dece.unspecified',
832
+ 'vcd' => 'application/x-cdlink',
833
+ 'vcf' => 'text/x-vcard',
834
+ 'vcg' => 'application/vnd.groove-vcard',
835
+ 'vcs' => 'text/x-vcalendar',
836
+ 'vcx' => 'application/vnd.vcx',
837
+ 'vis' => 'application/vnd.visionary',
838
+ 'viv' => 'video/vnd.vivo',
839
+ 'vor' => 'application/vnd.stardivision.writer',
840
+ 'vox' => 'application/x-authorware-bin',
841
+ 'vrml' => 'model/vrml',
842
+ 'vsd' => 'application/vnd.visio',
843
+ 'vsf' => 'application/vnd.vsf',
844
+ 'vss' => 'application/vnd.visio',
845
+ 'vst' => 'application/vnd.visio',
846
+ 'vsw' => 'application/vnd.visio',
847
+ 'vtu' => 'model/vnd.vtu',
848
+ 'vxml' => 'application/voicexml+xml',
849
+ 'w3d' => 'application/x-director',
850
+ 'wad' => 'application/x-doom',
851
+ 'wav' => 'audio/x-wav',
852
+ 'wax' => 'audio/x-ms-wax',
853
+ 'wbmp' => 'image/vnd.wap.wbmp',
854
+ 'wbs' => 'application/vnd.criticaltools.wbs+xml',
855
+ 'wbxml' => 'application/vnd.wap.wbxml',
856
+ 'wcm' => 'application/vnd.ms-works',
857
+ 'wdb' => 'application/vnd.ms-works',
858
+ 'weba' => 'audio/webm',
859
+ 'webm' => 'video/webm',
860
+ 'webp' => 'image/webp',
861
+ 'wg' => 'application/vnd.pmi.widget',
862
+ 'wgt' => 'application/widget',
863
+ 'wks' => 'application/vnd.ms-works',
864
+ 'wm' => 'video/x-ms-wm',
865
+ 'wma' => 'audio/x-ms-wma',
866
+ 'wmd' => 'application/x-ms-wmd',
867
+ 'wmf' => 'application/x-msmetafile',
868
+ 'wml' => 'text/vnd.wap.wml',
869
+ 'wmlc' => 'application/vnd.wap.wmlc',
870
+ 'wmls' => 'text/vnd.wap.wmlscript',
871
+ 'wmlsc' => 'application/vnd.wap.wmlscriptc',
872
+ 'wmv' => 'video/x-ms-wmv',
873
+ 'wmx' => 'video/x-ms-wmx',
874
+ 'wmz' => 'application/x-ms-wmz',
875
+ 'woff' => 'application/x-font-woff',
876
+ 'wpd' => 'application/vnd.wordperfect',
877
+ 'wpl' => 'application/vnd.ms-wpl',
878
+ 'wps' => 'application/vnd.ms-works',
879
+ 'wqd' => 'application/vnd.wqd',
880
+ 'wri' => 'application/x-mswrite',
881
+ 'wrl' => 'model/vrml',
882
+ 'wsdl' => 'application/wsdl+xml',
883
+ 'wspolicy' => 'application/wspolicy+xml',
884
+ 'wtb' => 'application/vnd.webturbo',
885
+ 'wvx' => 'video/x-ms-wvx',
886
+ 'x32' => 'application/x-authorware-bin',
887
+ 'x3d' => 'application/vnd.hzn-3d-crossword',
888
+ 'xap' => 'application/x-silverlight-app',
889
+ 'xar' => 'application/vnd.xara',
890
+ 'xbap' => 'application/x-ms-xbap',
891
+ 'xbd' => 'application/vnd.fujixerox.docuworks.binder',
892
+ 'xbm' => 'image/x-xbitmap',
893
+ 'xdf' => 'application/xcap-diff+xml',
894
+ 'xdm' => 'application/vnd.syncml.dm+xml',
895
+ 'xdp' => 'application/vnd.adobe.xdp+xml',
896
+ 'xdssc' => 'application/dssc+xml',
897
+ 'xdw' => 'application/vnd.fujixerox.docuworks',
898
+ 'xenc' => 'application/xenc+xml',
899
+ 'xer' => 'application/patch-ops-error+xml',
900
+ 'xfdf' => 'application/vnd.adobe.xfdf',
901
+ 'xfdl' => 'application/vnd.xfdl',
902
+ 'xht' => 'application/xhtml+xml',
903
+ 'xhtml' => 'application/xhtml+xml',
904
+ 'xhvml' => 'application/xv+xml',
905
+ 'xif' => 'image/vnd.xiff',
906
+ 'xla' => 'application/vnd.ms-excel',
907
+ 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12',
908
+ 'xlc' => 'application/vnd.ms-excel',
909
+ 'xlm' => 'application/vnd.ms-excel',
910
+ 'xls' => 'application/vnd.ms-excel',
911
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
912
+ 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12',
913
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
914
+ 'xlt' => 'application/vnd.ms-excel',
915
+ 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12',
916
+ 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
917
+ 'xlw' => 'application/vnd.ms-excel',
918
+ 'xml' => 'application/xml',
919
+ 'xo' => 'application/vnd.olpc-sugar',
920
+ 'xop' => 'application/xop+xml',
921
+ 'xpi' => 'application/x-xpinstall',
922
+ 'xpm' => 'image/x-xpixmap',
923
+ 'xpr' => 'application/vnd.is-xpr',
924
+ 'xps' => 'application/vnd.ms-xpsdocument',
925
+ 'xpw' => 'application/vnd.intercon.formnet',
926
+ 'xpx' => 'application/vnd.intercon.formnet',
927
+ 'xsl' => 'application/xml',
928
+ 'xslt' => 'application/xslt+xml',
929
+ 'xsm' => 'application/vnd.syncml+xml',
930
+ 'xspf' => 'application/xspf+xml',
931
+ 'xul' => 'application/vnd.mozilla.xul+xml',
932
+ 'xvm' => 'application/xv+xml',
933
+ 'xvml' => 'application/xv+xml',
934
+ 'xwd' => 'image/x-xwindowdump',
935
+ 'xyz' => 'chemical/x-xyz',
936
+ 'yaml' => 'text/yaml',
937
+ 'yang' => 'application/yang',
938
+ 'yin' => 'application/yin+xml',
939
+ 'yml' => 'text/yaml',
940
+ 'zaz' => 'application/vnd.zzazz.deck+xml',
941
+ 'zip' => 'application/zip',
942
+ 'zir' => 'application/vnd.zul',
943
+ 'zirz' => 'application/vnd.zul',
944
+ 'zmm' => 'application/vnd.handheld-entertainment+xml'
945
+ ];
946
+
947
+ /**
948
+ * Get a singleton instance of the class
949
+ *
950
+ * @return self
951
+ * @codeCoverageIgnore
952
+ */
953
+ public static function getInstance()
954
+ {
955
+ if (!self::$instance) {
956
+ self::$instance = new self();
957
+ }
958
+
959
+ return self::$instance;
960
+ }
961
+
962
+ /**
963
+ * Get a mimetype value from a file extension
964
+ *
965
+ * @param string $extension File extension
966
+ *
967
+ * @return string|null
968
+ */
969
+ public function fromExtension($extension)
970
+ {
971
+ $extension = strtolower($extension);
972
+
973
+ return isset($this->mimetypes[$extension]) ? $this->mimetypes[$extension] : null;
974
+ }
975
+
976
+ /**
977
+ * Get a mimetype from a filename
978
+ *
979
+ * @param string $filename Filename to generate a mimetype from
980
+ *
981
+ * @return string|null
982
+ */
983
+ public function fromFilename($filename)
984
+ {
985
+ return $this->fromExtension(pathinfo($filename, PATHINFO_EXTENSION));
986
+ }
987
+ }
facebook/GraphNodes/Collection.php ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class Collection
28
+ *
29
+ * Modified version of Collection in "illuminate/support" by Taylor Otwell
30
+ *
31
+ * @package Facebook
32
+ */
33
+
34
+ use ArrayAccess;
35
+ use ArrayIterator;
36
+ use Countable;
37
+ use IteratorAggregate;
38
+
39
+ class Collection implements ArrayAccess, Countable, IteratorAggregate
40
+ {
41
+ /**
42
+ * The items contained in the collection.
43
+ *
44
+ * @var array
45
+ */
46
+ protected $items = [];
47
+
48
+ /**
49
+ * Create a new collection.
50
+ *
51
+ * @param array $items
52
+ */
53
+ public function __construct(array $items = [])
54
+ {
55
+ $this->items = $items;
56
+ }
57
+
58
+ /**
59
+ * Gets the value of a field from the Graph node.
60
+ *
61
+ * @param string $name The field to retrieve.
62
+ * @param mixed $default The default to return if the field doesn't exist.
63
+ *
64
+ * @return mixed
65
+ */
66
+ public function getField($name, $default = null)
67
+ {
68
+ if (isset($this->items[$name])) {
69
+ return $this->items[$name];
70
+ }
71
+
72
+ return $default ?: null;
73
+ }
74
+
75
+ /**
76
+ * Gets the value of the named property for this graph object.
77
+ *
78
+ * @param string $name The property to retrieve.
79
+ * @param mixed $default The default to return if the property doesn't exist.
80
+ *
81
+ * @return mixed
82
+ *
83
+ * @deprecated 5.0.0 getProperty() has been renamed to getField()
84
+ * @todo v6: Remove this method
85
+ */
86
+ public function getProperty($name, $default = null)
87
+ {
88
+ return $this->getField($name, $default);
89
+ }
90
+
91
+ /**
92
+ * Returns a list of all fields set on the object.
93
+ *
94
+ * @return array
95
+ */
96
+ public function getFieldNames()
97
+ {
98
+ return array_keys($this->items);
99
+ }
100
+
101
+ /**
102
+ * Returns a list of all properties set on the object.
103
+ *
104
+ * @return array
105
+ *
106
+ * @deprecated 5.0.0 getPropertyNames() has been renamed to getFieldNames()
107
+ * @todo v6: Remove this method
108
+ */
109
+ public function getPropertyNames()
110
+ {
111
+ return $this->getFieldNames();
112
+ }
113
+
114
+ /**
115
+ * Get all of the items in the collection.
116
+ *
117
+ * @return array
118
+ */
119
+ public function all()
120
+ {
121
+ return $this->items;
122
+ }
123
+
124
+ /**
125
+ * Get the collection of items as a plain array.
126
+ *
127
+ * @return array
128
+ */
129
+ public function asArray()
130
+ {
131
+ return array_map(function ($value) {
132
+ return $value instanceof Collection ? $value->asArray() : $value;
133
+ }, $this->items);
134
+ }
135
+
136
+ /**
137
+ * Run a map over each of the items.
138
+ *
139
+ * @param \Closure $callback
140
+ *
141
+ * @return static
142
+ */
143
+ public function map(\Closure $callback)
144
+ {
145
+ return new static(array_map($callback, $this->items, array_keys($this->items)));
146
+ }
147
+
148
+ /**
149
+ * Get the collection of items as JSON.
150
+ *
151
+ * @param int $options
152
+ *
153
+ * @return string
154
+ */
155
+ public function asJson($options = 0)
156
+ {
157
+ return json_encode($this->asArray(), $options);
158
+ }
159
+
160
+ /**
161
+ * Count the number of items in the collection.
162
+ *
163
+ * @return int
164
+ */
165
+ public function count()
166
+ {
167
+ return count($this->items);
168
+ }
169
+
170
+ /**
171
+ * Get an iterator for the items.
172
+ *
173
+ * @return ArrayIterator
174
+ */
175
+ public function getIterator()
176
+ {
177
+ return new ArrayIterator($this->items);
178
+ }
179
+
180
+ /**
181
+ * Determine if an item exists at an offset.
182
+ *
183
+ * @param mixed $key
184
+ *
185
+ * @return bool
186
+ */
187
+ public function offsetExists($key)
188
+ {
189
+ return array_key_exists($key, $this->items);
190
+ }
191
+
192
+ /**
193
+ * Get an item at a given offset.
194
+ *
195
+ * @param mixed $key
196
+ *
197
+ * @return mixed
198
+ */
199
+ public function offsetGet($key)
200
+ {
201
+ return $this->items[$key];
202
+ }
203
+
204
+ /**
205
+ * Set the item at a given offset.
206
+ *
207
+ * @param mixed $key
208
+ * @param mixed $value
209
+ *
210
+ * @return void
211
+ */
212
+ public function offsetSet($key, $value)
213
+ {
214
+ if (is_null($key)) {
215
+ $this->items[] = $value;
216
+ } else {
217
+ $this->items[$key] = $value;
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Unset the item at a given offset.
223
+ *
224
+ * @param string $key
225
+ *
226
+ * @return void
227
+ */
228
+ public function offsetUnset($key)
229
+ {
230
+ unset($this->items[$key]);
231
+ }
232
+
233
+ /**
234
+ * Convert the collection to its string representation.
235
+ *
236
+ * @return string
237
+ */
238
+ public function __toString()
239
+ {
240
+ return $this->asJson();
241
+ }
242
+ }
facebook/GraphNodes/GraphAchievement.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphAchievement
28
+ *
29
+ * @package Facebook
30
+ */
31
+
32
+ class GraphAchievement extends GraphNode
33
+ {
34
+ /**
35
+ * @var array Maps object key names to Graph object types.
36
+ */
37
+ protected static $graphObjectMap = [
38
+ 'from' => '\Facebook\GraphNodes\GraphUser',
39
+ 'application' => '\Facebook\GraphNodes\GraphApplication',
40
+ ];
41
+
42
+ /**
43
+ * Returns the ID for the achievement.
44
+ *
45
+ * @return string|null
46
+ */
47
+ public function getId()
48
+ {
49
+ return $this->getField('id');
50
+ }
51
+
52
+ /**
53
+ * Returns the user who achieved this.
54
+ *
55
+ * @return GraphUser|null
56
+ */
57
+ public function getFrom()
58
+ {
59
+ return $this->getField('from');
60
+ }
61
+
62
+ /**
63
+ * Returns the time at which this was achieved.
64
+ *
65
+ * @return \DateTime|null
66
+ */
67
+ public function getPublishTime()
68
+ {
69
+ return $this->getField('publish_time');
70
+ }
71
+
72
+ /**
73
+ * Returns the app in which the user achieved this.
74
+ *
75
+ * @return GraphApplication|null
76
+ */
77
+ public function getApplication()
78
+ {
79
+ return $this->getField('application');
80
+ }
81
+
82
+ /**
83
+ * Returns information about the achievement type this instance is connected with.
84
+ *
85
+ * @return array|null
86
+ */
87
+ public function getData()
88
+ {
89
+ return $this->getField('data');
90
+ }
91
+
92
+ /**
93
+ * Returns the type of achievement.
94
+ *
95
+ * @see https://developers.facebook.com/docs/graph-api/reference/v2.2/achievement
96
+ *
97
+ * @return string
98
+ */
99
+ public function getType()
100
+ {
101
+ return 'game.achievement';
102
+ }
103
+
104
+ /**
105
+ * Indicates whether gaining the achievement published a feed story for the user.
106
+ *
107
+ * @return boolean|null
108
+ */
109
+ public function isNoFeedStory()
110
+ {
111
+ return $this->getField('no_feed_story');
112
+ }
113
+ }
facebook/GraphNodes/GraphAlbum.php ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphAlbum
28
+ *
29
+ * @package Facebook
30
+ */
31
+
32
+ class GraphAlbum extends GraphNode
33
+ {
34
+ /**
35
+ * @var array Maps object key names to Graph object types.
36
+ */
37
+ protected static $graphObjectMap = [
38
+ 'from' => '\Facebook\GraphNodes\GraphUser',
39
+ 'place' => '\Facebook\GraphNodes\GraphPage',
40
+ ];
41
+
42
+ /**
43
+ * Returns the ID for the album.
44
+ *
45
+ * @return string|null
46
+ */
47
+ public function getId()
48
+ {
49
+ return $this->getField('id');
50
+ }
51
+
52
+ /**
53
+ * Returns whether the viewer can upload photos to this album.
54
+ *
55
+ * @return boolean|null
56
+ */
57
+ public function getCanUpload()
58
+ {
59
+ return $this->getField('can_upload');
60
+ }
61
+
62
+ /**
63
+ * Returns the number of photos in this album.
64
+ *
65
+ * @return int|null
66
+ */
67
+ public function getCount()
68
+ {
69
+ return $this->getField('count');
70
+ }
71
+
72
+ /**
73
+ * Returns the ID of the album's cover photo.
74
+ *
75
+ * @return string|null
76
+ */
77
+ public function getCoverPhoto()
78
+ {
79
+ return $this->getField('cover_photo');
80
+ }
81
+
82
+ /**
83
+ * Returns the time the album was initially created.
84
+ *
85
+ * @return \DateTime|null
86
+ */
87
+ public function getCreatedTime()
88
+ {
89
+ return $this->getField('created_time');
90
+ }
91
+
92
+ /**
93
+ * Returns the time the album was updated.
94
+ *
95
+ * @return \DateTime|null
96
+ */
97
+ public function getUpdatedTime()
98
+ {
99
+ return $this->getField('updated_time');
100
+ }
101
+
102
+ /**
103
+ * Returns the description of the album.
104
+ *
105
+ * @return string|null
106
+ */
107
+ public function getDescription()
108
+ {
109
+ return $this->getField('description');
110
+ }
111
+
112
+ /**
113
+ * Returns profile that created the album.
114
+ *
115
+ * @return GraphUser|null
116
+ */
117
+ public function getFrom()
118
+ {
119
+ return $this->getField('from');
120
+ }
121
+
122
+ /**
123
+ * Returns profile that created the album.
124
+ *
125
+ * @return GraphPage|null
126
+ */
127
+ public function getPlace()
128
+ {
129
+ return $this->getField('place');
130
+ }
131
+
132
+ /**
133
+ * Returns a link to this album on Facebook.
134
+ *
135
+ * @return string|null
136
+ */
137
+ public function getLink()
138
+ {
139
+ return $this->getField('link');
140
+ }
141
+
142
+ /**
143
+ * Returns the textual location of the album.
144
+ *
145
+ * @return string|null
146
+ */
147
+ public function getLocation()
148
+ {
149
+ return $this->getField('location');
150
+ }
151
+
152
+ /**
153
+ * Returns the title of the album.
154
+ *
155
+ * @return string|null
156
+ */
157
+ public function getName()
158
+ {
159
+ return $this->getField('name');
160
+ }
161
+
162
+ /**
163
+ * Returns the privacy settings for the album.
164
+ *
165
+ * @return string|null
166
+ */
167
+ public function getPrivacy()
168
+ {
169
+ return $this->getField('privacy');
170
+ }
171
+
172
+ /**
173
+ * Returns the type of the album.
174
+ *
175
+ * enum{ profile, mobile, wall, normal, album }
176
+ *
177
+ * @return string|null
178
+ */
179
+ public function getType()
180
+ {
181
+ return $this->getField('type');
182
+ }
183
+ }
facebook/GraphNodes/GraphApplication.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphApplication
28
+ *
29
+ * @package Facebook
30
+ */
31
+
32
+ class GraphApplication extends GraphNode
33
+ {
34
+ /**
35
+ * Returns the ID for the application.
36
+ *
37
+ * @return string|null
38
+ */
39
+ public function getId()
40
+ {
41
+ return $this->getField('id');
42
+ }
43
+ }
facebook/GraphNodes/GraphCoverPhoto.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphCoverPhoto
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphCoverPhoto extends GraphNode
32
+ {
33
+ /**
34
+ * Returns the id of cover if it exists
35
+ *
36
+ * @return int|null
37
+ */
38
+ public function getId()
39
+ {
40
+ return $this->getField('id');
41
+ }
42
+
43
+ /**
44
+ * Returns the source of cover if it exists
45
+ *
46
+ * @return string|null
47
+ */
48
+ public function getSource()
49
+ {
50
+ return $this->getField('source');
51
+ }
52
+
53
+ /**
54
+ * Returns the offset_x of cover if it exists
55
+ *
56
+ * @return int|null
57
+ */
58
+ public function getOffsetX()
59
+ {
60
+ return $this->getField('offset_x');
61
+ }
62
+
63
+ /**
64
+ * Returns the offset_y of cover if it exists
65
+ *
66
+ * @return int|null
67
+ */
68
+ public function getOffsetY()
69
+ {
70
+ return $this->getField('offset_y');
71
+ }
72
+ }
facebook/GraphNodes/GraphEdge.php ADDED
@@ -0,0 +1,260 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ use Facebook\FacebookRequest;
27
+ use Facebook\Url\FacebookUrlManipulator;
28
+ use Facebook\Exceptions\FacebookSDKException;
29
+
30
+ /**
31
+ * Class GraphEdge
32
+ *
33
+ * @package Facebook
34
+ */
35
+ class GraphEdge extends Collection
36
+ {
37
+ /**
38
+ * @var FacebookRequest The original request that generated this data.
39
+ */
40
+ protected $request;
41
+
42
+ /**
43
+ * @var array An array of Graph meta data like pagination, etc.
44
+ */
45
+ protected $metaData = [];
46
+
47
+ /**
48
+ * @var string|null The parent Graph edge endpoint that generated the list.
49
+ */
50
+ protected $parentEdgeEndpoint;
51
+
52
+ /**
53
+ * @var string|null The subclass of the child GraphNode's.
54
+ */
55
+ protected $subclassName;
56
+
57
+ /**
58
+ * Init this collection of GraphNode's.
59
+ *
60
+ * @param FacebookRequest $request The original request that generated this data.
61
+ * @param array $data An array of GraphNode's.
62
+ * @param array $metaData An array of Graph meta data like pagination, etc.
63
+ * @param string|null $parentEdgeEndpoint The parent Graph edge endpoint that generated the list.
64
+ * @param string|null $subclassName The subclass of the child GraphNode's.
65
+ */
66
+ public function __construct(FacebookRequest $request, array $data = [], array $metaData = [], $parentEdgeEndpoint = null, $subclassName = null)
67
+ {
68
+ $this->request = $request;
69
+ $this->metaData = $metaData;
70
+ $this->parentEdgeEndpoint = $parentEdgeEndpoint;
71
+ $this->subclassName = $subclassName;
72
+
73
+ parent::__construct($data);
74
+ }
75
+
76
+ /**
77
+ * Gets the parent Graph edge endpoint that generated the list.
78
+ *
79
+ * @return string|null
80
+ */
81
+ public function getParentGraphEdge()
82
+ {
83
+ return $this->parentEdgeEndpoint;
84
+ }
85
+
86
+ /**
87
+ * Gets the subclass name that the child GraphNode's are cast as.
88
+ *
89
+ * @return string|null
90
+ */
91
+ public function getSubClassName()
92
+ {
93
+ return $this->subclassName;
94
+ }
95
+
96
+ /**
97
+ * Returns the raw meta data associated with this GraphEdge.
98
+ *
99
+ * @return array
100
+ */
101
+ public function getMetaData()
102
+ {
103
+ return $this->metaData;
104
+ }
105
+
106
+ /**
107
+ * Returns the next cursor if it exists.
108
+ *
109
+ * @return string|null
110
+ */
111
+ public function getNextCursor()
112
+ {
113
+ return $this->getCursor('after');
114
+ }
115
+
116
+ /**
117
+ * Returns the previous cursor if it exists.
118
+ *
119
+ * @return string|null
120
+ */
121
+ public function getPreviousCursor()
122
+ {
123
+ return $this->getCursor('before');
124
+ }
125
+
126
+ /**
127
+ * Returns the cursor for a specific direction if it exists.
128
+ *
129
+ * @param string $direction The direction of the page: after|before
130
+ *
131
+ * @return string|null
132
+ */
133
+ public function getCursor($direction)
134
+ {
135
+ if (isset($this->metaData['paging']['cursors'][$direction])) {
136
+ return $this->metaData['paging']['cursors'][$direction];
137
+ }
138
+
139
+ return null;
140
+ }
141
+
142
+ /**
143
+ * Generates a pagination URL based on a cursor.
144
+ *
145
+ * @param string $direction The direction of the page: next|previous
146
+ *
147
+ * @return string|null
148
+ *
149
+ * @throws FacebookSDKException
150
+ */
151
+ public function getPaginationUrl($direction)
152
+ {
153
+ $this->validateForPagination();
154
+
155
+ // Do we have a paging URL?
156
+ if (isset($this->metaData['paging'][$direction])) {
157
+ // Graph returns the full URL with all the original params.
158
+ // We just want the endpoint though.
159
+ $pageUrl = $this->metaData['paging'][$direction];
160
+
161
+ return FacebookUrlManipulator::baseGraphUrlEndpoint($pageUrl);
162
+ }
163
+
164
+ // Do we have a cursor to work with?
165
+ $cursorDirection = $direction === 'next' ? 'after' : 'before';
166
+ $cursor = $this->getCursor($cursorDirection);
167
+ if (!$cursor) {
168
+ return null;
169
+ }
170
+
171
+ // If we don't know the ID of the parent node, this ain't gonna work.
172
+ if (!$this->parentEdgeEndpoint) {
173
+ return null;
174
+ }
175
+
176
+ // We have the parent node ID, paging cursor & original request.
177
+ // These were the ingredients chosen to create the perfect little URL.
178
+ $pageUrl = $this->parentEdgeEndpoint . '?' . $cursorDirection . '=' . urlencode($cursor);
179
+
180
+ // Pull in the original params
181
+ $originalUrl = $this->request->getUrl();
182
+ $pageUrl = FacebookUrlManipulator::mergeUrlParams($originalUrl, $pageUrl);
183
+
184
+ return FacebookUrlManipulator::forceSlashPrefix($pageUrl);
185
+ }
186
+
187
+ /**
188
+ * Validates whether or not we can paginate on this request.
189
+ *
190
+ * @throws FacebookSDKException
191
+ */
192
+ public function validateForPagination()
193
+ {
194
+ if ($this->request->getMethod() !== 'GET') {
195
+ throw new FacebookSDKException('You can only paginate on a GET request.', 720);
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Gets the request object needed to make a next|previous page request.
201
+ *
202
+ * @param string $direction The direction of the page: next|previous
203
+ *
204
+ * @return FacebookRequest|null
205
+ *
206
+ * @throws FacebookSDKException
207
+ */
208
+ public function getPaginationRequest($direction)
209
+ {
210
+ $pageUrl = $this->getPaginationUrl($direction);
211
+ if (!$pageUrl) {
212
+ return null;
213
+ }
214
+
215
+ $newRequest = clone $this->request;
216
+ $newRequest->setEndpoint($pageUrl);
217
+
218
+ return $newRequest;
219
+ }
220
+
221
+ /**
222
+ * Gets the request object needed to make a "next" page request.
223
+ *
224
+ * @return FacebookRequest|null
225
+ *
226
+ * @throws FacebookSDKException
227
+ */
228
+ public function getNextPageRequest()
229
+ {
230
+ return $this->getPaginationRequest('next');
231
+ }
232
+
233
+ /**
234
+ * Gets the request object needed to make a "previous" page request.
235
+ *
236
+ * @return FacebookRequest|null
237
+ *
238
+ * @throws FacebookSDKException
239
+ */
240
+ public function getPreviousPageRequest()
241
+ {
242
+ return $this->getPaginationRequest('previous');
243
+ }
244
+
245
+ /**
246
+ * The total number of results according to Graph if it exists.
247
+ *
248
+ * This will be returned if the summary=true modifier is present in the request.
249
+ *
250
+ * @return int|null
251
+ */
252
+ public function getTotalCount()
253
+ {
254
+ if (isset($this->metaData['summary']['total_count'])) {
255
+ return $this->metaData['summary']['total_count'];
256
+ }
257
+
258
+ return null;
259
+ }
260
+ }
facebook/GraphNodes/GraphEvent.php ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphEvent
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphEvent extends GraphNode
32
+ {
33
+ /**
34
+ * @var array Maps object key names to GraphNode types.
35
+ */
36
+ protected static $graphObjectMap = [
37
+ 'cover' => '\Facebook\GraphNodes\GraphCoverPhoto',
38
+ 'place' => '\Facebook\GraphNodes\GraphPage',
39
+ 'picture' => '\Facebook\GraphNodes\GraphPicture',
40
+ 'parent_group' => '\Facebook\GraphNodes\GraphGroup',
41
+ ];
42
+
43
+ /**
44
+ * Returns the `id` (The event ID) as string if present.
45
+ *
46
+ * @return string|null
47
+ */
48
+ public function getId()
49
+ {
50
+ return $this->getField('id');
51
+ }
52
+
53
+ /**
54
+ * Returns the `cover` (Cover picture) as GraphCoverPhoto if present.
55
+ *
56
+ * @return GraphCoverPhoto|null
57
+ */
58
+ public function getCover()
59
+ {
60
+ return $this->getField('cover');
61
+ }
62
+
63
+ /**
64
+ * Returns the `description` (Long-form description) as string if present.
65
+ *
66
+ * @return string|null
67
+ */
68
+ public function getDescription()
69
+ {
70
+ return $this->getField('description');
71
+ }
72
+
73
+ /**
74
+ * Returns the `end_time` (End time, if one has been set) as DateTime if present.
75
+ *
76
+ * @return \DateTime|null
77
+ */
78
+ public function getEndTime()
79
+ {
80
+ return $this->getField('end_time');
81
+ }
82
+
83
+ /**
84
+ * Returns the `is_date_only` (Whether the event only has a date specified, but no time) as bool if present.
85
+ *
86
+ * @return bool|null
87
+ */
88
+ public function getIsDateOnly()
89
+ {
90
+ return $this->getField('is_date_only');
91
+ }
92
+
93
+ /**
94
+ * Returns the `name` (Event name) as string if present.
95
+ *
96
+ * @return string|null
97
+ */
98
+ public function getName()
99
+ {
100
+ return $this->getField('name');
101
+ }
102
+
103
+ /**
104
+ * Returns the `owner` (The profile that created the event) as GraphNode if present.
105
+ *
106
+ * @return GraphNode|null
107
+ */
108
+ public function getOwner()
109
+ {
110
+ return $this->getField('owner');
111
+ }
112
+
113
+ /**
114
+ * Returns the `parent_group` (The group the event belongs to) as GraphGroup if present.
115
+ *
116
+ * @return GraphGroup|null
117
+ */
118
+ public function getParentGroup()
119
+ {
120
+ return $this->getField('parent_group');
121
+ }
122
+
123
+ /**
124
+ * Returns the `place` (Event Place information) as GraphPage if present.
125
+ *
126
+ * @return GraphPage|null
127
+ */
128
+ public function getPlace()
129
+ {
130
+ return $this->getField('place');
131
+ }
132
+
133
+ /**
134
+ * Returns the `privacy` (Who can see the event) as string if present.
135
+ *
136
+ * @return string|null
137
+ */
138
+ public function getPrivacy()
139
+ {
140
+ return $this->getField('privacy');
141
+ }
142
+
143
+ /**
144
+ * Returns the `start_time` (Start time) as DateTime if present.
145
+ *
146
+ * @return \DateTime|null
147
+ */
148
+ public function getStartTime()
149
+ {
150
+ return $this->getField('start_time');
151
+ }
152
+
153
+ /**
154
+ * Returns the `ticket_uri` (The link users can visit to buy a ticket to this event) as string if present.
155
+ *
156
+ * @return string|null
157
+ */
158
+ public function getTicketUri()
159
+ {
160
+ return $this->getField('ticket_uri');
161
+ }
162
+
163
+ /**
164
+ * Returns the `timezone` (Timezone) as string if present.
165
+ *
166
+ * @return string|null
167
+ */
168
+ public function getTimezone()
169
+ {
170
+ return $this->getField('timezone');
171
+ }
172
+
173
+ /**
174
+ * Returns the `updated_time` (Last update time) as DateTime if present.
175
+ *
176
+ * @return \DateTime|null
177
+ */
178
+ public function getUpdatedTime()
179
+ {
180
+ return $this->getField('updated_time');
181
+ }
182
+
183
+ /**
184
+ * Returns the `picture` (Event picture) as GraphPicture if present.
185
+ *
186
+ * @return GraphPicture|null
187
+ */
188
+ public function getPicture()
189
+ {
190
+ return $this->getField('picture');
191
+ }
192
+
193
+ /**
194
+ * Returns the `attending_count` (Number of people attending the event) as int if present.
195
+ *
196
+ * @return int|null
197
+ */
198
+ public function getAttendingCount()
199
+ {
200
+ return $this->getField('attending_count');
201
+ }
202
+
203
+ /**
204
+ * Returns the `declined_count` (Number of people who declined the event) as int if present.
205
+ *
206
+ * @return int|null
207
+ */
208
+ public function getDeclinedCount()
209
+ {
210
+ return $this->getField('declined_count');
211
+ }
212
+
213
+ /**
214
+ * Returns the `maybe_count` (Number of people who maybe going to the event) as int if present.
215
+ *
216
+ * @return int|null
217
+ */
218
+ public function getMaybeCount()
219
+ {
220
+ return $this->getField('maybe_count');
221
+ }
222
+
223
+ /**
224
+ * Returns the `noreply_count` (Number of people who did not reply to the event) as int if present.
225
+ *
226
+ * @return int|null
227
+ */
228
+ public function getNoreplyCount()
229
+ {
230
+ return $this->getField('noreply_count');
231
+ }
232
+
233
+ /**
234
+ * Returns the `invited_count` (Number of people invited to the event) as int if present.
235
+ *
236
+ * @return int|null
237
+ */
238
+ public function getInvitedCount()
239
+ {
240
+ return $this->getField('invited_count');
241
+ }
242
+ }
facebook/GraphNodes/GraphGroup.php ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphGroup
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphGroup extends GraphNode
32
+ {
33
+ /**
34
+ * @var array Maps object key names to GraphNode types.
35
+ */
36
+ protected static $graphObjectMap = [
37
+ 'cover' => '\Facebook\GraphNodes\GraphCoverPhoto',
38
+ 'venue' => '\Facebook\GraphNodes\GraphLocation',
39
+ ];
40
+
41
+ /**
42
+ * Returns the `id` (The Group ID) as string if present.
43
+ *
44
+ * @return string|null
45
+ */
46
+ public function getId()
47
+ {
48
+ return $this->getField('id');
49
+ }
50
+
51
+ /**
52
+ * Returns the `cover` (The cover photo of the Group) as GraphCoverPhoto if present.
53
+ *
54
+ * @return GraphCoverPhoto|null
55
+ */
56
+ public function getCover()
57
+ {
58
+ return $this->getField('cover');
59
+ }
60
+
61
+ /**
62
+ * Returns the `description` (A brief description of the Group) as string if present.
63
+ *
64
+ * @return string|null
65
+ */
66
+ public function getDescription()
67
+ {
68
+ return $this->getField('description');
69
+ }
70
+
71
+ /**
72
+ * Returns the `email` (The email address to upload content to the Group. Only current members of the Group can use this) as string if present.
73
+ *
74
+ * @return string|null
75
+ */
76
+ public function getEmail()
77
+ {
78
+ return $this->getField('email');
79
+ }
80
+
81
+ /**
82
+ * Returns the `icon` (The URL for the Group's icon) as string if present.
83
+ *
84
+ * @return string|null
85
+ */
86
+ public function getIcon()
87
+ {
88
+ return $this->getField('icon');
89
+ }
90
+
91
+ /**
92
+ * Returns the `link` (The Group's website) as string if present.
93
+ *
94
+ * @return string|null
95
+ */
96
+ public function getLink()
97
+ {
98
+ return $this->getField('link');
99
+ }
100
+
101
+ /**
102
+ * Returns the `name` (The name of the Group) as string if present.
103
+ *
104
+ * @return string|null
105
+ */
106
+ public function getName()
107
+ {
108
+ return $this->getField('name');
109
+ }
110
+
111
+ /**
112
+ * Returns the `member_request_count` (Number of people asking to join the group.) as int if present.
113
+ *
114
+ * @return int|null
115
+ */
116
+ public function getMemberRequestCount()
117
+ {
118
+ return $this->getField('member_request_count');
119
+ }
120
+
121
+ /**
122
+ * Returns the `owner` (The profile that created this Group) as GraphNode if present.
123
+ *
124
+ * @return GraphNode|null
125
+ */
126
+ public function getOwner()
127
+ {
128
+ return $this->getField('owner');
129
+ }
130
+
131
+ /**
132
+ * Returns the `parent` (The parent Group of this Group, if it exists) as GraphNode if present.
133
+ *
134
+ * @return GraphNode|null
135
+ */
136
+ public function getParent()
137
+ {
138
+ return $this->getField('parent');
139
+ }
140
+
141
+ /**
142
+ * Returns the `privacy` (The privacy setting of the Group) as string if present.
143
+ *
144
+ * @return string|null
145
+ */
146
+ public function getPrivacy()
147
+ {
148
+ return $this->getField('privacy');
149
+ }
150
+
151
+ /**
152
+ * Returns the `updated_time` (The last time the Group was updated (this includes changes in the Group's properties and changes in posts and comments if user can see them)) as \DateTime if present.
153
+ *
154
+ * @return \DateTime|null
155
+ */
156
+ public function getUpdatedTime()
157
+ {
158
+ return $this->getField('updated_time');
159
+ }
160
+
161
+ /**
162
+ * Returns the `venue` (The location for the Group) as GraphLocation if present.
163
+ *
164
+ * @return GraphLocation|null
165
+ */
166
+ public function getVenue()
167
+ {
168
+ return $this->getField('venue');
169
+ }
170
+
171
+ }
facebook/GraphNodes/GraphList.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphList
28
+ *
29
+ * @package Facebook
30
+ *
31
+ * @deprecated 5.0.0 GraphList has been renamed to GraphEdge
32
+ * @todo v6: Remove this class
33
+ */
34
+ class GraphList extends GraphEdge
35
+ {
36
+ }
facebook/GraphNodes/GraphLocation.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphLocation
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphLocation extends GraphNode
32
+ {
33
+ /**
34
+ * Returns the street component of the location
35
+ *
36
+ * @return string|null
37
+ */
38
+ public function getStreet()
39
+ {
40
+ return $this->getField('street');
41
+ }
42
+
43
+ /**
44
+ * Returns the city component of the location
45
+ *
46
+ * @return string|null
47
+ */
48
+ public function getCity()
49
+ {
50
+ return $this->getField('city');
51
+ }
52
+
53
+ /**
54
+ * Returns the state component of the location
55
+ *
56
+ * @return string|null
57
+ */
58
+ public function getState()
59
+ {
60
+ return $this->getField('state');
61
+ }
62
+
63
+ /**
64
+ * Returns the country component of the location
65
+ *
66
+ * @return string|null
67
+ */
68
+ public function getCountry()
69
+ {
70
+ return $this->getField('country');
71
+ }
72
+
73
+ /**
74
+ * Returns the zipcode component of the location
75
+ *
76
+ * @return string|null
77
+ */
78
+ public function getZip()
79
+ {
80
+ return $this->getField('zip');
81
+ }
82
+
83
+ /**
84
+ * Returns the latitude component of the location
85
+ *
86
+ * @return float|null
87
+ */
88
+ public function getLatitude()
89
+ {
90
+ return $this->getField('latitude');
91
+ }
92
+
93
+ /**
94
+ * Returns the street component of the location
95
+ *
96
+ * @return float|null
97
+ */
98
+ public function getLongitude()
99
+ {
100
+ return $this->getField('longitude');
101
+ }
102
+ }
facebook/GraphNodes/GraphNode.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphNode
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphNode extends Collection
32
+ {
33
+ /**
34
+ * @var array Maps object key names to Graph object types.
35
+ */
36
+ protected static $graphObjectMap = [];
37
+
38
+ /**
39
+ * Init this Graph object.
40
+ *
41
+ * @param array $data
42
+ */
43
+ public function __construct(array $data = [])
44
+ {
45
+ parent::__construct($this->castItems($data));
46
+ }
47
+
48
+ /**
49
+ * Iterates over an array and detects the types each node
50
+ * should be cast to and returns all the items as an array.
51
+ *
52
+ * @TODO Add auto-casting to AccessToken entities.
53
+ *
54
+ * @param array $data The array to iterate over.
55
+ *
56
+ * @return array
57
+ */
58
+ public function castItems(array $data)
59
+ {
60
+ $items = [];
61
+
62
+ foreach ($data as $k => $v) {
63
+ if ($this->shouldCastAsDateTime($k)
64
+ && (is_numeric($v)
65
+ || $k === 'birthday'
66
+ || $this->isIso8601DateString($v))
67
+ ) {
68
+ $items[$k] = $this->castToDateTime($v);
69
+ } else {
70
+ $items[$k] = $v;
71
+ }
72
+ }
73
+
74
+ return $items;
75
+ }
76
+
77
+ /**
78
+ * Uncasts any auto-casted datatypes.
79
+ * Basically the reverse of castItems().
80
+ *
81
+ * @return array
82
+ */
83
+ public function uncastItems()
84
+ {
85
+ $items = $this->asArray();
86
+
87
+ return array_map(function ($v) {
88
+ if ($v instanceof \DateTime) {
89
+ return $v->format(\DateTime::ISO8601);
90
+ }
91
+
92
+ return $v;
93
+ }, $items);
94
+ }
95
+
96
+ /**
97
+ * Get the collection of items as JSON.
98
+ *
99
+ * @param int $options
100
+ *
101
+ * @return string
102
+ */
103
+ public function asJson($options = 0)
104
+ {
105
+ return json_encode($this->uncastItems(), $options);
106
+ }
107
+
108
+ /**
109
+ * Detects an ISO 8601 formatted string.
110
+ *
111
+ * @param string $string
112
+ *
113
+ * @return boolean
114
+ *
115
+ * @see https://developers.facebook.com/docs/graph-api/using-graph-api/#readmodifiers
116
+ * @see http://www.cl.cam.ac.uk/~mgk25/iso-time.html
117
+ * @see http://en.wikipedia.org/wiki/ISO_8601
118
+ */
119
+ public function isIso8601DateString($string)
120
+ {
121
+ // This insane regex was yoinked from here:
122
+ // http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
123
+ // ...and I'm all like:
124
+ // http://thecodinglove.com/post/95378251969/when-code-works-and-i-dont-know-why
125
+ $crazyInsaneRegexThatSomehowDetectsIso8601 = '/^([\+-]?\d{4}(?!\d{2}\b))'
126
+ . '((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?'
127
+ . '|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d'
128
+ . '|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])'
129
+ . '((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d'
130
+ . '([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/';
131
+
132
+ return preg_match($crazyInsaneRegexThatSomehowDetectsIso8601, $string) === 1;
133
+ }
134
+
135
+ /**
136
+ * Determines if a value from Graph should be cast to DateTime.
137
+ *
138
+ * @param string $key
139
+ *
140
+ * @return boolean
141
+ */
142
+ public function shouldCastAsDateTime($key)
143
+ {
144
+ return in_array($key, [
145
+ 'created_time',
146
+ 'updated_time',
147
+ 'start_time',
148
+ 'end_time',
149
+ 'backdated_time',
150
+ 'issued_at',
151
+ 'expires_at',
152
+ 'birthday',
153
+ 'publish_time'
154
+ ], true);
155
+ }
156
+
157
+ /**
158
+ * Casts a date value from Graph to DateTime.
159
+ *
160
+ * @param int|string $value
161
+ *
162
+ * @return \DateTime
163
+ */
164
+ public function castToDateTime($value)
165
+ {
166
+ if (is_int($value)) {
167
+ $dt = new \DateTime();
168
+ $dt->setTimestamp($value);
169
+ } else {
170
+ $dt = new \DateTime($value);
171
+ }
172
+
173
+ return $dt;
174
+ }
175
+
176
+ /**
177
+ * Getter for $graphObjectMap.
178
+ *
179
+ * @return array
180
+ */
181
+ public static function getObjectMap()
182
+ {
183
+ return static::$graphObjectMap;
184
+ }
185
+ }
facebook/GraphNodes/GraphNodeFactory.php ADDED
@@ -0,0 +1,392 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ use Facebook\FacebookResponse;
27
+ use Facebook\Exceptions\FacebookSDKException;
28
+
29
+ /**
30
+ * Class GraphNodeFactory
31
+ *
32
+ * @package Facebook
33
+ *
34
+ * ## Assumptions ##
35
+ * GraphEdge - is ALWAYS a numeric array
36
+ * GraphEdge - is ALWAYS an array of GraphNode types
37
+ * GraphNode - is ALWAYS an associative array
38
+ * GraphNode - MAY contain GraphNode's "recurrable"
39
+ * GraphNode - MAY contain GraphEdge's "recurrable"
40
+ * GraphNode - MAY contain DateTime's "primitives"
41
+ * GraphNode - MAY contain string's "primitives"
42
+ */
43
+ class GraphNodeFactory
44
+ {
45
+ /**
46
+ * @const string The base graph object class.
47
+ */
48
+ const BASE_GRAPH_NODE_CLASS = '\Facebook\GraphNodes\GraphNode';
49
+
50
+ /**
51
+ * @const string The base graph edge class.
52
+ */
53
+ const BASE_GRAPH_EDGE_CLASS = '\Facebook\GraphNodes\GraphEdge';
54
+
55
+ /**
56
+ * @const string The graph object prefix.
57
+ */
58
+ const BASE_GRAPH_OBJECT_PREFIX = '\Facebook\GraphNodes\\';
59
+
60
+ /**
61
+ * @var FacebookResponse The response entity from Graph.
62
+ */
63
+ protected $response;
64
+
65
+ /**
66
+ * @var array The decoded body of the FacebookResponse entity from Graph.
67
+ */
68
+ protected $decodedBody;
69
+
70
+ /**
71
+ * Init this Graph object.
72
+ *
73
+ * @param FacebookResponse $response The response entity from Graph.
74
+ */
75
+ public function __construct(FacebookResponse $response)
76
+ {
77
+ $this->response = $response;
78
+ $this->decodedBody = $response->getDecodedBody();
79
+ }
80
+
81
+ /**
82
+ * Tries to convert a FacebookResponse entity into a GraphNode.
83
+ *
84
+ * @param string|null $subclassName The GraphNode sub class to cast to.
85
+ *
86
+ * @return GraphNode
87
+ *
88
+ * @throws FacebookSDKException
89
+ */
90
+ public function makeGraphNode($subclassName = null)
91
+ {
92
+ $this->validateResponseAsArray();
93
+ $this->validateResponseCastableAsGraphNode();
94
+
95
+ return $this->castAsGraphNodeOrGraphEdge($this->decodedBody, $subclassName);
96
+ }
97
+
98
+ /**
99
+ * Convenience method for creating a GraphAchievement collection.
100
+ *
101
+ * @return GraphAchievement
102
+ *
103
+ * @throws FacebookSDKException
104
+ */
105
+ public function makeGraphAchievement()
106
+ {
107
+ return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphAchievement');
108
+ }
109
+
110
+ /**
111
+ * Convenience method for creating a GraphAlbum collection.
112
+ *
113
+ * @return GraphAlbum
114
+ *
115
+ * @throws FacebookSDKException
116
+ */
117
+ public function makeGraphAlbum()
118
+ {
119
+ return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphAlbum');
120
+ }
121
+
122
+ /**
123
+ * Convenience method for creating a GraphPage collection.
124
+ *
125
+ * @return GraphPage
126
+ *
127
+ * @throws FacebookSDKException
128
+ */
129
+ public function makeGraphPage()
130
+ {
131
+ return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphPage');
132
+ }
133
+
134
+ /**
135
+ * Convenience method for creating a GraphSessionInfo collection.
136
+ *
137
+ * @return GraphSessionInfo
138
+ *
139
+ * @throws FacebookSDKException
140
+ */
141
+ public function makeGraphSessionInfo()
142
+ {
143
+ return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphSessionInfo');
144
+ }
145
+
146
+ /**
147
+ * Convenience method for creating a GraphUser collection.
148
+ *
149
+ * @return GraphUser
150
+ *
151
+ * @throws FacebookSDKException
152
+ */
153
+ public function makeGraphUser()
154
+ {
155
+ return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphUser');
156
+ }
157
+
158
+ /**
159
+ * Convenience method for creating a GraphEvent collection.
160
+ *
161
+ * @return GraphEvent
162
+ *
163
+ * @throws FacebookSDKException
164
+ */
165
+ public function makeGraphEvent()
166
+ {
167
+ return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphEvent');
168
+ }
169
+
170
+ /**
171
+ * Convenience method for creating a GraphGroup collection.
172
+ *
173
+ * @return GraphGroup
174
+ *
175
+ * @throws FacebookSDKException
176
+ */
177
+ public function makeGraphGroup()
178
+ {
179
+ return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphGroup');
180
+ }
181
+
182
+ /**
183
+ * Tries to convert a FacebookResponse entity into a GraphEdge.
184
+ *
185
+ * @param string|null $subclassName The GraphNode sub class to cast the list items to.
186
+ * @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
187
+ *
188
+ * @return GraphEdge
189
+ *
190
+ * @throws FacebookSDKException
191
+ */
192
+ public function makeGraphEdge($subclassName = null, $auto_prefix = true)
193
+ {
194
+ $this->validateResponseAsArray();
195
+ $this->validateResponseCastableAsGraphEdge();
196
+
197
+ if ($subclassName && $auto_prefix) {
198
+ $subclassName = static::BASE_GRAPH_OBJECT_PREFIX . $subclassName;
199
+ }
200
+
201
+ return $this->castAsGraphNodeOrGraphEdge($this->decodedBody, $subclassName);
202
+ }
203
+
204
+ /**
205
+ * Validates the decoded body.
206
+ *
207
+ * @throws FacebookSDKException
208
+ */
209
+ public function validateResponseAsArray()
210
+ {
211
+ if (!is_array($this->decodedBody)) {
212
+ throw new FacebookSDKException('Unable to get response from Graph as array.', 620);
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Validates that the return data can be cast as a GraphNode.
218
+ *
219
+ * @throws FacebookSDKException
220
+ */
221
+ public function validateResponseCastableAsGraphNode()
222
+ {
223
+ if (isset($this->decodedBody['data']) && static::isCastableAsGraphEdge($this->decodedBody['data'])) {
224
+ throw new FacebookSDKException(
225
+ 'Unable to convert response from Graph to a GraphNode because the response looks like a GraphEdge. Try using GraphNodeFactory::makeGraphEdge() instead.',
226
+ 620
227
+ );
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Validates that the return data can be cast as a GraphEdge.
233
+ *
234
+ * @throws FacebookSDKException
235
+ */
236
+ public function validateResponseCastableAsGraphEdge()
237
+ {
238
+ if (!(isset($this->decodedBody['data']) && static::isCastableAsGraphEdge($this->decodedBody['data']))) {
239
+ throw new FacebookSDKException(
240
+ 'Unable to convert response from Graph to a GraphEdge because the response does not look like a GraphEdge. Try using GraphNodeFactory::makeGraphNode() instead.',
241
+ 620
242
+ );
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Safely instantiates a GraphNode of $subclassName.
248
+ *
249
+ * @param array $data The array of data to iterate over.
250
+ * @param string|null $subclassName The subclass to cast this collection to.
251
+ *
252
+ * @return GraphNode
253
+ *
254
+ * @throws FacebookSDKException
255
+ */
256
+ public function safelyMakeGraphNode(array $data, $subclassName = null)
257
+ {
258
+ $subclassName = $subclassName ?: static::BASE_GRAPH_NODE_CLASS;
259
+ static::validateSubclass($subclassName);
260
+
261
+ // Remember the parent node ID
262
+ $parentNodeId = isset($data['id']) ? $data['id'] : null;
263
+
264
+ $items = [];
265
+
266
+ foreach ($data as $k => $v) {
267
+ // Array means could be recurable
268
+ if (is_array($v)) {
269
+ // Detect any smart-casting from the $graphObjectMap array.
270
+ // This is always empty on the GraphNode collection, but subclasses can define
271
+ // their own array of smart-casting types.
272
+ $graphObjectMap = $subclassName::getObjectMap();
273
+ $objectSubClass = isset($graphObjectMap[$k])
274
+ ? $graphObjectMap[$k]
275
+ : null;
276
+
277
+ // Could be a GraphEdge or GraphNode
278
+ $items[$k] = $this->castAsGraphNodeOrGraphEdge($v, $objectSubClass, $k, $parentNodeId);
279
+ } else {
280
+ $items[$k] = $v;
281
+ }
282
+ }
283
+
284
+ return new $subclassName($items);
285
+ }
286
+
287
+ /**
288
+ * Takes an array of values and determines how to cast each node.
289
+ *
290
+ * @param array $data The array of data to iterate over.
291
+ * @param string|null $subclassName The subclass to cast this collection to.
292
+ * @param string|null $parentKey The key of this data (Graph edge).
293
+ * @param string|null $parentNodeId The parent Graph node ID.
294
+ *
295
+ * @return GraphNode|GraphEdge
296
+ *
297
+ * @throws FacebookSDKException
298
+ */
299
+ public function castAsGraphNodeOrGraphEdge(array $data, $subclassName = null, $parentKey = null, $parentNodeId = null)
300
+ {
301
+ if (isset($data['data'])) {
302
+ // Create GraphEdge
303
+ if (static::isCastableAsGraphEdge($data['data'])) {
304
+ return $this->safelyMakeGraphEdge($data, $subclassName, $parentKey, $parentNodeId);
305
+ }
306
+ // Sometimes Graph is a weirdo and returns a GraphNode under the "data" key
307
+ $data = $data['data'];
308
+ }
309
+
310
+ // Create GraphNode
311
+ return $this->safelyMakeGraphNode($data, $subclassName);
312
+ }
313
+
314
+ /**
315
+ * Return an array of GraphNode's.
316
+ *
317
+ * @param array $data The array of data to iterate over.
318
+ * @param string|null $subclassName The GraphNode subclass to cast each item in the list to.
319
+ * @param string|null $parentKey The key of this data (Graph edge).
320
+ * @param string|null $parentNodeId The parent Graph node ID.
321
+ *
322
+ * @return GraphEdge
323
+ *
324
+ * @throws FacebookSDKException
325
+ */
326
+ public function safelyMakeGraphEdge(array $data, $subclassName = null, $parentKey = null, $parentNodeId = null)
327
+ {
328
+ if (!isset($data['data'])) {
329
+ throw new FacebookSDKException('Cannot cast data to GraphEdge. Expected a "data" key.', 620);
330
+ }
331
+
332
+ $dataList = [];
333
+ foreach ($data['data'] as $graphNode) {
334
+ $dataList[] = $this->safelyMakeGraphNode($graphNode, $subclassName);
335
+ }
336
+
337
+ $metaData = $this->getMetaData($data);
338
+
339
+ // We'll need to make an edge endpoint for this in case it's a GraphEdge (for cursor pagination)
340
+ $parentGraphEdgeEndpoint = $parentNodeId && $parentKey ? '/' . $parentNodeId . '/' . $parentKey : null;
341
+ $className = static::BASE_GRAPH_EDGE_CLASS;
342
+
343
+ return new $className($this->response->getRequest(), $dataList, $metaData, $parentGraphEdgeEndpoint, $subclassName);
344
+ }
345
+
346
+ /**
347
+ * Get the meta data from a list in a Graph response.
348
+ *
349
+ * @param array $data The Graph response.
350
+ *
351
+ * @return array
352
+ */
353
+ public function getMetaData(array $data)
354
+ {
355
+ unset($data['data']);
356
+
357
+ return $data;
358
+ }
359
+
360
+ /**
361
+ * Determines whether or not the data should be cast as a GraphEdge.
362
+ *
363
+ * @param array $data
364
+ *
365
+ * @return boolean
366
+ */
367
+ public static function isCastableAsGraphEdge(array $data)
368
+ {
369
+ if ($data === []) {
370
+ return true;
371
+ }
372
+
373
+ // Checks for a sequential numeric array which would be a GraphEdge
374
+ return array_keys($data) === range(0, count($data) - 1);
375
+ }
376
+
377
+ /**
378
+ * Ensures that the subclass in question is valid.
379
+ *
380
+ * @param string $subclassName The GraphNode subclass to validate.
381
+ *
382
+ * @throws FacebookSDKException
383
+ */
384
+ public static function validateSubclass($subclassName)
385
+ {
386
+ if ($subclassName == static::BASE_GRAPH_NODE_CLASS || is_subclass_of($subclassName, static::BASE_GRAPH_NODE_CLASS)) {
387
+ return;
388
+ }
389
+
390
+ throw new FacebookSDKException('The given subclass "' . $subclassName . '" is not valid. Cannot cast to an object that is not a GraphNode subclass.', 620);
391
+ }
392
+ }
facebook/GraphNodes/GraphObject.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphObject
28
+ *
29
+ * @package Facebook
30
+ *
31
+ * @deprecated 5.0.0 GraphObject has been renamed to GraphNode
32
+ * @todo v6: Remove this class
33
+ */
34
+ class GraphObject extends GraphNode
35
+ {
36
+ }
facebook/GraphNodes/GraphObjectFactory.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ /**
29
+ * Class GraphObjectFactory
30
+ *
31
+ * @package Facebook
32
+ *
33
+ * @deprecated 5.0.0 GraphObjectFactory has been renamed to GraphNodeFactory
34
+ * @todo v6: Remove this class
35
+ */
36
+ class GraphObjectFactory extends GraphNodeFactory
37
+ {
38
+ /**
39
+ * @const string The base graph object class.
40
+ */
41
+ const BASE_GRAPH_NODE_CLASS = '\Facebook\GraphNodes\GraphObject';
42
+
43
+ /**
44
+ * @const string The base graph edge class.
45
+ */
46
+ const BASE_GRAPH_EDGE_CLASS = '\Facebook\GraphNodes\GraphList';
47
+
48
+ /**
49
+ * Tries to convert a FacebookResponse entity into a GraphNode.
50
+ *
51
+ * @param string|null $subclassName The GraphNode sub class to cast to.
52
+ *
53
+ * @return GraphNode
54
+ *
55
+ * @deprecated 5.0.0 GraphObjectFactory has been renamed to GraphNodeFactory
56
+ */
57
+ public function makeGraphObject($subclassName = null)
58
+ {
59
+ return $this->makeGraphNode($subclassName);
60
+ }
61
+
62
+ /**
63
+ * Convenience method for creating a GraphEvent collection.
64
+ *
65
+ * @return GraphEvent
66
+ *
67
+ * @throws FacebookSDKException
68
+ */
69
+ public function makeGraphEvent()
70
+ {
71
+ return $this->makeGraphObject(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphEvent');
72
+ }
73
+
74
+ /**
75
+ * Tries to convert a FacebookResponse entity into a GraphEdge.
76
+ *
77
+ * @param string|null $subclassName The GraphNode sub class to cast the list items to.
78
+ * @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
79
+ *
80
+ * @return GraphEdge
81
+ *
82
+ * @deprecated 5.0.0 GraphObjectFactory has been renamed to GraphNodeFactory
83
+ */
84
+ public function makeGraphList($subclassName = null, $auto_prefix = true)
85
+ {
86
+ return $this->makeGraphEdge($subclassName, $auto_prefix);
87
+ }
88
+ }
facebook/GraphNodes/GraphPage.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphPage
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphPage extends GraphNode
32
+ {
33
+ /**
34
+ * @var array Maps object key names to Graph object types.
35
+ */
36
+ protected static $graphObjectMap = [
37
+ 'best_page' => '\Facebook\GraphNodes\GraphPage',
38
+ 'global_brand_parent_page' => '\Facebook\GraphNodes\GraphPage',
39
+ 'location' => '\Facebook\GraphNodes\GraphLocation',
40
+ ];
41
+
42
+ /**
43
+ * Returns the ID for the user's page as a string if present.
44
+ *
45
+ * @return string|null
46
+ */
47
+ public function getId()
48
+ {
49
+ return $this->getField('id');
50
+ }
51
+
52
+ /**
53
+ * Returns the Category for the user's page as a string if present.
54
+ *
55
+ * @return string|null
56
+ */
57
+ public function getCategory()
58
+ {
59
+ return $this->getField('category');
60
+ }
61
+
62
+ /**
63
+ * Returns the Name of the user's page as a string if present.
64
+ *
65
+ * @return string|null
66
+ */
67
+ public function getName()
68
+ {
69
+ return $this->getField('name');
70
+ }
71
+
72
+ /**
73
+ * Returns the best available Page on Facebook.
74
+ *
75
+ * @return GraphPage|null
76
+ */
77
+ public function getBestPage()
78
+ {
79
+ return $this->getField('best_page');
80
+ }
81
+
82
+ /**
83
+ * Returns the brand's global (parent) Page.
84
+ *
85
+ * @return GraphPage|null
86
+ */
87
+ public function getGlobalBrandParentPage()
88
+ {
89
+ return $this->getField('global_brand_parent_page');
90
+ }
91
+
92
+ /**
93
+ * Returns the location of this place.
94
+ *
95
+ * @return GraphLocation|null
96
+ */
97
+ public function getLocation()
98
+ {
99
+ return $this->getField('location');
100
+ }
101
+
102
+ /**
103
+ * Returns the page access token for the admin user.
104
+ *
105
+ * Only available in the `/me/accounts` context.
106
+ *
107
+ * @return string|null
108
+ */
109
+ public function getAccessToken()
110
+ {
111
+ return $this->getField('access_token');
112
+ }
113
+
114
+ /**
115
+ * Returns the roles of the page admin user.
116
+ *
117
+ * Only available in the `/me/accounts` context.
118
+ *
119
+ * @return array|null
120
+ */
121
+ public function getPerms()
122
+ {
123
+ return $this->getField('perms');
124
+ }
125
+ }
facebook/GraphNodes/GraphPicture.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphPicture
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphPicture extends GraphNode
32
+ {
33
+ /**
34
+ * Returns true if user picture is silhouette.
35
+ *
36
+ * @return bool|null
37
+ */
38
+ public function isSilhouette()
39
+ {
40
+ return $this->getField('is_silhouette');
41
+ }
42
+
43
+ /**
44
+ * Returns the url of user picture if it exists
45
+ *
46
+ * @return string|null
47
+ */
48
+ public function getUrl()
49
+ {
50
+ return $this->getField('url');
51
+ }
52
+
53
+ /**
54
+ * Returns the width of user picture if it exists
55
+ *
56
+ * @return int|null
57
+ */
58
+ public function getWidth()
59
+ {
60
+ return $this->getField('width');
61
+ }
62
+
63
+ /**
64
+ * Returns the height of user picture if it exists
65
+ *
66
+ * @return int|null
67
+ */
68
+ public function getHeight()
69
+ {
70
+ return $this->getField('height');
71
+ }
72
+ }
facebook/GraphNodes/GraphSessionInfo.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphSessionInfo
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphSessionInfo extends GraphNode
32
+ {
33
+ /**
34
+ * Returns the application id the token was issued for.
35
+ *
36
+ * @return string|null
37
+ */
38
+ public function getAppId()
39
+ {
40
+ return $this->getField('app_id');
41
+ }
42
+
43
+ /**
44
+ * Returns the application name the token was issued for.
45
+ *
46
+ * @return string|null
47
+ */
48
+ public function getApplication()
49
+ {
50
+ return $this->getField('application');
51
+ }
52
+
53
+ /**
54
+ * Returns the date & time that the token expires.
55
+ *
56
+ * @return \DateTime|null
57
+ */
58
+ public function getExpiresAt()
59
+ {
60
+ return $this->getField('expires_at');
61
+ }
62
+
63
+ /**
64
+ * Returns whether the token is valid.
65
+ *
66
+ * @return boolean
67
+ */
68
+ public function getIsValid()
69
+ {
70
+ return $this->getField('is_valid');
71
+ }
72
+
73
+ /**
74
+ * Returns the date & time the token was issued at.
75
+ *
76
+ * @return \DateTime|null
77
+ */
78
+ public function getIssuedAt()
79
+ {
80
+ return $this->getField('issued_at');
81
+ }
82
+
83
+ /**
84
+ * Returns the scope permissions associated with the token.
85
+ *
86
+ * @return array
87
+ */
88
+ public function getScopes()
89
+ {
90
+ return $this->getField('scopes');
91
+ }
92
+
93
+ /**
94
+ * Returns the login id of the user associated with the token.
95
+ *
96
+ * @return string|null
97
+ */
98
+ public function getUserId()
99
+ {
100
+ return $this->getField('user_id');
101
+ }
102
+ }
facebook/GraphNodes/GraphUser.php ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\GraphNodes;
25
+
26
+ /**
27
+ * Class GraphUser
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphUser extends GraphNode
32
+ {
33
+ /**
34
+ * @var array Maps object key names to Graph object types.
35
+ */
36
+ protected static $graphObjectMap = [
37
+ 'hometown' => '\Facebook\GraphNodes\GraphPage',
38
+ 'location' => '\Facebook\GraphNodes\GraphPage',
39
+ 'significant_other' => '\Facebook\GraphNodes\GraphUser',
40
+ 'picture' => '\Facebook\GraphNodes\GraphPicture',
41
+ ];
42
+
43
+ /**
44
+ * Returns the ID for the user as a string if present.
45
+ *
46
+ * @return string|null
47
+ */
48
+ public function getId()
49
+ {
50
+ return $this->getField('id');
51
+ }
52
+
53
+ /**
54
+ * Returns the name for the user as a string if present.
55
+ *
56
+ * @return string|null
57
+ */
58
+ public function getName()
59
+ {
60
+ return $this->getField('name');
61
+ }
62
+
63
+ /**
64
+ * Returns the first name for the user as a string if present.
65
+ *
66
+ * @return string|null
67
+ */
68
+ public function getFirstName()
69
+ {
70
+ return $this->getField('first_name');
71
+ }
72
+
73
+ /**
74
+ * Returns the middle name for the user as a string if present.
75
+ *
76
+ * @return string|null
77
+ */
78
+ public function getMiddleName()
79
+ {
80
+ return $this->getField('middle_name');
81
+ }
82
+
83
+ /**
84
+ * Returns the last name for the user as a string if present.
85
+ *
86
+ * @return string|null
87
+ */
88
+ public function getLastName()
89
+ {
90
+ return $this->getField('last_name');
91
+ }
92
+
93
+ /**
94
+ * Returns the gender for the user as a string if present.
95
+ *
96
+ * @return string|null
97
+ */
98
+ public function getGender()
99
+ {
100
+ return $this->getField('gender');
101
+ }
102
+
103
+ /**
104
+ * Returns the Facebook URL for the user as a string if available.
105
+ *
106
+ * @return string|null
107
+ */
108
+ public function getLink()
109
+ {
110
+ return $this->getField('link');
111
+ }
112
+
113
+ /**
114
+ * Returns the users birthday, if available.
115
+ *
116
+ * @return \DateTime|null
117
+ */
118
+ public function getBirthday()
119
+ {
120
+ return $this->getField('birthday');
121
+ }
122
+
123
+ /**
124
+ * Returns the current location of the user as a GraphPage.
125
+ *
126
+ * @return GraphPage|null
127
+ */
128
+ public function getLocation()
129
+ {
130
+ return $this->getField('location');
131
+ }
132
+
133
+ /**
134
+ * Returns the current location of the user as a GraphPage.
135
+ *
136
+ * @return GraphPage|null
137
+ */
138
+ public function getHometown()
139
+ {
140
+ return $this->getField('hometown');
141
+ }
142
+
143
+ /**
144
+ * Returns the current location of the user as a GraphUser.
145
+ *
146
+ * @return GraphUser|null
147
+ */
148
+ public function getSignificantOther()
149
+ {
150
+ return $this->getField('significant_other');
151
+ }
152
+
153
+ /**
154
+ * Returns the picture of the user as a GraphPicture
155
+ *
156
+ * @return GraphPicture|null
157
+ */
158
+ public function getPicture()
159
+ {
160
+ return $this->getField('picture');
161
+ }
162
+ }
facebook/Helpers/FacebookCanvasHelper.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Helpers;
25
+
26
+ /**
27
+ * Class FacebookCanvasLoginHelper
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookCanvasHelper extends FacebookSignedRequestFromInputHelper
32
+ {
33
+ /**
34
+ * Returns the app data value.
35
+ *
36
+ * @return mixed|null
37
+ */
38
+ public function getAppData()
39
+ {
40
+ return $this->signedRequest ? $this->signedRequest->get('app_data') : null;
41
+ }
42
+
43
+ /**
44
+ * Get raw signed request from POST.
45
+ *
46
+ * @return string|null
47
+ */
48
+ public function getRawSignedRequest()
49
+ {
50
+ return $this->getRawSignedRequestFromPost() ?: null;
51
+ }
52
+ }
facebook/Helpers/FacebookJavaScriptHelper.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Helpers;
25
+
26
+ /**
27
+ * Class FacebookJavaScriptLoginHelper
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookJavaScriptHelper extends FacebookSignedRequestFromInputHelper
32
+ {
33
+ /**
34
+ * Get raw signed request from the cookie.
35
+ *
36
+ * @return string|null
37
+ */
38
+ public function getRawSignedRequest()
39
+ {
40
+ return $this->getRawSignedRequestFromCookie();
41
+ }
42
+ }
facebook/Helpers/FacebookPageTabHelper.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Helpers;
25
+
26
+ use Facebook\FacebookApp;
27
+ use Facebook\FacebookClient;
28
+
29
+ /**
30
+ * Class FacebookPageTabHelper
31
+ *
32
+ * @package Facebook
33
+ */
34
+ class FacebookPageTabHelper extends FacebookCanvasHelper
35
+ {
36
+ /**
37
+ * @var array|null
38
+ */
39
+ protected $pageData;
40
+
41
+ /**
42
+ * Initialize the helper and process available signed request data.
43
+ *
44
+ * @param FacebookApp $app The FacebookApp entity.
45
+ * @param FacebookClient $client The client to make HTTP requests.
46
+ * @param string|null $graphVersion The version of Graph to use.
47
+ */
48
+ public function __construct(FacebookApp $app, FacebookClient $client, $graphVersion = null)
49
+ {
50
+ parent::__construct($app, $client, $graphVersion);
51
+
52
+ if (!$this->signedRequest) {
53
+ return;
54
+ }
55
+
56
+ $this->pageData = $this->signedRequest->get('page');
57
+ }
58
+
59
+ /**
60
+ * Returns a value from the page data.
61
+ *
62
+ * @param string $key
63
+ * @param mixed|null $default
64
+ *
65
+ * @return mixed|null
66
+ */
67
+ public function getPageData($key, $default = null)
68
+ {
69
+ if (isset($this->pageData[$key])) {
70
+ return $this->pageData[$key];
71
+ }
72
+
73
+ return $default;
74
+ }
75
+
76
+ /**
77
+ * Returns true if the user is an admin.
78
+ *
79
+ * @return boolean
80
+ */
81
+ public function isAdmin()
82
+ {
83
+ return $this->getPageData('admin') === true;
84
+ }
85
+
86
+ /**
87
+ * Returns the page id if available.
88
+ *
89
+ * @return string|null
90
+ */
91
+ public function getPageId()
92
+ {
93
+ return $this->getPageData('id');
94
+ }
95
+ }
facebook/Helpers/FacebookRedirectLoginHelper.php ADDED
@@ -0,0 +1,360 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Helpers;
25
+
26
+ use Facebook\Authentication\AccessToken;
27
+ use Facebook\Authentication\OAuth2Client;
28
+ use Facebook\Url\UrlDetectionInterface;
29
+ use Facebook\Url\FacebookUrlDetectionHandler;
30
+ use Facebook\Url\FacebookUrlManipulator;
31
+ use Facebook\PersistentData\PersistentDataInterface;
32
+ use Facebook\PersistentData\FacebookSessionPersistentDataHandler;
33
+ use Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface;
34
+ use Facebook\PseudoRandomString\McryptPseudoRandomStringGenerator;
35
+ use Facebook\PseudoRandomString\OpenSslPseudoRandomStringGenerator;
36
+ use Facebook\PseudoRandomString\UrandomPseudoRandomStringGenerator;
37
+ use Facebook\Exceptions\FacebookSDKException;
38
+
39
+ /**
40
+ * Class FacebookRedirectLoginHelper
41
+ *
42
+ * @package Facebook
43
+ */
44
+ class FacebookRedirectLoginHelper
45
+ {
46
+ /**
47
+ * @const int The length of CSRF string to validate the login link.
48
+ */
49
+ const CSRF_LENGTH = 32;
50
+
51
+ /**
52
+ * @var OAuth2Client The OAuth 2.0 client service.
53
+ */
54
+ protected $oAuth2Client;
55
+
56
+ /**
57
+ * @var UrlDetectionInterface The URL detection handler.
58
+ */
59
+ protected $urlDetectionHandler;
60
+
61
+ /**
62
+ * @var PersistentDataInterface The persistent data handler.
63
+ */
64
+ protected $persistentDataHandler;
65
+
66
+ /**
67
+ * @var PseudoRandomStringGeneratorInterface The cryptographically secure pseudo-random string generator.
68
+ */
69
+ protected $pseudoRandomStringGenerator;
70
+
71
+ /**
72
+ * @param OAuth2Client $oAuth2Client The OAuth 2.0 client service.
73
+ * @param PersistentDataInterface|null $persistentDataHandler The persistent data handler.
74
+ * @param UrlDetectionInterface|null $urlHandler The URL detection handler.
75
+ * @param PseudoRandomStringGeneratorInterface|null $prsg The cryptographically secure pseudo-random string generator.
76
+ */
77
+ public function __construct(OAuth2Client $oAuth2Client, PersistentDataInterface $persistentDataHandler = null, UrlDetectionInterface $urlHandler = null, PseudoRandomStringGeneratorInterface $prsg = null)
78
+ {
79
+ $this->oAuth2Client = $oAuth2Client;
80
+ $this->persistentDataHandler = $persistentDataHandler ?: new FacebookSessionPersistentDataHandler();
81
+ $this->urlDetectionHandler = $urlHandler ?: new FacebookUrlDetectionHandler();
82
+ $this->pseudoRandomStringGenerator = $prsg ?: $this->detectPseudoRandomStringGenerator();
83
+ }
84
+
85
+ /**
86
+ * Returns the persistent data handler.
87
+ *
88
+ * @return PersistentDataInterface
89
+ */
90
+ public function getPersistentDataHandler()
91
+ {
92
+ return $this->persistentDataHandler;
93
+ }
94
+
95
+ /**
96
+ * Returns the URL detection handler.
97
+ *
98
+ * @return UrlDetectionInterface
99
+ */
100
+ public function getUrlDetectionHandler()
101
+ {
102
+ return $this->urlDetectionHandler;
103
+ }
104
+
105
+ /**
106
+ * Returns the cryptographically secure pseudo-random string generator.
107
+ *
108
+ * @return PseudoRandomStringGeneratorInterface
109
+ */
110
+ public function getPseudoRandomStringGenerator()
111
+ {
112
+ return $this->pseudoRandomStringGenerator;
113
+ }
114
+
115
+ /**
116
+ * Detects which pseudo-random string generator to use.
117
+ *
118
+ * @return PseudoRandomStringGeneratorInterface
119
+ *
120
+ * @throws FacebookSDKException
121
+ */
122
+ public function detectPseudoRandomStringGenerator()
123
+ {
124
+ // Since openssl_random_pseudo_bytes() can sometimes return non-cryptographically
125
+ // secure pseudo-random strings (in rare cases), we check for mcrypt_create_iv() first.
126
+ if (function_exists('mcrypt_create_iv')) {
127
+ return new McryptPseudoRandomStringGenerator();
128
+ }
129
+
130
+ if (function_exists('openssl_random_pseudo_bytes')) {
131
+ return new OpenSslPseudoRandomStringGenerator();
132
+ }
133
+
134
+ if (!ini_get('open_basedir') && is_readable('/dev/urandom')) {
135
+ return new UrandomPseudoRandomStringGenerator();
136
+ }
137
+
138
+ throw new FacebookSDKException('Unable to detect a cryptographically secure pseudo-random string generator.');
139
+ }
140
+
141
+ /**
142
+ * Stores CSRF state and returns a URL to which the user should be sent to in order to continue the login process with Facebook.
143
+ *
144
+ * @param string $redirectUrl The URL Facebook should redirect users to after login.
145
+ * @param array $scope List of permissions to request during login.
146
+ * @param array $params An array of parameters to generate URL.
147
+ * @param string $separator The separator to use in http_build_query().
148
+ *
149
+ * @return string
150
+ */
151
+ private function makeUrl($redirectUrl, array $scope, array $params = [], $separator = '&')
152
+ {
153
+ $state = $this->pseudoRandomStringGenerator->getPseudoRandomString(static::CSRF_LENGTH);
154
+ $this->persistentDataHandler->set('state', $state);
155
+
156
+ return $this->oAuth2Client->getAuthorizationUrl($redirectUrl, $state, $scope, $params, $separator);
157
+ }
158
+
159
+ /**
160
+ * Returns the URL to send the user in order to login to Facebook.
161
+ *
162
+ * @param string $redirectUrl The URL Facebook should redirect users to after login.
163
+ * @param array $scope List of permissions to request during login.
164
+ * @param string $separator The separator to use in http_build_query().
165
+ *
166
+ * @return string
167
+ */
168
+ public function getLoginUrl($redirectUrl, array $scope = [], $separator = '&')
169
+ {
170
+ return $this->makeUrl($redirectUrl, $scope, [], $separator);
171
+ }
172
+
173
+ /**
174
+ * Returns the URL to send the user in order to log out of Facebook.
175
+ *
176
+ * @param AccessToken|string $accessToken The access token that will be logged out.
177
+ * @param string $next The url Facebook should redirect the user to after a successful logout.
178
+ * @param string $separator The separator to use in http_build_query().
179
+ *
180
+ * @return string
181
+ *
182
+ * @throws FacebookSDKException
183
+ */
184
+ public function getLogoutUrl($accessToken, $next, $separator = '&')
185
+ {
186
+ if (!$accessToken instanceof AccessToken) {
187
+ $accessToken = new AccessToken($accessToken);
188
+ }
189
+
190
+ if ($accessToken->isAppAccessToken()) {
191
+ throw new FacebookSDKException('Cannot generate a logout URL with an app access token.', 722);
192
+ }
193
+
194
+ $params = [
195
+ 'next' => $next,
196
+ 'access_token' => $accessToken->getValue(),
197
+ ];
198
+
199
+ return 'https://www.facebook.com/logout.php?' . http_build_query($params, null, $separator);
200
+ }
201
+
202
+ /**
203
+ * Returns the URL to send the user in order to login to Facebook with permission(s) to be re-asked.
204
+ *
205
+ * @param string $redirectUrl The URL Facebook should redirect users to after login.
206
+ * @param array $scope List of permissions to request during login.
207
+ * @param string $separator The separator to use in http_build_query().
208
+ *
209
+ * @return string
210
+ */
211
+ public function getReRequestUrl($redirectUrl, array $scope = [], $separator = '&')
212
+ {
213
+ $params = ['auth_type' => 'rerequest'];
214
+
215
+ return $this->makeUrl($redirectUrl, $scope, $params, $separator);
216
+ }
217
+
218
+ /**
219
+ * Returns the URL to send the user in order to login to Facebook with user to be re-authenticated.
220
+ *
221
+ * @param string $redirectUrl The URL Facebook should redirect users to after login.
222
+ * @param array $scope List of permissions to request during login.
223
+ * @param string $separator The separator to use in http_build_query().
224
+ *
225
+ * @return string
226
+ */
227
+ public function getReAuthenticationUrl($redirectUrl, array $scope = [], $separator = '&')
228
+ {
229
+ $params = ['auth_type' => 'reauthenticate'];
230
+
231
+ return $this->makeUrl($redirectUrl, $scope, $params, $separator);
232
+ }
233
+
234
+ /**
235
+ * Takes a valid code from a login redirect, and returns an AccessToken entity.
236
+ *
237
+ * @param string|null $redirectUrl The redirect URL.
238
+ *
239
+ * @return AccessToken|null
240
+ *
241
+ * @throws FacebookSDKException
242
+ */
243
+ public function getAccessToken($redirectUrl = null)
244
+ {
245
+ if (!$code = $this->getCode()) {
246
+ return null;
247
+ }
248
+
249
+ $this->validateCsrf();
250
+
251
+ $redirectUrl = $redirectUrl ?: $this->urlDetectionHandler->getCurrentUrl();
252
+ // At minimum we need to remove the state param
253
+ $redirectUrl = FacebookUrlManipulator::removeParamsFromUrl($redirectUrl, ['state']);
254
+
255
+ return $this->oAuth2Client->getAccessTokenFromCode($code, $redirectUrl);
256
+ }
257
+
258
+ /**
259
+ * Validate the request against a cross-site request forgery.
260
+ *
261
+ * @throws FacebookSDKException
262
+ */
263
+ protected function validateCsrf()
264
+ {
265
+ $state = $this->getState();
266
+ $savedState = $this->persistentDataHandler->get('state');
267
+
268
+ if (!$state || !$savedState) {
269
+ throw new FacebookSDKException('Cross-site request forgery validation failed. Required param "state" missing.');
270
+ }
271
+
272
+ $savedLen = strlen($savedState);
273
+ $givenLen = strlen($state);
274
+
275
+ if ($savedLen !== $givenLen) {
276
+ throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
277
+ }
278
+
279
+ $result = 0;
280
+ for ($i = 0; $i < $savedLen; $i++) {
281
+ $result |= ord($state[$i]) ^ ord($savedState[$i]);
282
+ }
283
+
284
+ if ($result !== 0) {
285
+ throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
286
+ }
287
+ }
288
+
289
+ /**
290
+ * Return the code.
291
+ *
292
+ * @return string|null
293
+ */
294
+ protected function getCode()
295
+ {
296
+ return $this->getInput('code');
297
+ }
298
+
299
+ /**
300
+ * Return the state.
301
+ *
302
+ * @return string|null
303
+ */
304
+ protected function getState()
305
+ {
306
+ return $this->getInput('state');
307
+ }
308
+
309
+ /**
310
+ * Return the error code.
311
+ *
312
+ * @return string|null
313
+ */
314
+ public function getErrorCode()
315
+ {
316
+ return $this->getInput('error_code');
317
+ }
318
+
319
+ /**
320
+ * Returns the error.
321
+ *
322
+ * @return string|null
323
+ */
324
+ public function getError()
325
+ {
326
+ return $this->getInput('error');
327
+ }
328
+
329
+ /**
330
+ * Returns the error reason.
331
+ *
332
+ * @return string|null
333
+ */
334
+ public function getErrorReason()
335
+ {
336
+ return $this->getInput('error_reason');
337
+ }
338
+
339
+ /**
340
+ * Returns the error description.
341
+ *
342
+ * @return string|null
343
+ */
344
+ public function getErrorDescription()
345
+ {
346
+ return $this->getInput('error_description');
347
+ }
348
+
349
+ /**
350
+ * Returns a value from a GET param.
351
+ *
352
+ * @param string $key
353
+ *
354
+ * @return string|null
355
+ */
356
+ private function getInput($key)
357
+ {
358
+ return isset($_GET[$key]) ? $_GET[$key] : null;
359
+ }
360
+ }
facebook/Helpers/FacebookSignedRequestFromInputHelper.php ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Helpers;
25
+
26
+ use Facebook\Facebook;
27
+ use Facebook\FacebookApp;
28
+ use Facebook\FacebookClient;
29
+ use Facebook\SignedRequest;
30
+ use Facebook\Authentication\AccessToken;
31
+ use Facebook\Authentication\OAuth2Client;
32
+
33
+ /**
34
+ * Class FacebookSignedRequestFromInputHelper
35
+ *
36
+ * @package Facebook
37
+ */
38
+ abstract class FacebookSignedRequestFromInputHelper
39
+ {
40
+ /**
41
+ * @var SignedRequest|null The SignedRequest entity.
42
+ */
43
+ protected $signedRequest;
44
+
45
+ /**
46
+ * @var FacebookApp The FacebookApp entity.
47
+ */
48
+ protected $app;
49
+
50
+ /**
51
+ * @var OAuth2Client The OAuth 2.0 client service.
52
+ */
53
+ protected $oAuth2Client;
54
+
55
+ /**
56
+ * Initialize the helper and process available signed request data.
57
+ *
58
+ * @param FacebookApp $app The FacebookApp entity.
59
+ * @param FacebookClient $client The client to make HTTP requests.
60
+ * @param string|null $graphVersion The version of Graph to use.
61
+ */
62
+ public function __construct(FacebookApp $app, FacebookClient $client, $graphVersion = null)
63
+ {
64
+ $this->app = $app;
65
+ $graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
66
+ $this->oAuth2Client = new OAuth2Client($this->app, $client, $graphVersion);
67
+
68
+ $this->instantiateSignedRequest();
69
+ }
70
+
71
+ /**
72
+ * Instantiates a new SignedRequest entity.
73
+ *
74
+ * @param string|null
75
+ */
76
+ public function instantiateSignedRequest($rawSignedRequest = null)
77
+ {
78
+ $rawSignedRequest = $rawSignedRequest ?: $this->getRawSignedRequest();
79
+
80
+ if (!$rawSignedRequest) {
81
+ return;
82
+ }
83
+
84
+ $this->signedRequest = new SignedRequest($this->app, $rawSignedRequest);
85
+ }
86
+
87
+ /**
88
+ * Returns an AccessToken entity from the signed request.
89
+ *
90
+ * @return AccessToken|null
91
+ *
92
+ * @throws \Facebook\Exceptions\FacebookSDKException
93
+ */
94
+ public function getAccessToken()
95
+ {
96
+ if ($this->signedRequest && $this->signedRequest->hasOAuthData()) {
97
+ $code = $this->signedRequest->get('code');
98
+ $accessToken = $this->signedRequest->get('oauth_token');
99
+
100
+ if ($code && !$accessToken) {
101
+ return $this->oAuth2Client->getAccessTokenFromCode($code);
102
+ }
103
+
104
+ $expiresAt = $this->signedRequest->get('expires', 0);
105
+
106
+ return new AccessToken($accessToken, $expiresAt);
107
+ }
108
+
109
+ return null;
110
+ }
111
+
112
+ /**
113
+ * Returns the SignedRequest entity.
114
+ *
115
+ * @return SignedRequest|null
116
+ */
117
+ public function getSignedRequest()
118
+ {
119
+ return $this->signedRequest;
120
+ }
121
+
122
+ /**
123
+ * Returns the user_id if available.
124
+ *
125
+ * @return string|null
126
+ */
127
+ public function getUserId()
128
+ {
129
+ return $this->signedRequest ? $this->signedRequest->getUserId() : null;
130
+ }
131
+
132
+ /**
133
+ * Get raw signed request from input.
134
+ *
135
+ * @return string|null
136
+ */
137
+ abstract public function getRawSignedRequest();
138
+
139
+ /**
140
+ * Get raw signed request from POST input.
141
+ *
142
+ * @return string|null
143
+ */
144
+ public function getRawSignedRequestFromPost()
145
+ {
146
+ if (isset($_POST['signed_request'])) {
147
+ return $_POST['signed_request'];
148
+ }
149
+
150
+ return null;
151
+ }
152
+
153
+ /**
154
+ * Get raw signed request from cookie set from the Javascript SDK.
155
+ *
156
+ * @return string|null
157
+ */
158
+ public function getRawSignedRequestFromCookie()
159
+ {
160
+ if (isset($_COOKIE['fbsr_' . $this->app->getId()])) {
161
+ return $_COOKIE['fbsr_' . $this->app->getId()];
162
+ }
163
+
164
+ return null;
165
+ }
166
+ }
facebook/Http/GraphRawResponse.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Http;
25
+
26
+ /**
27
+ * Class GraphRawResponse
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class GraphRawResponse
32
+ {
33
+ /**
34
+ * @var array The response headers in the form of an associative array.
35
+ */
36
+ protected $headers;
37
+
38
+ /**
39
+ * @var string The raw response body.
40
+ */
41
+ protected $body;
42
+
43
+ /**
44
+ * @var int The HTTP status response code.
45
+ */
46
+ protected $httpResponseCode;
47
+
48
+ /**
49
+ * Creates a new GraphRawResponse entity.
50
+ *
51
+ * @param string|array $headers The headers as a raw string or array.
52
+ * @param string $body The raw response body.
53
+ * @param int $httpStatusCode The HTTP response code (if sending headers as parsed array).
54
+ */
55
+ public function __construct($headers, $body, $httpStatusCode = null)
56
+ {
57
+ if (is_numeric($httpStatusCode)) {
58
+ $this->httpResponseCode = (int)$httpStatusCode;
59
+ }
60
+
61
+ if (is_array($headers)) {
62
+ $this->headers = $headers;
63
+ } else {
64
+ $this->setHeadersFromString($headers);
65
+ }
66
+
67
+ $this->body = $body;
68
+ }
69
+
70
+ /**
71
+ * Return the response headers.
72
+ *
73
+ * @return array
74
+ */
75
+ public function getHeaders()
76
+ {
77
+ return $this->headers;
78
+ }
79
+
80
+ /**
81
+ * Return the body of the response.
82
+ *
83
+ * @return string
84
+ */
85
+ public function getBody()
86
+ {
87
+ return $this->body;
88
+ }
89
+
90
+ /**
91
+ * Return the HTTP response code.
92
+ *
93
+ * @return int
94
+ */
95
+ public function getHttpResponseCode()
96
+ {
97
+ return $this->httpResponseCode;
98
+ }
99
+
100
+ /**
101
+ * Sets the HTTP response code from a raw header.
102
+ *
103
+ * @param string $rawResponseHeader
104
+ */
105
+ public function setHttpResponseCodeFromHeader($rawResponseHeader)
106
+ {
107
+ preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|', $rawResponseHeader, $match);
108
+ $this->httpResponseCode = (int)$match[1];
109
+ }
110
+
111
+ /**
112
+ * Parse the raw headers and set as an array.
113
+ *
114
+ * @param string $rawHeaders The raw headers from the response.
115
+ */
116
+ protected function setHeadersFromString($rawHeaders)
117
+ {
118
+ // Normalize line breaks
119
+ $rawHeaders = str_replace("\r\n", "\n", $rawHeaders);
120
+
121
+ // There will be multiple headers if a 301 was followed
122
+ // or a proxy was followed, etc
123
+ $headerCollection = explode("\n\n", trim($rawHeaders));
124
+ // We just want the last response (at the end)
125
+ $rawHeader = array_pop($headerCollection);
126
+
127
+ $headerComponents = explode("\n", $rawHeader);
128
+ foreach ($headerComponents as $line) {
129
+ if (strpos($line, ': ') === false) {
130
+ $this->setHttpResponseCodeFromHeader($line);
131
+ } else {
132
+ list($key, $value) = explode(': ', $line);
133
+ $this->headers[$key] = $value;
134
+ }
135
+ }
136
+ }
137
+ }
facebook/Http/RequestBodyInterface.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Http;
25
+
26
+ /**
27
+ * Interface
28
+ *
29
+ * @package Facebook
30
+ */
31
+ interface RequestBodyInterface
32
+ {
33
+ /**
34
+ * Get the body of the request to send to Graph.
35
+ *
36
+ * @return string
37
+ */
38
+ public function getBody();
39
+ }
facebook/Http/RequestBodyMultipart.php ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Http;
25
+
26
+ use Facebook\FileUpload\FacebookFile;
27
+
28
+ /**
29
+ * Class RequestBodyMultipartt
30
+ *
31
+ * Some things copied from Guzzle
32
+ *
33
+ * @package Facebook
34
+ *
35
+ * @see https://github.com/guzzle/guzzle/blob/master/src/Post/MultipartBody.php
36
+ */
37
+ class RequestBodyMultipart implements RequestBodyInterface
38
+ {
39
+ /**
40
+ * @var string The boundary.
41
+ */
42
+ private $boundary;
43
+
44
+ /**
45
+ * @var array The parameters to send with this request.
46
+ */
47
+ private $params;
48
+
49
+ /**
50
+ * @var array The files to send with this request.
51
+ */
52
+ private $files = [];
53
+
54
+ /**
55
+ * @param array $params The parameters to send with this request.
56
+ * @param array $files The files to send with this request.
57
+ * @param string $boundary Provide a specific boundary.
58
+ */
59
+ public function __construct(array $params = [], array $files = [], $boundary = null)
60
+ {
61
+ $this->params = $params;
62
+ $this->files = $files;
63
+ $this->boundary = $boundary ?: uniqid();
64
+ }
65
+
66
+ /**
67
+ * @inheritdoc
68
+ */
69
+ public function getBody()
70
+ {
71
+ $body = '';
72
+
73
+ // Compile normal params
74
+ $params = $this->getNestedParams($this->params);
75
+ foreach ($params as $k => $v) {
76
+ $body .= $this->getParamString($k, $v);
77
+ }
78
+
79
+ // Compile files
80
+ foreach ($this->files as $k => $v) {
81
+ $body .= $this->getFileString($k, $v);
82
+ }
83
+
84
+ // Peace out
85
+ $body .= "--{$this->boundary}--\r\n";
86
+
87
+ return $body;
88
+ }
89
+
90
+ /**
91
+ * Get the boundary
92
+ *
93
+ * @return string
94
+ */
95
+ public function getBoundary()
96
+ {
97
+ return $this->boundary;
98
+ }
99
+
100
+ /**
101
+ * Get the string needed to transfer a file.
102
+ *
103
+ * @param string $name
104
+ * @param FacebookFile $file
105
+ *
106
+ * @return string
107
+ */
108
+ private function getFileString($name, FacebookFile $file)
109
+ {
110
+ return sprintf(
111
+ "--%s\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s\"%s\r\n\r\n%s\r\n",
112
+ $this->boundary,
113
+ $name,
114
+ $file->getFileName(),
115
+ $this->getFileHeaders($file),
116
+ $file->getContents()
117
+ );
118
+ }
119
+
120
+ /**
121
+ * Get the string needed to transfer a POST field.
122
+ *
123
+ * @param string $name
124
+ * @param string $value
125
+ *
126
+ * @return string
127
+ */
128
+ private function getParamString($name, $value)
129
+ {
130
+ return sprintf(
131
+ "--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s\r\n",
132
+ $this->boundary,
133
+ $name,
134
+ $value
135
+ );
136
+ }
137
+
138
+ /**
139
+ * Returns the params as an array of nested params.
140
+ *
141
+ * @param array $params
142
+ *
143
+ * @return array
144
+ */
145
+ private function getNestedParams(array $params)
146
+ {
147
+ $query = http_build_query($params, null, '&');
148
+ $params = explode('&', $query);
149
+ $result = [];
150
+
151
+ foreach ($params as $param) {
152
+ list($key, $value) = explode('=', $param, 2);
153
+ $result[urldecode($key)] = urldecode($value);
154
+ }
155
+
156
+ return $result;
157
+ }
158
+
159
+ /**
160
+ * Get the headers needed before transferring the content of a POST file.
161
+ *
162
+ * @param FacebookFile $file
163
+ *
164
+ * @return string
165
+ */
166
+ protected function getFileHeaders(FacebookFile $file)
167
+ {
168
+ return "\r\nContent-Type: {$file->getMimetype()}";
169
+ }
170
+ }
facebook/Http/RequestBodyUrlEncoded.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Http;
25
+
26
+ /**
27
+ * Class RequestBodyUrlEncoded
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class RequestBodyUrlEncoded implements RequestBodyInterface
32
+ {
33
+ /**
34
+ * @var array The parameters to send with this request.
35
+ */
36
+ protected $params = [];
37
+
38
+ /**
39
+ * Creates a new GraphUrlEncodedBody entity.
40
+ *
41
+ * @param array $params
42
+ */
43
+ public function __construct(array $params)
44
+ {
45
+ $this->params = $params;
46
+ }
47
+
48
+ /**
49
+ * @inheritdoc
50
+ */
51
+ public function getBody()
52
+ {
53
+ return http_build_query($this->params, null, '&');
54
+ }
55
+ }
facebook/HttpClients/FacebookCurl.php ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\HttpClients;
25
+
26
+ /**
27
+ * Class FacebookCurl
28
+ *
29
+ * Abstraction for the procedural curl elements so that curl can be mocked and the implementation can be tested.
30
+ *
31
+ * @package Facebook
32
+ */
33
+ class FacebookCurl
34
+ {
35
+
36
+ /**
37
+ * @var resource Curl resource instance
38
+ */
39
+ protected $curl;
40
+
41
+ /**
42
+ * Make a new curl reference instance
43
+ */
44
+ public function init()
45
+ {
46
+ $this->curl = curl_init();
47
+ }
48
+
49
+ /**
50
+ * Set a curl option
51
+ *
52
+ * @param $key
53
+ * @param $value
54
+ */
55
+ public function setopt($key, $value)
56
+ {
57
+ curl_setopt($this->curl, $key, $value);
58
+ }
59
+
60
+ /**
61
+ * Set an array of options to a curl resource
62
+ *
63
+ * @param array $options
64
+ */
65
+ public function setoptArray(array $options)
66
+ {
67
+ curl_setopt_array($this->curl, $options);
68
+ }
69
+
70
+ /**
71
+ * Send a curl request
72
+ *
73
+ * @return mixed
74
+ */
75
+ public function exec()
76
+ {
77
+ return curl_exec($this->curl);
78
+ }
79
+
80
+ /**
81
+ * Return the curl error number
82
+ *
83
+ * @return int
84
+ */
85
+ public function errno()
86
+ {
87
+ return curl_errno($this->curl);
88
+ }
89
+
90
+ /**
91
+ * Return the curl error message
92
+ *
93
+ * @return string
94
+ */
95
+ public function error()
96
+ {
97
+ return curl_error($this->curl);
98
+ }
99
+
100
+ /**
101
+ * Get info from a curl reference
102
+ *
103
+ * @param $type
104
+ *
105
+ * @return mixed
106
+ */
107
+ public function getinfo($type)
108
+ {
109
+ return curl_getinfo($this->curl, $type);
110
+ }
111
+
112
+ /**
113
+ * Get the currently installed curl version
114
+ *
115
+ * @return array
116
+ */
117
+ public function version()
118
+ {
119
+ return curl_version();
120
+ }
121
+
122
+ /**
123
+ * Close the resource connection to curl
124
+ */
125
+ public function close()
126
+ {
127
+ curl_close($this->curl);
128
+ }
129
+ }
facebook/HttpClients/FacebookCurlHttpClient.php ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\HttpClients;
25
+
26
+ use Facebook\Http\GraphRawResponse;
27
+ use Facebook\Exceptions\FacebookSDKException;
28
+
29
+ /**
30
+ * Class FacebookCurlHttpClient
31
+ *
32
+ * @package Facebook
33
+ */
34
+ class FacebookCurlHttpClient implements FacebookHttpClientInterface
35
+ {
36
+ /**
37
+ * @var string The client error message
38
+ */
39
+ protected $curlErrorMessage = '';
40
+
41
+ /**
42
+ * @var int The curl client error code
43
+ */
44
+ protected $curlErrorCode = 0;
45
+
46
+ /**
47
+ * @var string|boolean The raw response from the server
48
+ */
49
+ protected $rawResponse;
50
+
51
+ /**
52
+ * @var FacebookCurl Procedural curl as object
53
+ */
54
+ protected $facebookCurl;
55
+
56
+ /**
57
+ * @const Curl Version which is unaffected by the proxy header length error.
58
+ */
59
+ const CURL_PROXY_QUIRK_VER = 0x071E00;
60
+
61
+ /**
62
+ * @const "Connection Established" header text
63
+ */
64
+ const CONNECTION_ESTABLISHED = "HTTP/1.0 200 Connection established\r\n\r\n";
65
+
66
+ /**
67
+ * @param FacebookCurl|null Procedural curl as object
68
+ */
69
+ public function __construct(FacebookCurl $facebookCurl = null)
70
+ {
71
+ $this->facebookCurl = $facebookCurl ?: new FacebookCurl();
72
+ }
73
+
74
+ /**
75
+ * @inheritdoc
76
+ */
77
+ public function send($url, $method, $body, array $headers, $timeOut)
78
+ {
79
+ $this->openConnection($url, $method, $body, $headers, $timeOut);
80
+ $this->sendRequest();
81
+
82
+ if ($curlErrorCode = $this->facebookCurl->errno()) {
83
+ throw new FacebookSDKException($this->facebookCurl->error(), $curlErrorCode);
84
+ }
85
+
86
+ // Separate the raw headers from the raw body
87
+ list($rawHeaders, $rawBody) = $this->extractResponseHeadersAndBody();
88
+
89
+ $this->closeConnection();
90
+
91
+ return new GraphRawResponse($rawHeaders, $rawBody);
92
+ }
93
+
94
+ /**
95
+ * Opens a new curl connection.
96
+ *
97
+ * @param string $url The endpoint to send the request to.
98
+ * @param string $method The request method.
99
+ * @param string $body The body of the request.
100
+ * @param array $headers The request headers.
101
+ * @param int $timeOut The timeout in seconds for the request.
102
+ */
103
+ public function openConnection($url, $method, $body, array $headers, $timeOut)
104
+ {
105
+ $options = [
106
+ CURLOPT_CUSTOMREQUEST => $method,
107
+ CURLOPT_HTTPHEADER => $this->compileRequestHeaders($headers),
108
+ CURLOPT_URL => $url,
109
+ CURLOPT_CONNECTTIMEOUT => 10,
110
+ CURLOPT_TIMEOUT => $timeOut,
111
+ CURLOPT_RETURNTRANSFER => true, // Follow 301 redirects
112
+ CURLOPT_HEADER => true, // Enable header processing
113
+ CURLOPT_SSL_VERIFYHOST => 2,
114
+ CURLOPT_SSL_VERIFYPEER => true,
115
+ CURLOPT_CAINFO => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
116
+ ];
117
+
118
+ if ($method !== "GET") {
119
+ $options[CURLOPT_POSTFIELDS] = $body;
120
+ }
121
+
122
+ $this->facebookCurl->init();
123
+ $this->facebookCurl->setoptArray($options);
124
+ }
125
+
126
+ /**
127
+ * Closes an existing curl connection
128
+ */
129
+ public function closeConnection()
130
+ {
131
+ $this->facebookCurl->close();
132
+ }
133
+
134
+ /**
135
+ * Send the request and get the raw response from curl
136
+ */
137
+ public function sendRequest()
138
+ {
139
+ $this->rawResponse = $this->facebookCurl->exec();
140
+ }
141
+
142
+ /**
143
+ * Compiles the request headers into a curl-friendly format.
144
+ *
145
+ * @param array $headers The request headers.
146
+ *
147
+ * @return array
148
+ */
149
+ public function compileRequestHeaders(array $headers)
150
+ {
151
+ $return = [];
152
+
153
+ foreach ($headers as $key => $value) {
154
+ $return[] = $key . ': ' . $value;
155
+ }
156
+
157
+ return $return;
158
+ }
159
+
160
+ /**
161
+ * Extracts the headers and the body into a two-part array
162
+ *
163
+ * @return array
164
+ */
165
+ public function extractResponseHeadersAndBody()
166
+ {
167
+ $headerSize = $this->getHeaderSize();
168
+
169
+ $rawHeaders = mb_substr($this->rawResponse, 0, $headerSize);
170
+ $rawBody = mb_substr($this->rawResponse, $headerSize);
171
+
172
+ return [trim($rawHeaders), trim($rawBody)];
173
+ }
174
+
175
+ /**
176
+ * Return proper header size
177
+ *
178
+ * @return integer
179
+ */
180
+ private function getHeaderSize()
181
+ {
182
+ $headerSize = $this->facebookCurl->getinfo(CURLINFO_HEADER_SIZE);
183
+ // This corrects a Curl bug where header size does not account
184
+ // for additional Proxy headers.
185
+ if ($this->needsCurlProxyFix()) {
186
+ // Additional way to calculate the request body size.
187
+ if (preg_match('/Content-Length: (\d+)/', $this->rawResponse, $m)) {
188
+ $headerSize = mb_strlen($this->rawResponse) - $m[1];
189
+ } elseif (stripos($this->rawResponse, self::CONNECTION_ESTABLISHED) !== false) {
190
+ $headerSize += mb_strlen(self::CONNECTION_ESTABLISHED);
191
+ }
192
+ }
193
+
194
+ return $headerSize;
195
+ }
196
+
197
+ /**
198
+ * Detect versions of Curl which report incorrect header lengths when
199
+ * using Proxies.
200
+ *
201
+ * @return boolean
202
+ */
203
+ private function needsCurlProxyFix()
204
+ {
205
+ $ver = $this->facebookCurl->version();
206
+ $version = $ver['version_number'];
207
+
208
+ return $version < self::CURL_PROXY_QUIRK_VER;
209
+ }
210
+ }
facebook/HttpClients/FacebookGuzzleHttpClient.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\HttpClients;
25
+
26
+ use Facebook\Http\GraphRawResponse;
27
+ use Facebook\Exceptions\FacebookSDKException;
28
+
29
+ use GuzzleHttp\Client;
30
+ use GuzzleHttp\Message\ResponseInterface;
31
+ use GuzzleHttp\Ring\Exception\RingException;
32
+ use GuzzleHttp\Exception\RequestException;
33
+
34
+ class FacebookGuzzleHttpClient implements FacebookHttpClientInterface
35
+ {
36
+ /**
37
+ * @var \GuzzleHttp\Client The Guzzle client.
38
+ */
39
+ protected $guzzleClient;
40
+
41
+ /**
42
+ * @param \GuzzleHttp\Client|null The Guzzle client.
43
+ */
44
+ public function __construct(Client $guzzleClient = null)
45
+ {
46
+ $this->guzzleClient = $guzzleClient ?: new Client();
47
+ }
48
+
49
+ /**
50
+ * @inheritdoc
51
+ */
52
+ public function send($url, $method, $body, array $headers, $timeOut)
53
+ {
54
+ $options = [
55
+ 'headers' => $headers,
56
+ 'body' => $body,
57
+ 'timeout' => $timeOut,
58
+ 'connect_timeout' => 10,
59
+ 'verify' => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
60
+ ];
61
+ $request = $this->guzzleClient->createRequest($method, $url, $options);
62
+
63
+ try {
64
+ $rawResponse = $this->guzzleClient->send($request);
65
+ } catch (RequestException $e) {
66
+ $rawResponse = $e->getResponse();
67
+
68
+ if ($e->getPrevious() instanceof RingException || !$rawResponse instanceof ResponseInterface) {
69
+ throw new FacebookSDKException($e->getMessage(), $e->getCode());
70
+ }
71
+ }
72
+
73
+ $rawHeaders = $this->getHeadersAsString($rawResponse);
74
+ $rawBody = $rawResponse->getBody();
75
+ $httpStatusCode = $rawResponse->getStatusCode();
76
+
77
+ return new GraphRawResponse($rawHeaders, $rawBody, $httpStatusCode);
78
+ }
79
+
80
+ /**
81
+ * Returns the Guzzle array of headers as a string.
82
+ *
83
+ * @param ResponseInterface $response The Guzzle response.
84
+ *
85
+ * @return string
86
+ */
87
+ public function getHeadersAsString(ResponseInterface $response)
88
+ {
89
+ $headers = $response->getHeaders();
90
+ $rawHeaders = [];
91
+ foreach ($headers as $name => $values) {
92
+ $rawHeaders[] = $name . ": " . implode(", ", $values);
93
+ }
94
+
95
+ return implode("\r\n", $rawHeaders);
96
+ }
97
+ }
facebook/HttpClients/FacebookHttpClientInterface.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\HttpClients;
25
+
26
+ /**
27
+ * Interface FacebookHttpClientInterface
28
+ *
29
+ * @package Facebook
30
+ */
31
+ interface FacebookHttpClientInterface
32
+ {
33
+ /**
34
+ * Sends a request to the server and returns the raw response.
35
+ *
36
+ * @param string $url The endpoint to send the request to.
37
+ * @param string $method The request method.
38
+ * @param string $body The body of the request.
39
+ * @param array $headers The request headers.
40
+ * @param int $timeOut The timeout in seconds for the request.
41
+ *
42
+ * @return \Facebook\Http\GraphRawResponse Raw response from the server.
43
+ *
44
+ * @throws \Facebook\Exceptions\FacebookSDKException
45
+ */
46
+ public function send($url, $method, $body, array $headers, $timeOut);
47
+ }
facebook/HttpClients/FacebookStream.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\HttpClients;
25
+
26
+ /**
27
+ * Class FacebookStream
28
+ *
29
+ * Abstraction for the procedural stream elements so that the functions can be
30
+ * mocked and the implementation can be tested.
31
+ *
32
+ * @package Facebook
33
+ */
34
+ class FacebookStream
35
+ {
36
+ /**
37
+ * @var resource Context stream resource instance
38
+ */
39
+ protected $stream;
40
+
41
+ /**
42
+ * @var array Response headers from the stream wrapper
43
+ */
44
+ protected $responseHeaders;
45
+
46
+ /**
47
+ * Make a new context stream reference instance
48
+ *
49
+ * @param array $options
50
+ */
51
+ public function streamContextCreate(array $options)
52
+ {
53
+ $this->stream = stream_context_create($options);
54
+ }
55
+
56
+ /**
57
+ * The response headers from the stream wrapper
58
+ *
59
+ * @return array|null
60
+ */
61
+ public function getResponseHeaders()
62
+ {
63
+ return $this->responseHeaders;
64
+ }
65
+
66
+ /**
67
+ * Send a stream wrapped request
68
+ *
69
+ * @param string $url
70
+ *
71
+ * @return mixed
72
+ */
73
+ public function fileGetContents($url)
74
+ {
75
+ $rawResponse = file_get_contents($url, false, $this->stream);
76
+ $this->responseHeaders = $http_response_header;
77
+
78
+ return $rawResponse;
79
+ }
80
+ }
facebook/HttpClients/FacebookStreamHttpClient.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\HttpClients;
25
+
26
+ use Facebook\Http\GraphRawResponse;
27
+ use Facebook\Exceptions\FacebookSDKException;
28
+
29
+ class FacebookStreamHttpClient implements FacebookHttpClientInterface
30
+ {
31
+ /**
32
+ * @var FacebookStream Procedural stream wrapper as object.
33
+ */
34
+ protected $facebookStream;
35
+
36
+ /**
37
+ * @param FacebookStream|null Procedural stream wrapper as object.
38
+ */
39
+ public function __construct(FacebookStream $facebookStream = null)
40
+ {
41
+ $this->facebookStream = $facebookStream ?: new FacebookStream();
42
+ }
43
+
44
+ /**
45
+ * @inheritdoc
46
+ */
47
+ public function send($url, $method, $body, array $headers, $timeOut)
48
+ {
49
+ $options = [
50
+ 'http' => [
51
+ 'method' => $method,
52
+ 'header' => $this->compileHeader($headers),
53
+ 'content' => $body,
54
+ 'timeout' => $timeOut,
55
+ 'ignore_errors' => true
56
+ ],
57
+ 'ssl' => [
58
+ 'verify_peer' => true,
59
+ 'verify_peer_name' => true,
60
+ 'allow_self_signed' => true, // All root certificates are self-signed
61
+ 'cafile' => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
62
+ ],
63
+ ];
64
+
65
+ $this->facebookStream->streamContextCreate($options);
66
+ $rawBody = $this->facebookStream->fileGetContents($url);
67
+ $rawHeaders = $this->facebookStream->getResponseHeaders();
68
+
69
+ if ($rawBody === false || !$rawHeaders) {
70
+ throw new FacebookSDKException('Stream returned an empty response', 660);
71
+ }
72
+
73
+ $rawHeaders = implode("\r\n", $rawHeaders);
74
+
75
+ return new GraphRawResponse($rawHeaders, $rawBody);
76
+ }
77
+
78
+ /**
79
+ * Formats the headers for use in the stream wrapper.
80
+ *
81
+ * @param array $headers The request headers.
82
+ *
83
+ * @return string
84
+ */
85
+ public function compileHeader(array $headers)
86
+ {
87
+ $header = [];
88
+ foreach ($headers as $k => $v) {
89
+ $header[] = $k . ': ' . $v;
90
+ }
91
+
92
+ return implode("\r\n", $header);
93
+ }
94
+ }
facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
3
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4
+ d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
5
+ ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
6
+ MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
7
+ LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
8
+ RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
9
+ +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
10
+ PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
11
+ xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
12
+ Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
13
+ hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
14
+ EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
15
+ MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
16
+ FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
17
+ nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
18
+ eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
19
+ hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
20
+ Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
21
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
22
+ +OkuE6N36B9K
23
+ -----END CERTIFICATE-----
facebook/PersistentData/FacebookMemoryPersistentDataHandler.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PersistentData;
25
+
26
+ /**
27
+ * Class FacebookMemoryPersistentDataHandler
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookMemoryPersistentDataHandler implements PersistentDataInterface
32
+ {
33
+ /**
34
+ * @var array The session data to keep in memory.
35
+ */
36
+ protected $sessionData = [];
37
+
38
+ /**
39
+ * @inheritdoc
40
+ */
41
+ public function get($key)
42
+ {
43
+ return isset($this->sessionData[$key]) ? $this->sessionData[$key] : null;
44
+ }
45
+
46
+ /**
47
+ * @inheritdoc
48
+ */
49
+ public function set($key, $value)
50
+ {
51
+ $this->sessionData[$key] = $value;
52
+ }
53
+ }
facebook/PersistentData/FacebookSessionPersistentDataHandler.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PersistentData;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ /**
29
+ * Class FacebookSessionPersistentDataHandler
30
+ *
31
+ * @package Facebook
32
+ */
33
+ class FacebookSessionPersistentDataHandler implements PersistentDataInterface
34
+ {
35
+ /**
36
+ * @var string Prefix to use for session variables.
37
+ */
38
+ protected $sessionPrefix = 'FBRLH_';
39
+
40
+ /**
41
+ * Init the session handler.
42
+ *
43
+ * @param boolean $enableSessionCheck
44
+ *
45
+ * @throws FacebookSDKException
46
+ */
47
+ public function __construct($enableSessionCheck = true)
48
+ {
49
+ if ($enableSessionCheck && session_status() !== PHP_SESSION_ACTIVE) {
50
+ throw new FacebookSDKException(
51
+ 'Sessions are not active. Please make sure session_start() is at the top of your script.',
52
+ 720
53
+ );
54
+ }
55
+ }
56
+
57
+ /**
58
+ * @inheritdoc
59
+ */
60
+ public function get($key)
61
+ {
62
+ if (isset($_SESSION[$this->sessionPrefix . $key])) {
63
+ return $_SESSION[$this->sessionPrefix . $key];
64
+ }
65
+
66
+ return null;
67
+ }
68
+
69
+ /**
70
+ * @inheritdoc
71
+ */
72
+ public function set($key, $value)
73
+ {
74
+ $_SESSION[$this->sessionPrefix . $key] = $value;
75
+ }
76
+ }
facebook/PersistentData/PersistentDataInterface.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PersistentData;
25
+
26
+ /**
27
+ * Interface PersistentDataInterface
28
+ *
29
+ * @package Facebook
30
+ */
31
+ interface PersistentDataInterface
32
+ {
33
+ /**
34
+ * Get a value from a persistent data store.
35
+ *
36
+ * @param string $key
37
+ *
38
+ * @return mixed
39
+ */
40
+ public function get($key);
41
+
42
+ /**
43
+ * Set a value in the persistent data store.
44
+ *
45
+ * @param string $key
46
+ * @param mixed $value
47
+ */
48
+ public function set($key, $value);
49
+ }
facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PseudoRandomString;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ class McryptPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
29
+ {
30
+ use PseudoRandomStringGeneratorTrait;
31
+
32
+ /**
33
+ * @const string The error message when generating the string fails.
34
+ */
35
+ const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from mcrypt_create_iv(). ';
36
+
37
+ /**
38
+ * @throws FacebookSDKException
39
+ */
40
+ public function __construct()
41
+ {
42
+ if (!function_exists('mcrypt_create_iv')) {
43
+ throw new FacebookSDKException(
44
+ static::ERROR_MESSAGE .
45
+ 'The function mcrypt_create_iv() does not exist.'
46
+ );
47
+ }
48
+ }
49
+
50
+ /**
51
+ * @inheritdoc
52
+ */
53
+ public function getPseudoRandomString($length)
54
+ {
55
+ $this->validateLength($length);
56
+
57
+ $binaryString = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
58
+
59
+ if ($binaryString === false) {
60
+ throw new FacebookSDKException(
61
+ static::ERROR_MESSAGE .
62
+ 'mcrypt_create_iv() returned an error.'
63
+ );
64
+ }
65
+
66
+ return $this->binToHex($binaryString, $length);
67
+ }
68
+ }
facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PseudoRandomString;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ class OpenSslPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
29
+ {
30
+ use PseudoRandomStringGeneratorTrait;
31
+
32
+ /**
33
+ * @const string The error message when generating the string fails.
34
+ */
35
+ const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from openssl_random_pseudo_bytes().';
36
+
37
+ /**
38
+ * @throws FacebookSDKException
39
+ */
40
+ public function __construct()
41
+ {
42
+ if (!function_exists('openssl_random_pseudo_bytes')) {
43
+ throw new FacebookSDKException(static::ERROR_MESSAGE . 'The function openssl_random_pseudo_bytes() does not exist.');
44
+ }
45
+ }
46
+
47
+ /**
48
+ * @inheritdoc
49
+ */
50
+ public function getPseudoRandomString($length)
51
+ {
52
+ $this->validateLength($length);
53
+
54
+ $wasCryptographicallyStrong = false;
55
+ $binaryString = openssl_random_pseudo_bytes($length, $wasCryptographicallyStrong);
56
+
57
+ if ($binaryString === false) {
58
+ throw new FacebookSDKException(static::ERROR_MESSAGE . 'openssl_random_pseudo_bytes() returned an unknown error.');
59
+ }
60
+
61
+ if ($wasCryptographicallyStrong !== true) {
62
+ throw new FacebookSDKException(static::ERROR_MESSAGE . 'openssl_random_pseudo_bytes() returned a pseudo-random string but it was not cryptographically secure and cannot be used.');
63
+ }
64
+
65
+ return $this->binToHex($binaryString, $length);
66
+ }
67
+ }
facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PseudoRandomString;
25
+
26
+ /**
27
+ * Interface
28
+ *
29
+ * @package Facebook
30
+ */
31
+ interface PseudoRandomStringGeneratorInterface
32
+ {
33
+ /**
34
+ * Get a cryptographically secure pseudo-random string of arbitrary length.
35
+ *
36
+ * @see http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/
37
+ *
38
+ * @param int $length The length of the string to return.
39
+ *
40
+ * @return string
41
+ *
42
+ * @throws \Facebook\Exceptions\FacebookSDKException|\InvalidArgumentException
43
+ */
44
+ public function getPseudoRandomString($length);
45
+ }
facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PseudoRandomString;
25
+
26
+ trait PseudoRandomStringGeneratorTrait
27
+ {
28
+ /**
29
+ * Validates the length argument of a random string.
30
+ *
31
+ * @param int $length The length to validate.
32
+ *
33
+ * @throws \InvalidArgumentException
34
+ */
35
+ public function validateLength($length)
36
+ {
37
+ if (!is_int($length)) {
38
+ throw new \InvalidArgumentException('getPseudoRandomString() expects an integer for the string length');
39
+ }
40
+
41
+ if ($length < 1) {
42
+ throw new \InvalidArgumentException('getPseudoRandomString() expects a length greater than 1');
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Converts binary data to hexadecimal of arbitrary length.
48
+ *
49
+ * @param string $binaryData The binary data to convert to hex.
50
+ * @param int $length The length of the string to return.
51
+ *
52
+ * @return string
53
+ */
54
+ public function binToHex($binaryData, $length)
55
+ {
56
+ return mb_substr(bin2hex($binaryData), 0, $length);
57
+ }
58
+ }
facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\PseudoRandomString;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ class UrandomPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
29
+ {
30
+
31
+ use PseudoRandomStringGeneratorTrait;
32
+
33
+ /**
34
+ * @const string The error message when generating the string fails.
35
+ */
36
+ const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from /dev/urandom. ';
37
+
38
+ /**
39
+ * @throws FacebookSDKException
40
+ */
41
+ public function __construct()
42
+ {
43
+ if (ini_get('open_basedir')) {
44
+ throw new FacebookSDKException(
45
+ static::ERROR_MESSAGE .
46
+ 'There is an open_basedir constraint that prevents access to /dev/urandom.'
47
+ );
48
+ }
49
+
50
+ if (!is_readable('/dev/urandom')) {
51
+ throw new FacebookSDKException(
52
+ static::ERROR_MESSAGE .
53
+ 'Unable to read from /dev/urandom.'
54
+ );
55
+ }
56
+ }
57
+
58
+ /**
59
+ * @inheritdoc
60
+ */
61
+ public function getPseudoRandomString($length)
62
+ {
63
+ $this->validateLength($length);
64
+
65
+ $stream = fopen('/dev/urandom', 'rb');
66
+ if (!is_resource($stream)) {
67
+ throw new FacebookSDKException(
68
+ static::ERROR_MESSAGE .
69
+ 'Unable to open stream to /dev/urandom.'
70
+ );
71
+ }
72
+
73
+ if (!defined('HHVM_VERSION')) {
74
+ stream_set_read_buffer($stream, 0);
75
+ }
76
+
77
+ $binaryString = fread($stream, $length);
78
+ fclose($stream);
79
+
80
+ if (!$binaryString) {
81
+ throw new FacebookSDKException(
82
+ static::ERROR_MESSAGE .
83
+ 'Stream to /dev/urandom returned no data.'
84
+ );
85
+ }
86
+
87
+ return $this->binToHex($binaryString, $length);
88
+ }
89
+ }
facebook/SignedRequest.php ADDED
@@ -0,0 +1,332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook;
25
+
26
+ use Facebook\Exceptions\FacebookSDKException;
27
+
28
+ /**
29
+ * Class SignedRequest
30
+ *
31
+ * @package Facebook
32
+ */
33
+ class SignedRequest
34
+ {
35
+ /**
36
+ * @var FacebookApp The FacebookApp entity.
37
+ */
38
+ protected $app;
39
+
40
+ /**
41
+ * @var string The raw encrypted signed request.
42
+ */
43
+ protected $rawSignedRequest;
44
+
45
+ /**
46
+ * @var array The payload from the decrypted signed request.
47
+ */
48
+ protected $payload;
49
+
50
+ /**
51
+ * Instantiate a new SignedRequest entity.
52
+ *
53
+ * @param FacebookApp $facebookApp The FacebookApp entity.
54
+ * @param string|null $rawSignedRequest The raw signed request.
55
+ */
56
+ public function __construct(FacebookApp $facebookApp, $rawSignedRequest = null)
57
+ {
58
+ $this->app = $facebookApp;
59
+
60
+ if (!$rawSignedRequest) {
61
+ return;
62
+ }
63
+
64
+ $this->rawSignedRequest = $rawSignedRequest;
65
+
66
+ $this->parse();
67
+ }
68
+
69
+ /**
70
+ * Returns the raw signed request data.
71
+ *
72
+ * @return string|null
73
+ */
74
+ public function getRawSignedRequest()
75
+ {
76
+ return $this->rawSignedRequest;
77
+ }
78
+
79
+ /**
80
+ * Returns the parsed signed request data.
81
+ *
82
+ * @return array|null
83
+ */
84
+ public function getPayload()
85
+ {
86
+ return $this->payload;
87
+ }
88
+
89
+ /**
90
+ * Returns a property from the signed request data if available.
91
+ *
92
+ * @param string $key
93
+ * @param mixed|null $default
94
+ *
95
+ * @return mixed|null
96
+ */
97
+ public function get($key, $default = null)
98
+ {
99
+ if (isset($this->payload[$key])) {
100
+ return $this->payload[$key];
101
+ }
102
+
103
+ return $default;
104
+ }
105
+
106
+ /**
107
+ * Returns user_id from signed request data if available.
108
+ *
109
+ * @return string|null
110
+ */
111
+ public function getUserId()
112
+ {
113
+ return $this->get('user_id');
114
+ }
115
+
116
+ /**
117
+ * Checks for OAuth data in the payload.
118
+ *
119
+ * @return boolean
120
+ */
121
+ public function hasOAuthData()
122
+ {
123
+ return $this->get('oauth_token') || $this->get('code');
124
+ }
125
+
126
+ /**
127
+ * Creates a signed request from an array of data.
128
+ *
129
+ * @param array $payload
130
+ *
131
+ * @return string
132
+ */
133
+ public function make(array $payload)
134
+ {
135
+ $payload['algorithm'] = isset($payload['algorithm']) ? $payload['algorithm'] : 'HMAC-SHA256';
136
+ $payload['issued_at'] = isset($payload['issued_at']) ? $payload['issued_at'] : time();
137
+ $encodedPayload = $this->base64UrlEncode(json_encode($payload));
138
+
139
+ $hashedSig = $this->hashSignature($encodedPayload);
140
+ $encodedSig = $this->base64UrlEncode($hashedSig);
141
+
142
+ return $encodedSig . '.' . $encodedPayload;
143
+ }
144
+
145
+ /**
146
+ * Validates and decodes a signed request and saves
147
+ * the payload to an array.
148
+ */
149
+ protected function parse()
150
+ {
151
+ list($encodedSig, $encodedPayload) = $this->split();
152
+
153
+ // Signature validation
154
+ $sig = $this->decodeSignature($encodedSig);
155
+ $hashedSig = $this->hashSignature($encodedPayload);
156
+ $this->validateSignature($hashedSig, $sig);
157
+
158
+ $this->payload = $this->decodePayload($encodedPayload);
159
+
160
+ // Payload validation
161
+ $this->validateAlgorithm();
162
+ }
163
+
164
+ /**
165
+ * Splits a raw signed request into signature and payload.
166
+ *
167
+ * @returns array
168
+ *
169
+ * @throws FacebookSDKException
170
+ */
171
+ protected function split()
172
+ {
173
+ if (strpos($this->rawSignedRequest, '.') === false) {
174
+ throw new FacebookSDKException('Malformed signed request.', 606);
175
+ }
176
+
177
+ return explode('.', $this->rawSignedRequest, 2);
178
+ }
179
+
180
+ /**
181
+ * Decodes the raw signature from a signed request.
182
+ *
183
+ * @param string $encodedSig
184
+ *
185
+ * @returns string
186
+ *
187
+ * @throws FacebookSDKException
188
+ */
189
+ protected function decodeSignature($encodedSig)
190
+ {
191
+ $sig = $this->base64UrlDecode($encodedSig);
192
+
193
+ if (!$sig) {
194
+ throw new FacebookSDKException('Signed request has malformed encoded signature data.', 607);
195
+ }
196
+
197
+ return $sig;
198
+ }
199
+
200
+ /**
201
+ * Decodes the raw payload from a signed request.
202
+ *
203
+ * @param string $encodedPayload
204
+ *
205
+ * @returns array
206
+ *
207
+ * @throws FacebookSDKException
208
+ */
209
+ protected function decodePayload($encodedPayload)
210
+ {
211
+ $payload = $this->base64UrlDecode($encodedPayload);
212
+
213
+ if ($payload) {
214
+ $payload = json_decode($payload, true);
215
+ }
216
+
217
+ if (!is_array($payload)) {
218
+ throw new FacebookSDKException('Signed request has malformed encoded payload data.', 607);
219
+ }
220
+
221
+ return $payload;
222
+ }
223
+
224
+ /**
225
+ * Validates the algorithm used in a signed request.
226
+ *
227
+ * @throws FacebookSDKException
228
+ */
229
+ protected function validateAlgorithm()
230
+ {
231
+ if ($this->get('algorithm') !== 'HMAC-SHA256') {
232
+ throw new FacebookSDKException('Signed request is using the wrong algorithm.', 605);
233
+ }
234
+ }
235
+
236
+ /**
237
+ * Hashes the signature used in a signed request.
238
+ *
239
+ * @param string $encodedData
240
+ *
241
+ * @return string
242
+ *
243
+ * @throws FacebookSDKException
244
+ */
245
+ protected function hashSignature($encodedData)
246
+ {
247
+ $hashedSig = hash_hmac(
248
+ 'sha256',
249
+ $encodedData,
250
+ $this->app->getSecret(),
251
+ $raw_output = true
252
+ );
253
+
254
+ if (!$hashedSig) {
255
+ throw new FacebookSDKException('Unable to hash signature from encoded payload data.', 602);
256
+ }
257
+
258
+ return $hashedSig;
259
+ }
260
+
261
+ /**
262
+ * Validates the signature used in a signed request.
263
+ *
264
+ * @param string $hashedSig
265
+ * @param string $sig
266
+ *
267
+ * @throws FacebookSDKException
268
+ */
269
+ protected function validateSignature($hashedSig, $sig)
270
+ {
271
+ if (mb_strlen($hashedSig) === mb_strlen($sig)) {
272
+ $validate = 0;
273
+ for ($i = 0; $i < mb_strlen($sig); $i++) {
274
+ $validate |= ord($hashedSig[$i]) ^ ord($sig[$i]);
275
+ }
276
+ if ($validate === 0) {
277
+ return;
278
+ }
279
+ }
280
+
281
+ throw new FacebookSDKException('Signed request has an invalid signature.', 602);
282
+ }
283
+
284
+ /**
285
+ * Base64 decoding which replaces characters:
286
+ * + instead of -
287
+ * / instead of _
288
+ *
289
+ * @link http://en.wikipedia.org/wiki/Base64#URL_applications
290
+ *
291
+ * @param string $input base64 url encoded input
292
+ *
293
+ * @return string decoded string
294
+ */
295
+ public function base64UrlDecode($input)
296
+ {
297
+ $urlDecodedBase64 = strtr($input, '-_', '+/');
298
+ $this->validateBase64($urlDecodedBase64);
299
+
300
+ return base64_decode($urlDecodedBase64);
301
+ }
302
+
303
+ /**
304
+ * Base64 encoding which replaces characters:
305
+ * + instead of -
306
+ * / instead of _
307
+ *
308
+ * @link http://en.wikipedia.org/wiki/Base64#URL_applications
309
+ *
310
+ * @param string $input string to encode
311
+ *
312
+ * @return string base64 url encoded input
313
+ */
314
+ public function base64UrlEncode($input)
315
+ {
316
+ return strtr(base64_encode($input), '+/', '-_');
317
+ }
318
+
319
+ /**
320
+ * Validates a base64 string.
321
+ *
322
+ * @param string $input base64 value to validate
323
+ *
324
+ * @throws FacebookSDKException
325
+ */
326
+ protected function validateBase64($input)
327
+ {
328
+ if (!preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $input)) {
329
+ throw new FacebookSDKException('Signed request contains malformed base64 encoding.', 608);
330
+ }
331
+ }
332
+ }
facebook/Url/FacebookUrlDetectionHandler.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Url;
25
+
26
+ /**
27
+ * Class FacebookUrlDetectionHandler
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookUrlDetectionHandler implements UrlDetectionInterface
32
+ {
33
+ /**
34
+ * @inheritdoc
35
+ */
36
+ public function getCurrentUrl()
37
+ {
38
+ return $this->getHttpScheme() . '://' . $this->getHostName() . $this->getServerVar('REQUEST_URI');
39
+ }
40
+
41
+ /**
42
+ * Get the currently active URL scheme.
43
+ *
44
+ * @return string
45
+ */
46
+ protected function getHttpScheme()
47
+ {
48
+ return $this->isBehindSsl() ? 'https' : 'http';
49
+ }
50
+
51
+ /**
52
+ * Tries to detect if the server is running behind an SSL.
53
+ *
54
+ * @return boolean
55
+ */
56
+ protected function isBehindSsl()
57
+ {
58
+ // Check for proxy first
59
+ $protocol = $this->getHeader('X_FORWARDED_PROTO');
60
+ if ($protocol) {
61
+ return $this->protocolWithActiveSsl($protocol);
62
+ }
63
+
64
+ $protocol = $this->getServerVar('HTTPS');
65
+ if ($protocol) {
66
+ return $this->protocolWithActiveSsl($protocol);
67
+ }
68
+
69
+ return (string)$this->getServerVar('SERVER_PORT') === '443';
70
+ }
71
+
72
+ /**
73
+ * Detects an active SSL protocol value.
74
+ *
75
+ * @param string $protocol
76
+ *
77
+ * @return boolean
78
+ */
79
+ protected function protocolWithActiveSsl($protocol)
80
+ {
81
+ $protocol = strtolower((string)$protocol);
82
+
83
+ return in_array($protocol, ['on', '1', 'https', 'ssl'], true);
84
+ }
85
+
86
+ /**
87
+ * Tries to detect the host name of the server.
88
+ *
89
+ * Some elements adapted from
90
+ *
91
+ * @see https://github.com/symfony/HttpFoundation/blob/master/Request.php
92
+ *
93
+ * @return string
94
+ */
95
+ protected function getHostName()
96
+ {
97
+ // Check for proxy first
98
+ if ($host = $this->getHeader('X_FORWARDED_HOST')) {
99
+ $elements = explode(',', $host);
100
+ $host = $elements[count($elements) - 1];
101
+ } elseif (!$host = $this->getHeader('HOST')) {
102
+ if (!$host = $this->getServerVar('SERVER_NAME')) {
103
+ $host = $this->getServerVar('SERVER_ADDR');
104
+ }
105
+ }
106
+
107
+ // trim and remove port number from host
108
+ // host is lowercase as per RFC 952/2181
109
+ $host = strtolower(preg_replace('/:\d+$/', '', trim($host)));
110
+
111
+ // Port number
112
+ $scheme = $this->getHttpScheme();
113
+ $port = $this->getCurrentPort();
114
+ $appendPort = ':' . $port;
115
+
116
+ // Don't append port number if a normal port.
117
+ if (($scheme == 'http' && $port == '80') || ($scheme == 'https' && $port == '443')) {
118
+ $appendPort = '';
119
+ }
120
+
121
+ return $host . $appendPort;
122
+ }
123
+
124
+ protected function getCurrentPort()
125
+ {
126
+ // Check for proxy first
127
+ $port = $this->getHeader('X_FORWARDED_PORT');
128
+ if ($port) {
129
+ return (string)$port;
130
+ }
131
+
132
+ $protocol = (string)$this->getHeader('X_FORWARDED_PROTO');
133
+ if ($protocol === 'https') {
134
+ return '443';
135
+ }
136
+
137
+ return (string)$this->getServerVar('SERVER_PORT');
138
+ }
139
+
140
+ /**
141
+ * Returns the a value from the $_SERVER super global.
142
+ *
143
+ * @param string $key
144
+ *
145
+ * @return string
146
+ */
147
+ protected function getServerVar($key)
148
+ {
149
+ return isset($_SERVER[$key]) ? $_SERVER[$key] : '';
150
+ }
151
+
152
+ /**
153
+ * Gets a value from the HTTP request headers.
154
+ *
155
+ * @param string $key
156
+ *
157
+ * @return string
158
+ */
159
+ protected function getHeader($key)
160
+ {
161
+ return $this->getServerVar('HTTP_' . $key);
162
+ }
163
+ }
facebook/Url/FacebookUrlManipulator.php ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Url;
25
+
26
+ /**
27
+ * Class FacebookUrlManipulator
28
+ *
29
+ * @package Facebook
30
+ */
31
+ class FacebookUrlManipulator
32
+ {
33
+ /**
34
+ * Remove params from a URL.
35
+ *
36
+ * @param string $url The URL to filter.
37
+ * @param array $paramsToFilter The params to filter from the URL.
38
+ *
39
+ * @return string The URL with the params removed.
40
+ */
41
+ public static function removeParamsFromUrl($url, array $paramsToFilter)
42
+ {
43
+ $parts = parse_url($url);
44
+
45
+ $query = '';
46
+ if (isset($parts['query'])) {
47
+ $params = [];
48
+ parse_str($parts['query'], $params);
49
+
50
+ // Remove query params
51
+ foreach ($paramsToFilter as $paramName) {
52
+ unset($params[$paramName]);
53
+ }
54
+
55
+ if (count($params) > 0) {
56
+ $query = '?' . http_build_query($params, null, '&');
57
+ }
58
+ }
59
+
60
+ $scheme = isset($parts['scheme']) ? $parts['scheme'] . '://' : '';
61
+ $host = isset($parts['host']) ? $parts['host'] : '';
62
+ $port = isset($parts['port']) ? ':' . $parts['port'] : '';
63
+ $path = isset($parts['path']) ? $parts['path'] : '';
64
+ $fragment = isset($parts['fragment']) ? '#' . $parts['fragment'] : '';
65
+
66
+ return $scheme . $host . $port . $path . $query . $fragment;
67
+ }
68
+
69
+ /**
70
+ * Gracefully appends params to the URL.
71
+ *
72
+ * @param string $url The URL that will receive the params.
73
+ * @param array $newParams The params to append to the URL.
74
+ *
75
+ * @return string
76
+ */
77
+ public static function appendParamsToUrl($url, array $newParams = [])
78
+ {
79
+ if (!$newParams) {
80
+ return $url;
81
+ }
82
+
83
+ if (strpos($url, '?') === false) {
84
+ return $url . '?' . http_build_query($newParams, null, '&');
85
+ }
86
+
87
+ list($path, $query) = explode('?', $url, 2);
88
+ $existingParams = [];
89
+ parse_str($query, $existingParams);
90
+
91
+ // Favor params from the original URL over $newParams
92
+ $newParams = array_merge($newParams, $existingParams);
93
+
94
+ // Sort for a predicable order
95
+ ksort($newParams);
96
+
97
+ return $path . '?' . http_build_query($newParams, null, '&');
98
+ }
99
+
100
+ /**
101
+ * Returns the params from a URL in the form of an array.
102
+ *
103
+ * @param string $url The URL to parse the params from.
104
+ *
105
+ * @return array
106
+ */
107
+ public static function getParamsAsArray($url)
108
+ {
109
+ $query = parse_url($url, PHP_URL_QUERY);
110
+ if (!$query) {
111
+ return [];
112
+ }
113
+ $params = [];
114
+ parse_str($query, $params);
115
+
116
+ return $params;
117
+ }
118
+
119
+ /**
120
+ * Adds the params of the first URL to the second URL.
121
+ *
122
+ * Any params that already exist in the second URL will go untouched.
123
+ *
124
+ * @param string $urlToStealFrom The URL harvest the params from.
125
+ * @param string $urlToAddTo The URL that will receive the new params.
126
+ *
127
+ * @return string The $urlToAddTo with any new params from $urlToStealFrom.
128
+ */
129
+ public static function mergeUrlParams($urlToStealFrom, $urlToAddTo)
130
+ {
131
+ $newParams = static::getParamsAsArray($urlToStealFrom);
132
+ // Nothing new to add, return as-is
133
+ if (!$newParams) {
134
+ return $urlToAddTo;
135
+ }
136
+
137
+ return static::appendParamsToUrl($urlToAddTo, $newParams);
138
+ }
139
+
140
+ /**
141
+ * Check for a "/" prefix and prepend it if not exists.
142
+ *
143
+ * @param string|null $string
144
+ *
145
+ * @return string|null
146
+ */
147
+ public static function forceSlashPrefix($string)
148
+ {
149
+ if (!$string) {
150
+ return $string;
151
+ }
152
+
153
+ return strpos($string, '/') === 0 ? $string : '/' . $string;
154
+ }
155
+
156
+ /**
157
+ * Trims off the hostname and Graph version from a URL.
158
+ *
159
+ * @param string $urlToTrim The URL the needs the surgery.
160
+ *
161
+ * @return string The $urlToTrim with the hostname and Graph version removed.
162
+ */
163
+ public static function baseGraphUrlEndpoint($urlToTrim)
164
+ {
165
+ return '/' . preg_replace('/^https:\/\/.+\.facebook\.com(\/v.+?)?\//', '', $urlToTrim);
166
+ }
167
+ }
facebook/Url/UrlDetectionInterface.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+ namespace Facebook\Url;
25
+
26
+ /**
27
+ * Interface UrlDetectionInterface
28
+ *
29
+ * @package Facebook
30
+ */
31
+ interface UrlDetectionInterface
32
+ {
33
+ /**
34
+ * Get the currently active URL.
35
+ *
36
+ * @return string
37
+ */
38
+ public function getCurrentUrl();
39
+ }
facebook/apsl_facebook_class.php DELETED
@@ -1,85 +0,0 @@
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/autoload.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 Facebook, Inc.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+
25
+ /**
26
+ * You only need this file if you are not using composer.
27
+ * Why are you not using composer?
28
+ * https://getcomposer.org/
29
+ */
30
+
31
+ if (version_compare(PHP_VERSION, '5.4.0', '<')) {
32
+ throw new Exception('The Facebook SDK requires PHP version 5.4 or higher.');
33
+ }
34
+
35
+ /**
36
+ * Register the autoloader for the Facebook SDK classes.
37
+ *
38
+ * Based off the official PSR-4 autoloader example found here:
39
+ * https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
40
+ *
41
+ * @param string $class The fully-qualified class name.
42
+ *
43
+ * @return void
44
+ */
45
+ spl_autoload_register(function ($class) {
46
+ // project-specific namespace prefix
47
+ $prefix = 'Facebook\\';
48
+
49
+ // For backwards compatibility
50
+ $customBaseDir = '';
51
+ // @todo v6: Remove support for 'FACEBOOK_SDK_V4_SRC_DIR'
52
+ if (defined('FACEBOOK_SDK_V4_SRC_DIR')) {
53
+ $customBaseDir = FACEBOOK_SDK_V4_SRC_DIR;
54
+ } elseif (defined('FACEBOOK_SDK_SRC_DIR')) {
55
+ $customBaseDir = FACEBOOK_SDK_SRC_DIR;
56
+ }
57
+ // base directory for the namespace prefix
58
+ $baseDir = $customBaseDir ?: __DIR__ . '/';
59
+
60
+ // does the class use the namespace prefix?
61
+ $len = strlen($prefix);
62
+ if (strncmp($prefix, $class, $len) !== 0) {
63
+ // no, move to the next registered autoloader
64
+ return;
65
+ }
66
+
67
+ // get the relative class name
68
+ $relativeClass = substr($class, $len);
69
+
70
+ // replace the namespace prefix with the base directory, replace namespace
71
+ // separators with directory separators in the relative class name, append
72
+ // with .php
73
+ $file = rtrim($baseDir, '/') . '/' . str_replace('\\', '/', $relativeClass) . '.php';
74
+
75
+ // if the file exists, require it
76
+ if (file_exists($file)) {
77
+ require $file;
78
+ }
79
+ });
facebook/src/base_facebook.php DELETED
@@ -1,1543 +0,0 @@
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 DELETED
@@ -1,227 +0,0 @@
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 DELETED
@@ -1,3920 +0,0 @@
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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
- QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
827
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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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
- 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
- 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
- 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
- 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
- DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1008
- XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1009
- lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1010
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1021
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
1616
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
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
- 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
- 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
- dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
1683
- MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
1684
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
1698
- 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
- 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
- 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
- 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
- OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
1703
- 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
- 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
- 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
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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
1915
- 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
- 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
- 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
1918
- -----END CERTIFICATE-----
1919
-
1920
- SwissSign Gold CA - G2
1921
- ======================
1922
- -----BEGIN CERTIFICATE-----
1923
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
1934
- 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
- 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
- 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
- AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
1938
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
1946
- 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
- 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
- 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
1949
- -----END CERTIFICATE-----
1950
-
1951
- SwissSign Silver CA - G2
1952
- ========================
1953
- -----BEGIN CERTIFICATE-----
1954
- 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
- BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
1956
- 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
- aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
1958
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
1966
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
1977
- 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
- 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
- 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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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
2556
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
2564
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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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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
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
2648
- 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
- Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
2650
- 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
- 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
- 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
- X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
2654
- 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
- eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
2656
- 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
- Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
2658
- 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
- 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
- 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
- Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
2662
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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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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
- 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
- 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
- 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
- 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
- 5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
2901
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
2915
- 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
- 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
- URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
2918
- 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
- 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
- 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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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
3041
- 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
- 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
- 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
- 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
- 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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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
- 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
- MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
3209
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
3496
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
3806
- 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
- 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
- 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
- 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
- A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
3811
- 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
- aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
3813
- 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
- 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
- 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
- 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
- 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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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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
3834
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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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-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/backend/main-page.php CHANGED
@@ -90,6 +90,7 @@ if(isset($_SESSION['apsl_message'])){ ?>
90
  <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>
91
  <br />
92
  <ul class='apsl-info-lists'>
 
93
  <li>Go to <a href='https://developers.facebook.com/apps' target='_blank'>https://developers.facebook.com/apps</a>.</li>
94
  <li>Click on 'Add a New App' button. A popup will open. Then choose website.</li>
95
  <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>
90
  <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>
91
  <br />
92
  <ul class='apsl-info-lists'>
93
+ <li><b>Please note:</b> We have now updated our facbook sdk version to 5.0 so to make the facebook login work you need to have PHP version 5.4 at least.</li>
94
  <li>Go to <a href='https://developers.facebook.com/apps' target='_blank'>https://developers.facebook.com/apps</a>.</li>
95
  <li>Click on 'Add a New App' button. A popup will open. Then choose website.</li>
96
  <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>
inc/frontend/login_check.php CHANGED
@@ -9,7 +9,11 @@ function __construct(){
9
  $exploder=explode( '_', $_GET['apsl_login_id'] );
10
  switch($exploder[0]){
11
  case 'facebook':
12
- include( APSL_PLUGIN_DIR.'facebook/src/facebook.php' );
 
 
 
 
13
  $this->onFacebookLogin();
14
  break;
15
 
@@ -62,15 +66,19 @@ function onFacebookLogin(){
62
  $site = $this->siteUrl();
63
  $callBackUrl= $this->callBackUrl();
64
  $response = new stdClass();
 
65
  $exploder=explode('_', $_GET['apsl_login_id']);
66
  $action = $exploder[1];
67
  $options = get_option( APSL_SETTINGS );
68
  $config = array(
69
- 'appId' => $options['apsl_facebook_settings']['apsl_facebook_app_id'],
70
- 'secret' => $options['apsl_facebook_settings']['apsl_facebook_app_secret']
71
- );
 
 
 
 
72
 
73
- $facebook = new Facebook($config);
74
  $encoded_url = isset($_GET['redirect_to']) ? $_GET['redirect_to'] : '';
75
 
76
  if(isset($encoded_url) && $encoded_url !=''){
@@ -80,55 +88,90 @@ function onFacebookLogin(){
80
  }
81
 
82
  if ($action == 'login'){
83
- $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$callback, 'scope'=>'email'));
84
- $this->redirect($loginUrl);
85
- exit();
 
 
86
  }else{
87
- if(isset($_REQUEST['error'])){
88
- $response->status = 'ERROR';
89
- $response->error_code = 2;
90
- $response->error_message= 'INVALID AUTHORIZATION';
91
- return $response;
92
- die();
93
- }
94
-
95
- $user = $facebook->getUser();
96
- if ($user){
97
- try {// Proceed knowing you have a logged in user who's authenticated.
98
- $user_profile = $facebook->api('/me');
99
- } catch (FacebookApiException $e) {
100
- error_log($e);
101
- $user = null;
102
- }
103
- }
104
-
105
- if($user!=null){
106
- $response->status = 'SUCCESS';
107
- $response->deuid = $user_profile['id'];
108
- $response->deutype = 'facebook';
109
- $response->first_name = $user_profile['first_name'];
110
- $response->last_name = $user_profile['last_name'];
111
- $response->email = $user_profile['email'];
112
- $response->username = $user_profile['email'];
113
- $response->gender = $user_profile['gender'];
114
- $response->url = $user_profile['link'];
115
- $response->about = ''; //facebook doesn't return user about details.
116
- $headers = get_headers('https://graph.facebook.com/'.$user_profile['id'].'/picture',1);
117
-
118
- // just a precaution, check whether the header isset...
119
- if(isset($headers['Location'])) {
120
- $response->deuimage = $headers['Location']; // string
121
- } else {
122
- $response->deuimage = false; // nothing there? .. weird, but okay!
123
- }
124
- $response->error_message = '';
125
- }else{
126
  $response->status = 'ERROR';
127
  $response->error_code = 2;
128
  $response->error_message= 'INVALID AUTHORIZATION';
129
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  }
131
- return $response;
132
  }
133
 
134
 
@@ -545,7 +588,7 @@ function loginUser($user_id){
545
  }
546
 
547
  //returns the current page url
548
- function curPageURL() {
549
  $pageURL = 'http';
550
  if ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
551
  $pageURL .= "s";
9
  $exploder=explode( '_', $_GET['apsl_login_id'] );
10
  switch($exploder[0]){
11
  case 'facebook':
12
+ //include( APSL_PLUGIN_DIR.'facebook/src/facebook.php' );
13
+ if (version_compare(PHP_VERSION, '5.4.0', '<')) {
14
+ echo _e('The Facebook SDK requires PHP version 5.4 or higher. Please notify about this error to site admin.', APSL_TEXT_DOMAIN );
15
+ die();
16
+ }
17
  $this->onFacebookLogin();
18
  break;
19
 
66
  $site = $this->siteUrl();
67
  $callBackUrl= $this->callBackUrl();
68
  $response = new stdClass();
69
+ $return_user_details = new stdClass();
70
  $exploder=explode('_', $_GET['apsl_login_id']);
71
  $action = $exploder[1];
72
  $options = get_option( APSL_SETTINGS );
73
  $config = array(
74
+ 'app_id' => $options['apsl_facebook_settings']['apsl_facebook_app_id'],
75
+ 'app_secret' => $options['apsl_facebook_settings']['apsl_facebook_app_secret'],
76
+ 'default_graph_version' => 'v2.4'
77
+ );
78
+
79
+ include( APSL_PLUGIN_DIR.'facebook/autoload.php' );
80
+ $fb = new Facebook\Facebook($config);
81
 
 
82
  $encoded_url = isset($_GET['redirect_to']) ? $_GET['redirect_to'] : '';
83
 
84
  if(isset($encoded_url) && $encoded_url !=''){
88
  }
89
 
90
  if ($action == 'login'){
91
+ // Well looks like we are a fresh dude, login to Facebook!
92
+ $helper = $fb->getRedirectLoginHelper();
93
+ $permissions = array('email', 'public_profile'); // optional
94
+ $loginUrl = $helper->getLoginUrl($callback, $permissions);
95
+ $this->redirect($loginUrl);
96
  }else{
97
+ if(isset($_REQUEST['error'])){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  $response->status = 'ERROR';
99
  $response->error_code = 2;
100
  $response->error_message= 'INVALID AUTHORIZATION';
101
+ return $response;
102
+ die();
103
+ }
104
+ if (isset($_REQUEST['code'])) {
105
+ $helper = $fb->getRedirectLoginHelper();
106
+ try {
107
+ $accessToken = $helper->getAccessToken();
108
+ } catch(Facebook\Exceptions\FacebookResponseException $e) {
109
+
110
+ // When Graph returns an error
111
+ echo 'Graph returned an error: ' . $e->getMessage();
112
+ exit;
113
+ } catch(Facebook\Exceptions\FacebookSDKException $e) {
114
+
115
+ // When validation fails or other local issues
116
+ echo 'Facebook SDK returned an error: ' . $e->getMessage();
117
+ exit;
118
+ }
119
+
120
+ if (isset($accessToken)) {
121
+ // Logged in!
122
+ $_SESSION['facebook_access_token'] = (string) $accessToken;
123
+ $fb->setDefaultAccessToken($accessToken);
124
+
125
+ try {
126
+ $response = $fb->get('/me?fields=email,name, first_name, last_name, gender, link, about, address, bio, birthday, education, hometown, is_verified, languages, location, website');
127
+ $userNode = $response->getGraphUser();
128
+ } catch(Facebook\Exceptions\FacebookResponseException $e) {
129
+ // When Graph returns an error
130
+ echo 'Graph returned an error: ' . $e->getMessage();
131
+ exit;
132
+ } catch(Facebook\Exceptions\FacebookSDKException $e) {
133
+ // When validation fails or other local issues
134
+ echo 'Facebook SDK returned an error: ' . $e->getMessage();
135
+ exit;
136
+ }
137
+
138
+ $user_profile = $this->accessProtected($userNode, 'items');
139
+ if($user_profile!=null){
140
+ $return_user_details->status = 'SUCCESS';
141
+ $return_user_details->deuid = $user_profile['id'];
142
+ $return_user_details->deutype = 'facebook';
143
+ $return_user_details->first_name = $user_profile['first_name'];
144
+ $return_user_details->last_name = $user_profile['last_name'];
145
+ $return_user_details->email = $user_profile['email'];
146
+ $return_user_details->username = $user_profile['email'];
147
+ $return_user_details->gender = $user_profile['gender'];
148
+ $return_user_details->url = $user_profile['link'];
149
+ $return_user_details->about = ''; //facebook doesn't return user about details.
150
+ $headers = get_headers('https://graph.facebook.com/'.$user_profile['id'].'/picture',1);
151
+
152
+ // just a precaution, check whether the header isset...
153
+ if(isset($headers['Location'])) {
154
+ $return_user_details->deuimage = $headers['Location']; // string
155
+ } else {
156
+ $return_user_details->deuimage = false; // nothing there? .. weird, but okay!
157
+ }
158
+ $return_user_details->error_message = '';
159
+ }else{
160
+ $return_user_details->status = 'ERROR';
161
+ $return_user_details->error_code = 2;
162
+ $return_user_details->error_message= 'INVALID AUTHORIZATION';
163
+ }
164
+ }
165
+ } else {
166
+ // Well looks like we are a fresh dude, login to Facebook!
167
+ $helper = $fb->getRedirectLoginHelper();
168
+ $permissions = array('email', 'public_profile'); // optional
169
+ $loginUrl = $helper->getLoginUrl($callback, $permissions);
170
+ $this->redirect($loginUrl);
171
+ }
172
+
173
  }
174
+ return $return_user_details;
175
  }
176
 
177
 
588
  }
589
 
590
  //returns the current page url
591
+ Public static function curPageURL() {
592
  $pageURL = 'http';
593
  if ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
594
  $pageURL .= "s";
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: social, login, social login, facebook, twitter, google, social connect, s
4
  Donate link: http://accesspressthemes.com/donation/
5
  Requires at least: 3.8
6
  Tested up to: 4.2
7
- Stable tag: 1.0.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -131,6 +131,10 @@ Yes. You can use the AccessPress social login lite anywhere by using shortcode i
131
  4. Backend Other settings Section.
132
 
133
  == Changelog ==
 
 
 
 
134
  = 1.0.6 =
135
  * Code formatting and optimization for backend save settings.
136
  * Code fixing for the translation of a plugin.
4
  Donate link: http://accesspressthemes.com/donation/
5
  Requires at least: 3.8
6
  Tested up to: 4.2
7
+ Stable tag: 1.0.7
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
131
  4. Backend Other settings Section.
132
 
133
  == Changelog ==
134
+ = 1.0.7 =
135
+ * Bug fixing for the social login issues with facebook.
136
+ * Implemented the new version of the facebook php sdk v5.0
137
+
138
  = 1.0.6 =
139
  * Code formatting and optimization for backend save settings.
140
  * Code fixing for the translation of a plugin.