Razorpay for WooCommerce - Version 3.4.1

Version Description

  • Bug fix in webhook.
  • Updated Razorpay SDK.
  • Tested up to Woocommerce 6.4.1
Download this release

Release Info

Developer razorpay
Plugin Icon 128x128 Razorpay for WooCommerce
Version 3.4.1
Comparing to
See all releases

Code changes from version 3.4.0 to 3.4.1

Files changed (80) hide show
  1. includes/razorpay-webhook.php +27 -6
  2. razorpay-sdk/Razorpay.php +6 -4
  3. razorpay-sdk/libs/Requests-2.0.0/.editorconfig +15 -0
  4. razorpay-sdk/libs/Requests-2.0.0/CHANGELOG.md +946 -0
  5. razorpay-sdk/libs/Requests-2.0.0/LICENSE +49 -0
  6. razorpay-sdk/libs/Requests-2.0.0/README.md +168 -0
  7. razorpay-sdk/libs/Requests-2.0.0/certificates/cacert.pem +3232 -0
  8. razorpay-sdk/libs/Requests-2.0.0/composer.json +83 -0
  9. razorpay-sdk/libs/Requests-2.0.0/library/Deprecated.php +19 -0
  10. razorpay-sdk/libs/Requests-2.0.0/library/README.md +6 -0
  11. razorpay-sdk/libs/Requests-2.0.0/library/Requests.php +78 -0
  12. razorpay-sdk/libs/Requests-2.0.0/src/Auth.php +36 -0
  13. razorpay-sdk/libs/Requests-2.0.0/src/Auth/Basic.php +103 -0
  14. razorpay-sdk/libs/Requests-2.0.0/src/Autoload.php +187 -0
  15. razorpay-sdk/libs/Requests-2.0.0/src/Capability.php +36 -0
  16. razorpay-sdk/libs/Requests-2.0.0/src/Cookie.php +527 -0
  17. razorpay-sdk/libs/Requests-2.0.0/src/Cookie/Jar.php +186 -0
  18. razorpay-sdk/libs/Requests-2.0.0/src/Exception.php +66 -0
  19. razorpay-sdk/libs/Requests-2.0.0/src/Exception/ArgumentCount.php +47 -0
  20. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http.php +78 -0
  21. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status304.php +31 -0
  22. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status305.php +31 -0
  23. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status306.php +31 -0
  24. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status400.php +31 -0
  25. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status401.php +31 -0
  26. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status402.php +31 -0
  27. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status403.php +31 -0
  28. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status404.php +31 -0
  29. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status405.php +31 -0
  30. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status406.php +31 -0
  31. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status407.php +31 -0
  32. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status408.php +31 -0
  33. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status409.php +31 -0
  34. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status410.php +31 -0
  35. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status411.php +31 -0
  36. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status412.php +31 -0
  37. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status413.php +31 -0
  38. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status414.php +31 -0
  39. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status415.php +31 -0
  40. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status416.php +31 -0
  41. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status417.php +31 -0
  42. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status418.php +35 -0
  43. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status428.php +35 -0
  44. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status429.php +35 -0
  45. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status431.php +35 -0
  46. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status500.php +31 -0
  47. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status501.php +31 -0
  48. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status502.php +31 -0
  49. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status503.php +31 -0
  50. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status504.php +31 -0
  51. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status505.php +31 -0
  52. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status511.php +35 -0
  53. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/StatusUnknown.php +49 -0
  54. razorpay-sdk/libs/Requests-2.0.0/src/Exception/InvalidArgument.php +41 -0
  55. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Transport.php +17 -0
  56. razorpay-sdk/libs/Requests-2.0.0/src/Exception/Transport/Curl.php +80 -0
  57. razorpay-sdk/libs/Requests-2.0.0/src/HookManager.php +33 -0
  58. razorpay-sdk/libs/Requests-2.0.0/src/Hooks.php +97 -0
  59. razorpay-sdk/libs/Requests-2.0.0/src/IdnaEncoder.php +418 -0
  60. razorpay-sdk/libs/Requests-2.0.0/src/Ipv6.php +205 -0
  61. razorpay-sdk/libs/Requests-2.0.0/src/Iri.php +1101 -0
  62. razorpay-sdk/libs/Requests-2.0.0/src/Port.php +75 -0
  63. razorpay-sdk/libs/Requests-2.0.0/src/Proxy.php +38 -0
  64. razorpay-sdk/libs/Requests-2.0.0/src/Proxy/Http.php +167 -0
  65. razorpay-sdk/libs/Requests-2.0.0/src/Requests.php +1079 -0
  66. razorpay-sdk/libs/Requests-2.0.0/src/Response.php +166 -0
  67. razorpay-sdk/libs/Requests-2.0.0/src/Response/Headers.php +124 -0
  68. razorpay-sdk/libs/Requests-2.0.0/src/Session.php +304 -0
  69. razorpay-sdk/libs/Requests-2.0.0/src/Ssl.php +182 -0
  70. razorpay-sdk/libs/Requests-2.0.0/src/Transport.php +45 -0
  71. razorpay-sdk/libs/Requests-2.0.0/src/Transport/Curl.php +641 -0
  72. razorpay-sdk/libs/Requests-2.0.0/src/Transport/Fsockopen.php +506 -0
  73. razorpay-sdk/libs/Requests-2.0.0/src/Utility/CaseInsensitiveDictionary.php +127 -0
  74. razorpay-sdk/libs/Requests-2.0.0/src/Utility/FilteredIterator.php +82 -0
  75. razorpay-sdk/libs/Requests-2.0.0/src/Utility/InputValidator.php +109 -0
  76. razorpay-sdk/src/Api.php +1 -1
  77. razorpay-sdk/src/Collection.php +1 -1
  78. razorpay-sdk/src/Resource.php +9 -4
  79. readme.txt +6 -1
  80. woo-razorpay.php +2 -2
includes/razorpay-webhook.php CHANGED
@@ -197,8 +197,10 @@ class RZP_Webhook
197
 
198
  rzpLogInfo("Woocommerce orderId: $orderId webhook process intitiated for payment authorized event");
199
 
200
- $order = wc_get_order($orderId);
201
-
 
 
202
  //To give the priority to callback script to compleate the execution fist adding this locking.
203
  $transientData = get_transient('webhook_trigger_count_for_' . $orderId);
204
 
@@ -290,8 +292,10 @@ class RZP_Webhook
290
  //
291
  $orderId = $data['payload']['payment']['entity']['notes']['woocommerce_order_number'];
292
 
293
- $order = wc_get_order($orderId);
294
-
 
 
295
  // If it is already marked as paid, ignore the event
296
  if ($order->needs_payment() === false) {
297
  return;
@@ -427,8 +431,11 @@ class RZP_Webhook
427
  //
428
  $orderId = $payment['notes']['woocommerce_order_number'];
429
 
430
- $order = wc_get_order($orderId);
431
-
 
 
 
432
  // If it is already marked as unpaid, ignore the event
433
  if ($order->needs_payment() === true) {
434
  return;
@@ -485,4 +492,18 @@ class RZP_Webhook
485
  // Graceful exit since payment is now refunded.
486
  exit();
487
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488
  }
197
 
198
  rzpLogInfo("Woocommerce orderId: $orderId webhook process intitiated for payment authorized event");
199
 
200
+ if(!empty($orderId))
201
+ {
202
+ $order = $this->checkIsObject($orderId);
203
+ }
204
  //To give the priority to callback script to compleate the execution fist adding this locking.
205
  $transientData = get_transient('webhook_trigger_count_for_' . $orderId);
206
 
292
  //
293
  $orderId = $data['payload']['payment']['entity']['notes']['woocommerce_order_number'];
294
 
295
+ if(!empty($orderId))
296
+ {
297
+ $order = $this->checkIsObject($orderId);
298
+ }
299
  // If it is already marked as paid, ignore the event
300
  if ($order->needs_payment() === false) {
301
  return;
431
  //
432
  $orderId = $payment['notes']['woocommerce_order_number'];
433
 
434
+ if(!empty($orderId))
435
+ {
436
+ $order = $this->checkIsObject($orderId);
437
+ }
438
+
439
  // If it is already marked as unpaid, ignore the event
440
  if ($order->needs_payment() === true) {
441
  return;
492
  // Graceful exit since payment is now refunded.
493
  exit();
494
  }
495
+
496
+ public function checkIsObject($orderId)
497
+ {
498
+ $order = wc_get_order($orderId);
499
+ if(is_object($order))
500
+ {
501
+ return wc_get_order($orderId);
502
+ }
503
+ else
504
+ {
505
+ rzpLogInfo("Woocommerce order Object does not exist");
506
+ exit();
507
+ }
508
+ }
509
  }
razorpay-sdk/Razorpay.php CHANGED
@@ -1,14 +1,16 @@
1
  <?php
2
 
3
  // Include Requests only if not already defined
4
- if (class_exists('Requests') === false)
 
 
5
  {
6
- require_once __DIR__.'/libs/Requests-1.8.0/library/Requests.php';
7
  }
8
 
9
  try
10
  {
11
- Requests::register_autoloader();
12
 
13
  if (version_compare(Requests::VERSION, '1.6.0') === -1)
14
  {
@@ -52,4 +54,4 @@ spl_autoload_register(function ($class)
52
  {
53
  require $file;
54
  }
55
- });
1
  <?php
2
 
3
  // Include Requests only if not already defined
4
+ const REQUESTS_SILENCE_PSR0_DEPRECATIONS = true;
5
+
6
+ if (class_exists('WpOrg\Requests\Autoload') === false)
7
  {
8
+ require_once __DIR__.'/libs/Requests-2.0.0/src/Autoload.php';
9
  }
10
 
11
  try
12
  {
13
+ WpOrg\Requests\Autoload::register();
14
 
15
  if (version_compare(Requests::VERSION, '1.6.0') === -1)
16
  {
54
  {
55
  require $file;
56
  }
57
+ });
razorpay-sdk/libs/Requests-2.0.0/.editorconfig ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+ indent_style = tab
9
+
10
+ [{*.json,*.yml}]
11
+ indent_style = space
12
+ indent_size = 2
13
+
14
+ [*.md]
15
+ trim_trailing_whitespace = false
razorpay-sdk/libs/Requests-2.0.0/CHANGELOG.md ADDED
@@ -0,0 +1,946 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Changelog
2
+ =========
3
+
4
+ 2.0.0
5
+ -----
6
+
7
+ ### BREAKING CHANGES
8
+
9
+ As Requests 2.0.0 is a major release, this version contains breaking changes. There is an [upgrade guide](https://requests.ryanmccue.info/docs/upgrading.html) available to guide you through making the necessary changes in your own code.
10
+
11
+ ### Overview of changes
12
+
13
+ - **New minimum PHP version**
14
+
15
+ Support for PHP 5.2 - 5.5 has been dropped. The new minimum supported PHP version is now 5.6.
16
+
17
+ Support for HHVM has also been dropped formally now.
18
+
19
+ (props [@datagutten][gh-datagutten], [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#378][gh-378], [#470][gh-470], [#509][gh-509])
20
+
21
+ - **New release branch name**
22
+
23
+ The stable version of Requests can be found in the `stable` branch (was `master`).
24
+ Development of Requests happens in the `develop` branch.
25
+
26
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#463][gh-463], [#490][gh-490])
27
+
28
+ - **All code is now namespaced (PSR-4)**
29
+
30
+ The code within the Requests library has all been namespaced and now lives in the `WpOrg\Requests` namespace.
31
+
32
+ The namespaced classes can be found in the `src` directory. The old `library` directory and the files within are deprecated.
33
+
34
+ For a number of classes, some subtle changes have also been made to their base class name, like renaming the `Hooker` interface to `HookManager`.
35
+
36
+ A full backward-compatibility layer is available and using the non-namespaced class names will still work during the 2.x and 3.x release cycles, though a deprecation notice will be thrown the first time a class using one of the old PSR-0 based class names is requested.
37
+ For the lifetime of Requests 2.x, the deprecation notices can be disabled by defining a global `REQUESTS_SILENCE_PSR0_DEPRECATIONS` constant and
38
+ setting the value of this constant to `true`.
39
+
40
+ A complete "translation table" between the Requests 1.x and 2.x class names is available in the [upgrade guide](https://requests.ryanmccue.info/docs/upgrading.html).
41
+
42
+ Users of the Requests native custom autoloader will need to adjust their code to initialize the autoloader:
43
+ ```php
44
+ // OLD: Using the custom autoloader in Requests 1.x.
45
+ require_once 'path/to/Requests/library/Requests.php';
46
+ Requests::register_autoloader();
47
+
48
+ // NEW: Using the custom autoloader in Requests 2.x.
49
+ require_once 'path/to/Requests/src/Autoload.php';
50
+ WpOrg\Requests\Autoload::register();
51
+ ```
52
+
53
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#503][gh-503], [#519][gh-519], [#586][gh-586], [#587][gh-587], [#594][gh-594])
54
+
55
+ - **A large number of classes have been marked as `final`**
56
+
57
+ Marking a class as `final` prohibits extending it.
58
+
59
+ These changes were made after researching which classes were being extended in userland code and due diligence has been applied before making these changes. If this change is causing a problem we didn't anticipate, please [open an issue to report it](https://github.com/WordPress/Requests/issues/new/choose).
60
+
61
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#514][gh-514], [#534][gh-534])
62
+
63
+ - **Input validation**
64
+
65
+ All typical entry point methods in Requests will now, directly or indirectly, validate the received input parameters for being of the correct type.
66
+ When an incorrect parameter type is received, a catchable `WpOrg\Requests\Exception\InvalidArgument` exception will be thrown.
67
+
68
+ The input validation has been set up to be reasonably liberal, so if Requests was being used as per the documentation, this change should not affect you.
69
+ If you still find the input validation to be too strict and you have a good use-case of why it should be loosened for a particular entry point, please [open an issue to discuss this](https://github.com/WordPress/Requests/issues/new/choose).
70
+
71
+ The code within Requests itself has also received various improvements to be more type safe.
72
+
73
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#499][gh-499], [#542][gh-542], [#547][gh-547], [#558][gh-558], [#572][gh-572], [#573][gh-573], [#574][gh-574], [#591][gh-591], [#592][gh-592], [#593][gh-593], [#601][gh-601], [#602][gh-602], [#603][gh-603], [#604][gh-604], [#605][gh-605], [#609][gh-609], [#610][gh-610], [#611][gh-611], [#613][gh-613], [#614][gh-614], [#615][gh-615], [#620][gh-620], [#621][gh-621], [#629][gh-629])
74
+
75
+ - **Update bundled certificates**
76
+
77
+ The bundled certificates were updated with the latest version available (published 2021-10-26).
78
+
79
+ Previously the bundled certificates in Requests would include a small subset of expired certificates for legacy reasons.
80
+ This is no longer the case as of Requests 2.0.0.
81
+
82
+ > :warning: **Note**: the included certificates bundle is only intended as a fallback.
83
+ >
84
+ > This fallback should only be used for servers that are not properly configured for SSL verification. A continuously managed server should provide a more up-to-date certificate authority list than a software library which only gets updates once in a while.
85
+ >
86
+ > Setting the `$options['verify']` key to `true` when initiating a request enables certificate verification using the certificate authority list provided by the server environment, which is recommended.
87
+
88
+ The [documentation regarding Secure Requests with SSL](https://requests.ryanmccue.info/docs/usage-advanced.html#secure-requests-with-ssl) has also been updated to reflect this and it is recommended to have a read through.
89
+
90
+ The included certificates _file_ has now also been moved to a dedicated `/certificates` directory off the project root.
91
+
92
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [@wojsmol][gh-wojsmol], [@ZsgsDesign][gh-ZsgsDesign], [#535][gh-535], [#571][gh-571], [#577][gh-577], [#622][gh-622], [#632][gh-632])
93
+
94
+ - **New functionality**
95
+
96
+ The following new functionality has been added:
97
+ - A `public static` `WpOrg\Requests\Requests::has_capabilities($capabilities = array())` method is now available to check whether there is a transport available which supports the requested capabilities.
98
+ - A `public` `WpOrg\Requests\Response::decode_body($associative = true, $depth = 512, $options = 0)` method is now available to handle JSON-decoding a response body.
99
+ The method parameters correspond to the parameters of the PHP native [`json_decode()`](https://php.net/json-decode) function.
100
+ The method will throw an `WpOrg\Requests\Exception` when the response body is not valid JSON.
101
+ - A `WpOrg\Requests\Capability` interface. This interface provides constants for the known capabilities. Transports can be tested whether or not they support these capabilities.
102
+ Currently, the only capability supported is `Capability::SSL`.
103
+ - A `WpOrg\Requests\Port` class. This class encapsulates typical port numbers as constants and offers a `static` `Port::get($type)` method to retrieve a port number based on a request type.
104
+ Using this class when referring to port numbers is recommended.
105
+ - An `WpOrg\Requests\Exceptions\InvalidArgument` class. This class is intended for internal use only.
106
+ - An `WpOrg\Requests\Utility\InputValidator` class with helper methods for input validation. This class is intended for internal use only.
107
+
108
+ (props [@ccrims0n][gh-ccrims0n], [@dd32][gh-dd32], [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#167][gh-167], [#214][gh-214], [#250][gh-250], [#251][gh-251], [#492][gh-492], [#499][gh-499], [#538][gh-538], [#542][gh-542], [#547][gh-547], [#559][gh-559])
109
+
110
+ - **Changed functionality**
111
+
112
+ - The `WpOrg\Requests\Requests::decompress()` method has been fixed to recognize more compression levels and handle these correctly.
113
+ - The method signature of the `WpOrg\Requests\Transport::test()` interface method has been adjusted to enforce support for an optional `$capabilities` parameter.
114
+ The Request native `WpOrg\Requests\Transport\Curl::test()` and `WpOrg\Requests\Transport\Fsockopen::test()` methods both already supported this parameter.
115
+ - The `WpOrg\Requests\Transport\Curl::request()` and the `WpOrg\Requests\Transport\Fsockopen::request()` methods will now throw an `WpOrg\Requests\Exception` when the `$options['filename']` contains an invalid path.
116
+ - The `WpOrg\Requests\Transport\Curl::request()` method will no longer set the `CURLOPT_REFERER` option.
117
+ - The default value of the `$key` parameter in the `WpOrg\Requests\Cookie\Jar::normalize_cookie()` method has been changed from `null` to an empty string.
118
+
119
+ (props [@datagutten][gh-datagutten], [@dustinrue][gh-dustinrue], [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [@soulseekah][gh-soulseekah], [@twdnhfr][gh-twdnhfr], [#301][gh-301], [#309][gh-309], [#379][gh-379], [#444][gh-444], [#492][gh-492], [#610][gh-610])
120
+
121
+ - **Removed functionality**
122
+
123
+ The following methods, which were deprecated during the 1.x cycle, have now been removed:
124
+ - `Requests::flattern()`, use `WpOrg\Requests\Requests::flatten()` instead.
125
+ - `Requests_Cookie::formatForHeader()`, use `WpOrg\Requests\Cookie::format_for_header()` instead.
126
+ - `Requests_Cookie::formatForSetCookie()`, use `WpOrg\Requests\Cookie::format_for_set_cookie()` instead.
127
+ - `Requests_Cookie::parseFromHeaders()`, use `WpOrg\Requests\Cookie::parse_from_headers()` instead.
128
+ - `Requests_Cookie_Jar::normalizeCookie()`, use `WpOrg\Requests\Cookie\Jar::normalize_cookie()` instead
129
+
130
+ A duplicate method has been removed:
131
+ - `Requests::match_domain()`, use `WpOrg\Requests\Ssl::match_domain()` instead.
132
+
133
+ A redundant method has been removed:
134
+ - `Hooks::__construct()`.
135
+
136
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#510][gh-510], [#525][gh-525], [#617][gh-617])
137
+
138
+ - **Compatibility with PHP 8.0 named parameters**
139
+
140
+ All parameter names have been reviewed to prevent issues for users using PHP 8.0 named parameters and where relevant, a number of parameter names have been changed.
141
+
142
+ After this release, a parameter name rename will be treated as a breaking change (reserved for major releases) and will be marked as such in the changelog.
143
+
144
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#533][gh-533], [#560][gh-560], [#561][gh-561], [#599][gh-599], [#612][gh-612])
145
+
146
+ - **PHP 8.1 compatibility**
147
+
148
+ All known PHP 8.1 compatibility issues have been fixed and tests are now running (and passing) against PHP 8.1.
149
+
150
+ In case you still run into a PHP 8.1 deprecation notice or other PHP 8.1 related issue, please [open an issue to report it](https://github.com/WordPress/Requests/issues/new/choose).
151
+
152
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#498][gh-498], [#499][gh-499], [#500][gh-500], [#501][gh-501], [#505][gh-505], [#634][gh-634])
153
+
154
+ - **Updated documentation**
155
+
156
+ The [documentation website](https://requests.ryanmccue.info/) has been updated to reflect all the changes in Requests 2.0.0.
157
+
158
+ The [API documentation for Requests 2.x](https://requests.ryanmccue.info/api-2.x/) is now generated using [phpDocumentor](https://www.phpdoc.org/) :heart: and available on the website.
159
+ For the time being, the [Requests 1.x API documentation](https://requests.ryanmccue.info/api/) will still be available on the website as well.
160
+
161
+ (props [@costdev][gh-costdev], [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [@szepeviktor][gh-szepeviktor], [#476][gh-476], [#480][gh-480], [#489][gh-489], [#495][gh-495], [#526][gh-526], [#528][gh-528], [#532][gh-532], [#543][gh-543], [#562][gh-562], [#578][gh-578], [#590][gh-590], [#606][gh-606], [#607][gh-607], [#608][gh-608], [#618][gh-618], [#622][gh-622], [#625][gh-625], [#626][gh-626], [#630][gh-630], [#642][gh-642])
162
+
163
+ - **General housekeeping**
164
+
165
+ - In a number of places, code modernizations, possible now the minimum PHP version has gone up to PHP 5.6, have been applied.
166
+ ([#504][gh-504], [#506][gh-506], [#512][gh-512], [#539][gh-539], [#541][gh-541], [#599][gh-599], [#623][gh-623])
167
+
168
+ - Lots of improvements were made to render the tests more reliable and increase the coverage.
169
+ ([#446][gh-446], [#459][gh-459], [#472][gh-472], [#503][gh-503], [#508][gh-508], [#511][gh-511], [#520][gh-520], [#521][gh-521], [#548][gh-548], [#549][gh-549], [#550][gh-550], [#551][gh-551], [#552][gh-552], [#553][gh-553], [#554][gh-554], [#555][gh-555], [#556][gh-556], [#557][gh-557], [#558][gh-558], [#566][gh-566], [#581][gh-581], [#591][gh-591], [#595][gh-595], [#640][gh-640])
170
+
171
+ - The move for all CI to GitHub Actions has been finalized. Travis is dead, long live Travis and thanks for all the fish.
172
+ ([#447][gh-447], [#575][gh-575], [#579][gh-579])
173
+
174
+ - A GitHub Actions workflow has been put in place to allow for automatically updating the website on releases.
175
+ This should allow for more rapid releases from now on.
176
+ ([#466][gh-466], [#544][gh-544], [#545][gh-545], [#563][gh-563], [#569][gh-569], [#583][gh-583], [#626][gh-626])
177
+
178
+ - Development-only dependencies have been updated.
179
+ ([#516][gh-516], [#517][gh-517])
180
+
181
+ - Various other general housekeeping and improvements for contributors.
182
+ ([#488][gh-488], [#491][gh-491], [#523][gh-523], [#513][gh-513], [#515][gh-515], [#522][gh-522], [#524][gh-524], [#531][gh-531], [#535][gh-535], [#536][gh-536], [#537][gh-537], [#540][gh-540], [#588][gh-588], [#616][gh-616])
183
+
184
+ (props [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera])
185
+
186
+ [gh-642]: https://github.com/WordPress/Requests/pull/642
187
+ [gh-640]: https://github.com/WordPress/Requests/pull/640
188
+ [gh-634]: https://github.com/WordPress/Requests/pull/634
189
+ [gh-632]: https://github.com/WordPress/Requests/pull/632
190
+ [gh-630]: https://github.com/WordPress/Requests/pull/630
191
+ [gh-629]: https://github.com/WordPress/Requests/pull/629
192
+ [gh-626]: https://github.com/WordPress/Requests/pull/626
193
+ [gh-625]: https://github.com/WordPress/Requests/pull/625
194
+ [gh-623]: https://github.com/WordPress/Requests/pull/623
195
+ [gh-622]: https://github.com/WordPress/Requests/pull/622
196
+ [gh-621]: https://github.com/WordPress/Requests/pull/621
197
+ [gh-620]: https://github.com/WordPress/Requests/pull/620
198
+ [gh-618]: https://github.com/WordPress/Requests/pull/618
199
+ [gh-617]: https://github.com/WordPress/Requests/pull/617
200
+ [gh-616]: https://github.com/WordPress/Requests/pull/616
201
+ [gh-615]: https://github.com/WordPress/Requests/pull/615
202
+ [gh-614]: https://github.com/WordPress/Requests/pull/614
203
+ [gh-613]: https://github.com/WordPress/Requests/pull/613
204
+ [gh-612]: https://github.com/WordPress/Requests/pull/612
205
+ [gh-611]: https://github.com/WordPress/Requests/pull/611
206
+ [gh-610]: https://github.com/WordPress/Requests/pull/610
207
+ [gh-609]: https://github.com/WordPress/Requests/pull/609
208
+ [gh-608]: https://github.com/WordPress/Requests/pull/608
209
+ [gh-607]: https://github.com/WordPress/Requests/pull/607
210
+ [gh-606]: https://github.com/WordPress/Requests/pull/606
211
+ [gh-605]: https://github.com/WordPress/Requests/pull/605
212
+ [gh-604]: https://github.com/WordPress/Requests/pull/604
213
+ [gh-603]: https://github.com/WordPress/Requests/pull/603
214
+ [gh-602]: https://github.com/WordPress/Requests/pull/602
215
+ [gh-601]: https://github.com/WordPress/Requests/pull/601
216
+ [gh-599]: https://github.com/WordPress/Requests/pull/599
217
+ [gh-595]: https://github.com/WordPress/Requests/pull/595
218
+ [gh-594]: https://github.com/WordPress/Requests/pull/594
219
+ [gh-593]: https://github.com/WordPress/Requests/issues/593
220
+ [gh-592]: https://github.com/WordPress/Requests/pull/592
221
+ [gh-591]: https://github.com/WordPress/Requests/pull/591
222
+ [gh-590]: https://github.com/WordPress/Requests/issues/590
223
+ [gh-588]: https://github.com/WordPress/Requests/pull/588
224
+ [gh-587]: https://github.com/WordPress/Requests/pull/587
225
+ [gh-586]: https://github.com/WordPress/Requests/pull/586
226
+ [gh-583]: https://github.com/WordPress/Requests/pull/583
227
+ [gh-581]: https://github.com/WordPress/Requests/pull/581
228
+ [gh-579]: https://github.com/WordPress/Requests/pull/579
229
+ [gh-578]: https://github.com/WordPress/Requests/pull/578
230
+ [gh-577]: https://github.com/WordPress/Requests/pull/577
231
+ [gh-575]: https://github.com/WordPress/Requests/pull/575
232
+ [gh-574]: https://github.com/WordPress/Requests/pull/574
233
+ [gh-573]: https://github.com/WordPress/Requests/pull/573
234
+ [gh-572]: https://github.com/WordPress/Requests/pull/572
235
+ [gh-571]: https://github.com/WordPress/Requests/pull/571
236
+ [gh-569]: https://github.com/WordPress/Requests/pull/569
237
+ [gh-566]: https://github.com/WordPress/Requests/pull/566
238
+ [gh-563]: https://github.com/WordPress/Requests/pull/563
239
+ [gh-562]: https://github.com/WordPress/Requests/pull/562
240
+ [gh-561]: https://github.com/WordPress/Requests/pull/561
241
+ [gh-560]: https://github.com/WordPress/Requests/pull/560
242
+ [gh-559]: https://github.com/WordPress/Requests/pull/559
243
+ [gh-558]: https://github.com/WordPress/Requests/pull/558
244
+ [gh-557]: https://github.com/WordPress/Requests/pull/557
245
+ [gh-556]: https://github.com/WordPress/Requests/pull/556
246
+ [gh-555]: https://github.com/WordPress/Requests/pull/555
247
+ [gh-554]: https://github.com/WordPress/Requests/pull/554
248
+ [gh-553]: https://github.com/WordPress/Requests/pull/553
249
+ [gh-552]: https://github.com/WordPress/Requests/pull/552
250
+ [gh-551]: https://github.com/WordPress/Requests/pull/551
251
+ [gh-550]: https://github.com/WordPress/Requests/pull/550
252
+ [gh-549]: https://github.com/WordPress/Requests/pull/549
253
+ [gh-548]: https://github.com/WordPress/Requests/pull/548
254
+ [gh-547]: https://github.com/WordPress/Requests/pull/547
255
+ [gh-545]: https://github.com/WordPress/Requests/pull/545
256
+ [gh-544]: https://github.com/WordPress/Requests/pull/544
257
+ [gh-543]: https://github.com/WordPress/Requests/pull/543
258
+ [gh-542]: https://github.com/WordPress/Requests/pull/542
259
+ [gh-541]: https://github.com/WordPress/Requests/pull/541
260
+ [gh-540]: https://github.com/WordPress/Requests/pull/540
261
+ [gh-539]: https://github.com/WordPress/Requests/pull/539
262
+ [gh-538]: https://github.com/WordPress/Requests/pull/538
263
+ [gh-537]: https://github.com/WordPress/Requests/pull/537
264
+ [gh-536]: https://github.com/WordPress/Requests/pull/536
265
+ [gh-535]: https://github.com/WordPress/Requests/pull/535
266
+ [gh-534]: https://github.com/WordPress/Requests/pull/534
267
+ [gh-533]: https://github.com/WordPress/Requests/issues/533
268
+ [gh-532]: https://github.com/WordPress/Requests/pull/532
269
+ [gh-531]: https://github.com/WordPress/Requests/pull/531
270
+ [gh-528]: https://github.com/WordPress/Requests/pull/528
271
+ [gh-526]: https://github.com/WordPress/Requests/pull/526
272
+ [gh-525]: https://github.com/WordPress/Requests/pull/525
273
+ [gh-524]: https://github.com/WordPress/Requests/pull/524
274
+ [gh-523]: https://github.com/WordPress/Requests/pull/523
275
+ [gh-522]: https://github.com/WordPress/Requests/pull/522
276
+ [gh-521]: https://github.com/WordPress/Requests/pull/521
277
+ [gh-520]: https://github.com/WordPress/Requests/pull/520
278
+ [gh-519]: https://github.com/WordPress/Requests/pull/519
279
+ [gh-517]: https://github.com/WordPress/Requests/pull/517
280
+ [gh-516]: https://github.com/WordPress/Requests/pull/516
281
+ [gh-515]: https://github.com/WordPress/Requests/issues/515
282
+ [gh-514]: https://github.com/WordPress/Requests/issues/514
283
+ [gh-513]: https://github.com/WordPress/Requests/issues/513
284
+ [gh-512]: https://github.com/WordPress/Requests/issues/512
285
+ [gh-511]: https://github.com/WordPress/Requests/pull/511
286
+ [gh-510]: https://github.com/WordPress/Requests/pull/510
287
+ [gh-509]: https://github.com/WordPress/Requests/pull/509
288
+ [gh-508]: https://github.com/WordPress/Requests/pull/508
289
+ [gh-506]: https://github.com/WordPress/Requests/pull/506
290
+ [gh-505]: https://github.com/WordPress/Requests/pull/505
291
+ [gh-504]: https://github.com/WordPress/Requests/pull/504
292
+ [gh-503]: https://github.com/WordPress/Requests/pull/503
293
+ [gh-501]: https://github.com/WordPress/Requests/pull/501
294
+ [gh-500]: https://github.com/WordPress/Requests/pull/500
295
+ [gh-499]: https://github.com/WordPress/Requests/pull/499
296
+ [gh-498]: https://github.com/WordPress/Requests/issues/498
297
+ [gh-498]: https://github.com/WordPress/Requests/issues/495
298
+ [gh-492]: https://github.com/WordPress/Requests/pull/492
299
+ [gh-491]: https://github.com/WordPress/Requests/pull/491
300
+ [gh-490]: https://github.com/WordPress/Requests/pull/490
301
+ [gh-489]: https://github.com/WordPress/Requests/pull/489
302
+ [gh-488]: https://github.com/WordPress/Requests/pull/488
303
+ [gh-480]: https://github.com/WordPress/Requests/issues/480
304
+ [gh-476]: https://github.com/WordPress/Requests/issues/476
305
+ [gh-472]: https://github.com/WordPress/Requests/issues/472
306
+ [gh-470]: https://github.com/WordPress/Requests/pull/470
307
+ [gh-466]: https://github.com/WordPress/Requests/issues/466
308
+ [gh-463]: https://github.com/WordPress/Requests/issues/463
309
+ [gh-460]: https://github.com/WordPress/Requests/issues/460
310
+ [gh-459]: https://github.com/WordPress/Requests/issues/459
311
+ [gh-447]: https://github.com/WordPress/Requests/pull/447
312
+ [gh-446]: https://github.com/WordPress/Requests/pull/446
313
+ [gh-444]: https://github.com/WordPress/Requests/pull/444
314
+ [gh-379]: https://github.com/WordPress/Requests/pull/379
315
+ [gh-378]: https://github.com/WordPress/Requests/issues/378
316
+ [gh-309]: https://github.com/WordPress/Requests/pull/309
317
+ [gh-301]: https://github.com/WordPress/Requests/issues/301
318
+ [gh-251]: https://github.com/WordPress/Requests/pull/251
319
+ [gh-250]: https://github.com/WordPress/Requests/issues/250
320
+ [gh-214]: https://github.com/WordPress/Requests/pull/214
321
+ [gh-167]: https://github.com/WordPress/Requests/issues/167
322
+
323
+ 1.8.1
324
+ -----
325
+
326
+ ### Overview of changes
327
+ - The `Requests::VERSION` constant has been updated to reflect the actual version for the release. [@jrfnl][gh-jrfnl], [#485][gh-485]
328
+ - Update the `.gitattributes` file to include fewer files in the distribution. [@mbabker][gh-mbabker], [#484][gh-484]
329
+ - Added a release checklist. [@jrfnl][gh-jrfnl], [#483][gh-483]
330
+ - Various minor updates to the documentation and the website. [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#477][gh-477], [#478][gh-478], [#479][gh-479], [#481][gh-481], [#482][gh-482]
331
+
332
+ [gh-477]: https://github.com/WordPress/Requests/issues/477
333
+ [gh-478]: https://github.com/WordPress/Requests/issues/478
334
+ [gh-479]: https://github.com/WordPress/Requests/issues/479
335
+ [gh-481]: https://github.com/WordPress/Requests/issues/481
336
+ [gh-482]: https://github.com/WordPress/Requests/issues/482
337
+ [gh-483]: https://github.com/WordPress/Requests/issues/483
338
+ [gh-484]: https://github.com/WordPress/Requests/issues/484
339
+ [gh-485]: https://github.com/WordPress/Requests/issues/485
340
+
341
+
342
+ 1.8.0
343
+ -----
344
+
345
+ ### IMPORTANT NOTES
346
+
347
+ #### Last release supporting PHP 5.2 - 5.5
348
+
349
+ Release 1.8.0 will be the last release with compatibility for PHP 5.2 - 5.5. With the next release (v2.0.0), the minimum PHP version will be bumped to 5.6.
350
+
351
+ #### Last release supporting PEAR distribution
352
+
353
+ Release 1.8.0 will be the last release to be distributed via PEAR. From release 2.0.0 onwards, consumers of this library will have to switch to Composer to receive updates.
354
+
355
+ ### Overview of changes
356
+
357
+ - **[SECURITY FIX] Disable deserialization in `FilteredIterator`**
358
+
359
+ A `Deserialization of Untrusted Data` weakness was found in the `FilteredIterator` class.
360
+
361
+ This security vulnerability was first reported to the WordPress project. The security fix applied to WordPress has been ported back into the library.
362
+
363
+ GitHub security advisory: [Insecure Deserialization of untrusted data](https://github.com/WordPress/Requests/security/advisories/GHSA-52qp-jpq7-6c54)
364
+
365
+ CVE: [CVE-2021-29476 - Deserialization of Untrusted Data](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-29476)
366
+
367
+ Related WordPress CVE: [https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-28032](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-28032)
368
+
369
+ (props [@dd32][gh-dd32], [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@peterwilsoncc][gh-peterwilsoncc], [@SergeyBiryukov][gh-SergeyBiryukov], [@whyisjake][gh-whyisjake], [@xknown][gh-xknown], [#421][gh-421], [#422][gh-422])
370
+
371
+
372
+ - **Repository moved to `WordPress\Requests`**
373
+
374
+ The `Requests` library has been moved to the WordPress GitHub organization and can now be found under `https://github.com/WordPress/Requests`.
375
+
376
+ All links in code and documentation were updated accordingly.
377
+
378
+ Note: the Composer package name remains unchanged ([`rmccue/requests`](https://packagist.org/packages/rmccue/requests)), as well as the documentation site ([requests.ryanmccue.info](https://requests.ryanmccue.info/)).
379
+
380
+ (props [@dd32][gh-dd32], [@JustinyAhin][gh-JustinyAhin], [@jrfnl][gh-jrfnl], [@rmccue][gh-rmccue], [#440][gh-440], [#441][gh-441], [#448][gh-448])
381
+
382
+
383
+ - **Manage `"Expect"` header with `cURL` transport**
384
+
385
+ By default, `cURL` adds a `Expect: 100-Continue` header to certain requests. This can add as much as a second delay to requests done using `cURL`. This is [discussed on the cURL mailing list](https://curl.se/mail/lib-2017-07/0013.html).
386
+
387
+ To prevent this, `Requests` now adds an empty `"Expect"` header to requests that are smaller than 1 MB and use HTTP/1.1.
388
+
389
+ (props [@carlalexander][gh-carlalexander], [@schlessera][gh-schlessera], [@TimothyBJacobs][gh-TimothyBJacobs], [#453][gh-453], [#454][gh-454], [#469][gh-469])
390
+
391
+
392
+ - **Update bundled certificates as of 2021-02-12**
393
+
394
+ The bundled certificates were updated. A small subset of expired certificates are still included for legacy reasons (and support).
395
+
396
+ (props [@ozh][gh-ozh], [@patmead][gh-patmead], [@schlessera][gh-schlessera], [@todeveni][gh-todeveni], [#385][gh-385], [#398][gh-398], [#451][gh-451])
397
+
398
+
399
+ - **Add required `Content-*` headers for empty `POST` requests**
400
+
401
+ Sends the `Content-Length` and `Content-Type` headers even for empty `POST` requests, as the length is expected as per [RFC2616 Section 14.13](https://tools.ietf.org/html/rfc2616#section-14.13):
402
+ ```
403
+ Content-Length header "SHOULD" be included. In practice, it is not
404
+ used for GET nor HEAD requests, but is expected for POST requests.
405
+ ```
406
+
407
+ (props [@dd32][gh-dd32], [@gstrauss][gh-gstrauss], [@jrfnl][gh-jrfnl], [@soulseekah][gh-soulseekah], [#248][gh-248], [#249][gh-249], [#318][gh-318], [#368][gh-368])
408
+
409
+
410
+ - **Ignore locale when creating the HTTP version string from a float**
411
+
412
+ The previous behavior allowed for the locale to mess up the float to string conversion resulting in a `GET / HTTP/1,1` instead of `GET / HTTP/1.1` request.
413
+
414
+ (props [@tonebender][gh-tonebender], [@Zegnat][gh-Zegnat], [#335][gh-335], [#339][gh-339])
415
+
416
+
417
+ - **Make `verify => false` work with `fsockopen`**
418
+
419
+ This allows the `fsockopen` transport now to ignore SSL failures when requested.
420
+
421
+ (props [@soulseekah][gh-soulseekah], [#310][gh-310], [#311][gh-311])
422
+
423
+
424
+ - **Only include port number in the `Host` header if it differs from the default**
425
+
426
+ The code was not violating the RFC per se, but also not following standard practice of leaving the port off when it is the default port for the scheme, which could lead to connectivity issues.
427
+
428
+ (props [@amandato][gh-amandato], [@dd32][gh-dd32], [#238][gh-238])
429
+
430
+
431
+ - **Fix PHP cross-version compatibility**
432
+
433
+ Important fixes have been made to improve cross-version compatibility of the code across all supported PHP versions.
434
+
435
+ - Use documented order for `implode()` arguments.
436
+ - Harden type handling when no domain was passed.
437
+ - Explicitly cast `$url` property to `string` in `Requests::parse_response()`.
438
+ - Initialize `$body` property to an empty string in `Requests::parse_response()`.
439
+ - Ensure the stream handle is valid before trying to close it.
440
+ - Ensure the `$callback` in the `FilteredIterator` is callable before calling it.
441
+
442
+ (props [@aaronjorbin][gh-aaronjorbin], [@jrfnl][gh-jrfnl], [#346][gh-346], [#370][gh-370], [#425][gh-425], [#426][gh-426], [#456][gh-456], [#457][gh-457])
443
+
444
+
445
+ - **Improve testing**
446
+
447
+ Lots of improvements were made to render the tests more reliable and increase the coverage.
448
+
449
+ And to top it all off, all tests are now run against all supported PHP versions, including PHP 8.0.
450
+
451
+ (props [@datagutten][gh-datagutten], [@jrfnl][gh-jrfnl], [@schlessera][gh-schlessera], [#345][gh-345], [#351][gh-351], [#355][gh-355], [#366][gh-366], [#412][gh-412], [#414][gh-414], [#445][gh-445], [#458][gh-458], [#464][gh-464])
452
+
453
+
454
+ - **Improve code quality and style**
455
+
456
+ A whole swoop of changes has been made to harden the code and make it more consistent.
457
+
458
+ The code style has been made consistent across both code and tests and is now enforced via a custom PHPCS rule set.
459
+
460
+ The WordPress Coding Standards were chosen as the basis for the code style checks as most contributors to this library originate from the WordPress community and will be familiar with this code style.
461
+
462
+ Main differences from the WordPress Coding Standards based on discussions and an analysis of the code styles already in use:
463
+
464
+ - No whitespace on the inside of parentheses.
465
+ - No Yoda conditions.
466
+
467
+ A more detailed overview of the decisions that went into the final code style rules can be found at [#434][gh-434].
468
+
469
+ (props [@jrfnl][gh-jrfnl], [@KasperFranz][gh-KasperFranz], [@ozh][gh-ozh], [@schlessera][gh-schlessera], [@TysonAndre][gh-TysonAndre], [#263][gh-263], [#296][gh-296], [#328][gh-328], [#358][gh-358], [#359][gh-359], [#360][gh-360], [#361][gh-361], [#362][gh-362], [#363][gh-363], [#364][gh-364], [#386][gh-386], [#396][gh-396], [#399][gh-399], [#400][gh-400], [#401][gh-401], [#402][gh-402], [#403][gh-403], [#404][gh-404], [#405][gh-405], [#406][gh-406], [#408][gh-408], [#409][gh-409], [#410][gh-410], [#411][gh-411], [#413][gh-413], [#415][gh-415], [#416][gh-416], [#417][gh-417], [#423][gh-423], [#424][gh-424], [#434][gh-434])
470
+
471
+
472
+ - **Replace Travis CI with GitHub Actions (partial)**
473
+
474
+ The entire CI setup is gradually being moved from Travis CI to GitHub Actions.
475
+
476
+ At this point, GitHub Actions takes over the CI from PHP 5.5 onwards, leaving Travis CI as a fallback for lower PHP versions.
477
+
478
+ This move will be completed after the planned minimum version bump to PHP 5.6+ with the next release, at which point we will get rid of all the remaining Travis CI integrations.
479
+
480
+ (props [@dd32][gh-dd32], [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@ntwb][gh-ntwb], [@ozh][gh-ozh], [@schlessera][gh-schlessera], [@TimothyBJacobs][gh-TimothyBJacobs], [@TysonAndre][gh-TysonAndre], [#280][gh-280], [#298][gh-298], [#302][gh-302], [#303][gh-303], [#352][gh-352], [#353][gh-353], [#354][gh-354], [#356][gh-356], [#388][gh-388], [#397][gh-397], [#428][gh-428], [#436][gh-436], [#439][gh-439], [#461][gh-461], [#467][gh-467])
481
+
482
+
483
+ - **Update and improve documentation**
484
+ - Use clearer and more inclusive language.
485
+ - Update the GitHub Pages site.
486
+ - Update content and various tweaks to the markdown.
487
+ - Fix code blocks in `README.md` file.
488
+ - Add pagination to documentation pages.
489
+
490
+ (props [@desrosj][gh-desrosj], [@jrfnl][gh-jrfnl], [@JustinyAhin][gh-JustinyAhin], [@tnorthcutt][gh-tnorthcutt], [#334][gh-334], [#367][gh-367], [#387][gh-387], [#443][gh-443], [#462][gh-462], [#465][gh-465], [#468][gh-468], [#471][gh-471] )
491
+
492
+ [gh-194]: https://github.com/WordPress/Requests/issues/194
493
+ [gh-238]: https://github.com/WordPress/Requests/issues/238
494
+ [gh-248]: https://github.com/WordPress/Requests/issues/248
495
+ [gh-249]: https://github.com/WordPress/Requests/issues/249
496
+ [gh-263]: https://github.com/WordPress/Requests/issues/263
497
+ [gh-280]: https://github.com/WordPress/Requests/issues/280
498
+ [gh-296]: https://github.com/WordPress/Requests/issues/296
499
+ [gh-298]: https://github.com/WordPress/Requests/issues/298
500
+ [gh-302]: https://github.com/WordPress/Requests/issues/302
501
+ [gh-303]: https://github.com/WordPress/Requests/issues/303
502
+ [gh-310]: https://github.com/WordPress/Requests/issues/310
503
+ [gh-311]: https://github.com/WordPress/Requests/issues/311
504
+ [gh-318]: https://github.com/WordPress/Requests/issues/318
505
+ [gh-328]: https://github.com/WordPress/Requests/issues/328
506
+ [gh-334]: https://github.com/WordPress/Requests/issues/334
507
+ [gh-335]: https://github.com/WordPress/Requests/issues/335
508
+ [gh-339]: https://github.com/WordPress/Requests/issues/339
509
+ [gh-345]: https://github.com/WordPress/Requests/issues/345
510
+ [gh-346]: https://github.com/WordPress/Requests/issues/346
511
+ [gh-351]: https://github.com/WordPress/Requests/issues/351
512
+ [gh-352]: https://github.com/WordPress/Requests/issues/352
513
+ [gh-353]: https://github.com/WordPress/Requests/issues/353
514
+ [gh-354]: https://github.com/WordPress/Requests/issues/354
515
+ [gh-355]: https://github.com/WordPress/Requests/issues/355
516
+ [gh-356]: https://github.com/WordPress/Requests/issues/356
517
+ [gh-358]: https://github.com/WordPress/Requests/issues/358
518
+ [gh-359]: https://github.com/WordPress/Requests/issues/359
519
+ [gh-360]: https://github.com/WordPress/Requests/issues/360
520
+ [gh-361]: https://github.com/WordPress/Requests/issues/361
521
+ [gh-362]: https://github.com/WordPress/Requests/issues/362
522
+ [gh-363]: https://github.com/WordPress/Requests/issues/363
523
+ [gh-364]: https://github.com/WordPress/Requests/issues/364
524
+ [gh-366]: https://github.com/WordPress/Requests/issues/366
525
+ [gh-367]: https://github.com/WordPress/Requests/issues/367
526
+ [gh-367]: https://github.com/WordPress/Requests/issues/367
527
+ [gh-368]: https://github.com/WordPress/Requests/issues/368
528
+ [gh-370]: https://github.com/WordPress/Requests/issues/370
529
+ [gh-385]: https://github.com/WordPress/Requests/issues/385
530
+ [gh-386]: https://github.com/WordPress/Requests/issues/386
531
+ [gh-387]: https://github.com/WordPress/Requests/issues/387
532
+ [gh-388]: https://github.com/WordPress/Requests/issues/388
533
+ [gh-396]: https://github.com/WordPress/Requests/issues/396
534
+ [gh-397]: https://github.com/WordPress/Requests/issues/397
535
+ [gh-398]: https://github.com/WordPress/Requests/issues/398
536
+ [gh-399]: https://github.com/WordPress/Requests/issues/399
537
+ [gh-400]: https://github.com/WordPress/Requests/issues/400
538
+ [gh-401]: https://github.com/WordPress/Requests/issues/401
539
+ [gh-402]: https://github.com/WordPress/Requests/issues/402
540
+ [gh-403]: https://github.com/WordPress/Requests/issues/403
541
+ [gh-404]: https://github.com/WordPress/Requests/issues/404
542
+ [gh-405]: https://github.com/WordPress/Requests/issues/405
543
+ [gh-406]: https://github.com/WordPress/Requests/issues/406
544
+ [gh-408]: https://github.com/WordPress/Requests/issues/408
545
+ [gh-409]: https://github.com/WordPress/Requests/issues/409
546
+ [gh-410]: https://github.com/WordPress/Requests/issues/410
547
+ [gh-411]: https://github.com/WordPress/Requests/issues/411
548
+ [gh-412]: https://github.com/WordPress/Requests/issues/412
549
+ [gh-413]: https://github.com/WordPress/Requests/issues/413
550
+ [gh-414]: https://github.com/WordPress/Requests/issues/414
551
+ [gh-415]: https://github.com/WordPress/Requests/issues/415
552
+ [gh-416]: https://github.com/WordPress/Requests/issues/416
553
+ [gh-417]: https://github.com/WordPress/Requests/issues/417
554
+ [gh-421]: https://github.com/WordPress/Requests/issues/421
555
+ [gh-422]: https://github.com/WordPress/Requests/issues/422
556
+ [gh-423]: https://github.com/WordPress/Requests/issues/423
557
+ [gh-424]: https://github.com/WordPress/Requests/issues/424
558
+ [gh-425]: https://github.com/WordPress/Requests/issues/425
559
+ [gh-426]: https://github.com/WordPress/Requests/issues/426
560
+ [gh-428]: https://github.com/WordPress/Requests/issues/428
561
+ [gh-434]: https://github.com/WordPress/Requests/issues/434
562
+ [gh-436]: https://github.com/WordPress/Requests/issues/436
563
+ [gh-439]: https://github.com/WordPress/Requests/issues/439
564
+ [gh-440]: https://github.com/WordPress/Requests/issues/440
565
+ [gh-441]: https://github.com/WordPress/Requests/issues/441
566
+ [gh-443]: https://github.com/WordPress/Requests/issues/443
567
+ [gh-445]: https://github.com/WordPress/Requests/issues/445
568
+ [gh-448]: https://github.com/WordPress/Requests/issues/448
569
+ [gh-451]: https://github.com/WordPress/Requests/issues/451
570
+ [gh-453]: https://github.com/WordPress/Requests/issues/453
571
+ [gh-454]: https://github.com/WordPress/Requests/issues/454
572
+ [gh-456]: https://github.com/WordPress/Requests/issues/456
573
+ [gh-457]: https://github.com/WordPress/Requests/issues/457
574
+ [gh-458]: https://github.com/WordPress/Requests/issues/458
575
+ [gh-461]: https://github.com/WordPress/Requests/issues/461
576
+ [gh-462]: https://github.com/WordPress/Requests/issues/462
577
+ [gh-464]: https://github.com/WordPress/Requests/issues/464
578
+ [gh-465]: https://github.com/WordPress/Requests/issues/465
579
+ [gh-467]: https://github.com/WordPress/Requests/issues/467
580
+ [gh-468]: https://github.com/WordPress/Requests/issues/468
581
+ [gh-469]: https://github.com/WordPress/Requests/issues/469
582
+ [gh-471]: https://github.com/WordPress/Requests/issues/471
583
+
584
+ 1.7.0
585
+ -----
586
+
587
+ - Add support for HHVM and PHP 7
588
+
589
+ Requests is now tested against both HHVM and PHP 7, and they are supported as
590
+ first-party platforms.
591
+
592
+ (props [@rmccue][gh-rmccue], [#106][gh-106], [#176][gh-176])
593
+
594
+ - Transfer & connect timeouts, in seconds & milliseconds
595
+
596
+ cURL is unable to handle timeouts under a second in DNS lookups, so we round
597
+ those up to ensure 1-999ms isn't counted as an instant failure.
598
+
599
+ (props [@ozh][gh-ozh], [@rmccue][gh-rmccue], [#97][gh-97], [#216][gh-216])
600
+
601
+ - Rework cookie handling to be more thorough.
602
+
603
+ Cookies are now restricted to the same-origin by default, expiration is checked.
604
+
605
+ (props [@catharsisjelly][gh-catharsisjelly], [@rmccue][gh-rmccue], [#120][gh-120], [#124][gh-124], [#130][gh-130], [#132][gh-132], [#156][gh-156])
606
+
607
+ - Improve testing
608
+
609
+ Tests are now run locally to speed them up, as well as further general
610
+ improvements to the quality of the testing suite. There are now also
611
+ comprehensive proxy tests to ensure coverage there.
612
+
613
+ (props [@rmccue][gh-rmccue], [#75][gh-75], [#107][gh-107], [#170][gh-170], [#177][gh-177], [#181][gh-181], [#183][gh-183], [#185][gh-185], [#196][gh-196], [#202][gh-202], [#203][gh-203])
614
+
615
+ - Support custom HTTP methods
616
+
617
+ Previously, custom HTTP methods were only supported on sockets; they are now
618
+ supported across all transports.
619
+
620
+ (props [@ocean90][gh-ocean90], [#227][gh-227])
621
+
622
+ - Add byte limit option
623
+
624
+ (props [@rmccue][gh-rmccue], [#172][gh-172])
625
+
626
+ - Support a Requests_Proxy_HTTP() instance for the proxy setting.
627
+
628
+ (props [@ocean90][gh-ocean90], [#223][gh-223])
629
+
630
+ - Add progress hook
631
+
632
+ (props [@rmccue][gh-rmccue], [#180][gh-180])
633
+
634
+ - Add a before_redirect hook to alter redirects
635
+
636
+ (props [@rmccue][gh-rmccue], [#205][gh-205])
637
+
638
+ - Pass cURL info to after_request
639
+
640
+ (props [@rmccue][gh-rmccue], [#206][gh-206])
641
+
642
+ - Remove explicit autoload in Composer installation instructions
643
+
644
+ (props [@SlikNL][gh-SlikNL], [#86][gh-86])
645
+
646
+ - Restrict CURLOPT_PROTOCOLS on `defined()` instead of `version_compare()`
647
+
648
+ (props [@ozh][gh-ozh], [#92][gh-92])
649
+
650
+ - Fix doc - typo in "Authentication"
651
+
652
+ (props [@remik][gh-remik], [#99][gh-99])
653
+
654
+ - Contextually check for a valid transport
655
+
656
+ (props [@ozh][gh-ozh], [#101][gh-101])
657
+
658
+ - Follow relative redirects correctly
659
+
660
+ (props [@ozh][gh-ozh], [#103][gh-103])
661
+
662
+ - Use cURL's version_number
663
+
664
+ (props [@mishan][gh-mishan], [#104][gh-104])
665
+
666
+ - Removed duplicated option docs
667
+
668
+ (props [@staabm][gh-staabm], [#112][gh-112])
669
+
670
+ - code styling fixed
671
+
672
+ (props [@imsaintx][gh-imsaintx], [#113][gh-113])
673
+
674
+ - Fix IRI "normalization"
675
+
676
+ (props [@ozh][gh-ozh], [#128][gh-128])
677
+
678
+ - Mention two PHP extension dependencies in the README.
679
+
680
+ (props [@orlitzky][gh-orlitzky], [#136][gh-136])
681
+
682
+ - Ignore coverage report files
683
+
684
+ (props [@ozh][gh-ozh], [#148][gh-148])
685
+
686
+ - drop obsolete "return" after throw
687
+
688
+ (props [@staabm][gh-staabm], [#150][gh-150])
689
+
690
+ - Updated exception message to specify both http + https
691
+
692
+ (props [@beutnagel][gh-beutnagel], [#162][gh-162])
693
+
694
+ - Sets `stream_headers` method to public to allow calling it from other
695
+ places.
696
+
697
+ (props [@adri][gh-adri], [#158][gh-158])
698
+
699
+ - Remove duplicated stream_get_meta_data call
700
+
701
+ (props [@rmccue][gh-rmccue], [#179][gh-179])
702
+
703
+ - Transmits $errno from stream_socket_client in exception
704
+
705
+ (props [@laurentmartelli][gh-laurentmartelli], [#174][gh-174])
706
+
707
+ - Correct methods to use snake_case
708
+
709
+ (props [@rmccue][gh-rmccue], [#184][gh-184])
710
+
711
+ - Improve code quality
712
+
713
+ (props [@rmccue][gh-rmccue], [#186][gh-186])
714
+
715
+ - Update Build Status image
716
+
717
+ (props [@rmccue][gh-rmccue], [#187][gh-187])
718
+
719
+ - Fix/Rationalize transports (v2)
720
+
721
+ (props [@rmccue][gh-rmccue], [#188][gh-188])
722
+
723
+ - Surface cURL errors
724
+
725
+ (props [@ifwe][gh-ifwe], [#194][gh-194])
726
+
727
+ - Fix for memleak and curl_close() never being called
728
+
729
+ (props [@kwuerl][gh-kwuerl], [#200][gh-200])
730
+
731
+ - addex how to install with composer
732
+
733
+ (props [@royopa][gh-royopa], [#164][gh-164])
734
+
735
+ - Uppercase the method to ensure compatibility
736
+
737
+ (props [@rmccue][gh-rmccue], [#207][gh-207])
738
+
739
+ - Store default certificate path
740
+
741
+ (props [@rmccue][gh-rmccue], [#210][gh-210])
742
+
743
+ - Force closing keep-alive connections on old cURL
744
+
745
+ (props [@rmccue][gh-rmccue], [#211][gh-211])
746
+
747
+ - Docs: Updated HTTP links with HTTPS links where applicable
748
+
749
+ (props [@ntwb][gh-ntwb], [#215][gh-215])
750
+
751
+ - Remove the executable bit
752
+
753
+ (props [@ocean90][gh-ocean90], [#224][gh-224])
754
+
755
+ - Change more links to HTTPS
756
+
757
+ (props [@rmccue][gh-rmccue], [#217][gh-217])
758
+
759
+ - Bail from cURL when either `curl_init()` OR `curl_exec()` are unavailable
760
+
761
+ (props [@dd32][gh-dd32], [#230][gh-230])
762
+
763
+ - Disable OpenSSL's internal peer_name checking when `verifyname` is disabled.
764
+
765
+ (props [@dd32][gh-dd32], [#239][gh-239])
766
+
767
+ - Only include the port number in the `Host` header when it differs from
768
+ default
769
+
770
+ (props [@dd32][gh-dd32], [#238][gh-238])
771
+
772
+ - Respect port if specified for HTTPS connections
773
+
774
+ (props [@dd32][gh-dd32], [#237][gh-237])
775
+
776
+ - Allow paths starting with a double-slash
777
+
778
+ (props [@rmccue][gh-rmccue], [#240][gh-240])
779
+
780
+ - Fixes bug in rfc2616 #3.6.1 implementation.
781
+
782
+ (props [@stephenharris][gh-stephenharris], [#236][gh-236], [#3][gh-3])
783
+
784
+ - CURLOPT_HTTPHEADER在php7接受空数组导致php-fpm奔溃
785
+
786
+ (props [@qibinghua][gh-qibinghua], [#219][gh-219])
787
+
788
+ [gh-3]: https://github.com/WordPress/Requests/issues/3
789
+ [gh-75]: https://github.com/WordPress/Requests/issues/75
790
+ [gh-86]: https://github.com/WordPress/Requests/issues/86
791
+ [gh-92]: https://github.com/WordPress/Requests/issues/92
792
+ [gh-97]: https://github.com/WordPress/Requests/issues/97
793
+ [gh-99]: https://github.com/WordPress/Requests/issues/99
794
+ [gh-101]: https://github.com/WordPress/Requests/issues/101
795
+ [gh-103]: https://github.com/WordPress/Requests/issues/103
796
+ [gh-104]: https://github.com/WordPress/Requests/issues/104
797
+ [gh-106]: https://github.com/WordPress/Requests/issues/106
798
+ [gh-107]: https://github.com/WordPress/Requests/issues/107
799
+ [gh-112]: https://github.com/WordPress/Requests/issues/112
800
+ [gh-113]: https://github.com/WordPress/Requests/issues/113
801
+ [gh-120]: https://github.com/WordPress/Requests/issues/120
802
+ [gh-124]: https://github.com/WordPress/Requests/issues/124
803
+ [gh-128]: https://github.com/WordPress/Requests/issues/128
804
+ [gh-130]: https://github.com/WordPress/Requests/issues/130
805
+ [gh-132]: https://github.com/WordPress/Requests/issues/132
806
+ [gh-136]: https://github.com/WordPress/Requests/issues/136
807
+ [gh-148]: https://github.com/WordPress/Requests/issues/148
808
+ [gh-150]: https://github.com/WordPress/Requests/issues/150
809
+ [gh-156]: https://github.com/WordPress/Requests/issues/156
810
+ [gh-158]: https://github.com/WordPress/Requests/issues/158
811
+ [gh-162]: https://github.com/WordPress/Requests/issues/162
812
+ [gh-164]: https://github.com/WordPress/Requests/issues/164
813
+ [gh-170]: https://github.com/WordPress/Requests/issues/170
814
+ [gh-172]: https://github.com/WordPress/Requests/issues/172
815
+ [gh-174]: https://github.com/WordPress/Requests/issues/174
816
+ [gh-176]: https://github.com/WordPress/Requests/issues/176
817
+ [gh-177]: https://github.com/WordPress/Requests/issues/177
818
+ [gh-179]: https://github.com/WordPress/Requests/issues/179
819
+ [gh-180]: https://github.com/WordPress/Requests/issues/180
820
+ [gh-181]: https://github.com/WordPress/Requests/issues/181
821
+ [gh-183]: https://github.com/WordPress/Requests/issues/183
822
+ [gh-184]: https://github.com/WordPress/Requests/issues/184
823
+ [gh-185]: https://github.com/WordPress/Requests/issues/185
824
+ [gh-186]: https://github.com/WordPress/Requests/issues/186
825
+ [gh-187]: https://github.com/WordPress/Requests/issues/187
826
+ [gh-188]: https://github.com/WordPress/Requests/issues/188
827
+ [gh-194]: https://github.com/WordPress/Requests/issues/194
828
+ [gh-196]: https://github.com/WordPress/Requests/issues/196
829
+ [gh-200]: https://github.com/WordPress/Requests/issues/200
830
+ [gh-202]: https://github.com/WordPress/Requests/issues/202
831
+ [gh-203]: https://github.com/WordPress/Requests/issues/203
832
+ [gh-205]: https://github.com/WordPress/Requests/issues/205
833
+ [gh-206]: https://github.com/WordPress/Requests/issues/206
834
+ [gh-207]: https://github.com/WordPress/Requests/issues/207
835
+ [gh-210]: https://github.com/WordPress/Requests/issues/210
836
+ [gh-211]: https://github.com/WordPress/Requests/issues/211
837
+ [gh-215]: https://github.com/WordPress/Requests/issues/215
838
+ [gh-216]: https://github.com/WordPress/Requests/issues/216
839
+ [gh-217]: https://github.com/WordPress/Requests/issues/217
840
+ [gh-219]: https://github.com/WordPress/Requests/issues/219
841
+ [gh-223]: https://github.com/WordPress/Requests/issues/223
842
+ [gh-224]: https://github.com/WordPress/Requests/issues/224
843
+ [gh-227]: https://github.com/WordPress/Requests/issues/227
844
+ [gh-230]: https://github.com/WordPress/Requests/issues/230
845
+ [gh-236]: https://github.com/WordPress/Requests/issues/236
846
+ [gh-237]: https://github.com/WordPress/Requests/issues/237
847
+ [gh-238]: https://github.com/WordPress/Requests/issues/238
848
+ [gh-239]: https://github.com/WordPress/Requests/issues/239
849
+ [gh-240]: https://github.com/WordPress/Requests/issues/240
850
+
851
+ 1.6.0
852
+ -----
853
+ - [Add multiple request support][#23] - Send multiple HTTP requests with both
854
+ fsockopen and cURL, transparently falling back to synchronous when
855
+ not supported.
856
+
857
+ - [Add proxy support][#70] - HTTP proxies are now natively supported via a
858
+ [high-level API][docs/proxy]. Major props to Ozh for his fantastic work
859
+ on this.
860
+
861
+ - [Verify host name for SSL requests][#63] - Requests is now the first and only
862
+ standalone HTTP library to fully verify SSL hostnames even with socket
863
+ connections. Thanks to Michael Adams, Dion Hulse, Jon Cave, and Pádraic Brady
864
+ for reviewing the crucial code behind this.
865
+
866
+ - [Add cookie support][#64] - Adds built-in support for cookies (built entirely
867
+ as a high-level API)
868
+
869
+ - [Add sessions][#62] - To compliment cookies, [sessions][docs/usage-advanced]
870
+ can be created with a base URL and default options, plus a shared cookie jar.
871
+
872
+ - Add [PUT][#1], [DELETE][#3], and [PATCH][#2] request support
873
+
874
+ - [Add Composer support][#6] - You can now install Requests via the
875
+ `rmccue/requests` package on Composer
876
+
877
+ [docs/proxy]: https://requests.ryanmccue.info/docs/proxy.html
878
+ [docs/usage-advanced]: https://requests.ryanmccue.info/docs/usage-advanced.html
879
+
880
+ [#1]: https://github.com/WordPress/Requests/issues/1
881
+ [#2]: https://github.com/WordPress/Requests/issues/2
882
+ [#3]: https://github.com/WordPress/Requests/issues/3
883
+ [#6]: https://github.com/WordPress/Requests/issues/6
884
+ [#9]: https://github.com/WordPress/Requests/issues/9
885
+ [#23]: https://github.com/WordPress/Requests/issues/23
886
+ [#62]: https://github.com/WordPress/Requests/issues/62
887
+ [#63]: https://github.com/WordPress/Requests/issues/63
888
+ [#64]: https://github.com/WordPress/Requests/issues/64
889
+ [#70]: https://github.com/WordPress/Requests/issues/70
890
+
891
+ [View all changes][https://github.com/WordPress/Requests/compare/v1.5.0...v1.6.0]
892
+
893
+ 1.5.0
894
+ -----
895
+ Initial release!
896
+
897
+ [gh-aaronjorbin]: https://github.com/aaronjorbin
898
+ [gh-adri]: https://github.com/adri
899
+ [gh-amandato]: https://github.com/amandato
900
+ [gh-beutnagel]: https://github.com/beutnagel
901
+ [gh-carlalexander]: https://github.com/carlalexander
902
+ [gh-catharsisjelly]: https://github.com/catharsisjelly
903
+ [gh-ccrims0n]: https://github.com/ccrims0n
904
+ [gh-costdev]: https://github.com/costdev
905
+ [gh-datagutten]: https://github.com/datagutten
906
+ [gh-dustinrue]: https://github.com/dustinrue
907
+ [gh-dd32]: https://github.com/dd32
908
+ [gh-desrosj]: https://github.com/desrosj
909
+ [gh-gstrauss]: https://github.com/gstrauss
910
+ [gh-ifwe]: https://github.com/ifwe
911
+ [gh-imsaintx]: https://github.com/imsaintx
912
+ [gh-JustinyAhin]: https://github.com/JustinyAhin
913
+ [gh-jrfnl]: https://github.com/jrfnl
914
+ [gh-KasperFranz]: https://github.com/KasperFranz
915
+ [gh-kwuerl]: https://github.com/kwuerl
916
+ [gh-laurentmartelli]: https://github.com/laurentmartelli
917
+ [gh-mbabker]: https://github.com/mbabker
918
+ [gh-mishan]: https://github.com/mishan
919
+ [gh-ntwb]: https://github.com/ntwb
920
+ [gh-ocean90]: https://github.com/ocean90
921
+ [gh-orlitzky]: https://github.com/orlitzky
922
+ [gh-ozh]: https://github.com/ozh
923
+ [gh-patmead]: https://github.com/patmead
924
+ [gh-peterwilsoncc]: https://github.com/peterwilsoncc
925
+ [gh-qibinghua]: https://github.com/qibinghua
926
+ [gh-remik]: https://github.com/remik
927
+ [gh-rmccue]: https://github.com/rmccue
928
+ [gh-royopa]: https://github.com/royopa
929
+ [gh-schlessera]: https://github.com/schlessera
930
+ [gh-SergeyBiryukov]: https://github.com/SergeyBiryukov
931
+ [gh-SlikNL]: https://github.com/SlikNL
932
+ [gh-soulseekah]: https://github.com/soulseekah
933
+ [gh-staabm]: https://github.com/staabm
934
+ [gh-stephenharris]: https://github.com/stephenharris
935
+ [gh-szepeviktor]: https://github.com/szepeviktor
936
+ [gh-TimothyBJacobs]: https://github.com/TimothyBJacobs
937
+ [gh-tnorthcutt]: https://github.com/tnorthcutt
938
+ [gh-todeveni]: https://github.com/todeveni
939
+ [gh-tonebender]: https://github.com/tonebender
940
+ [gh-twdnhfr]: https://github.com/twdnhfr
941
+ [gh-TysonAndre]: https://github.com/TysonAndre
942
+ [gh-whyisjake]: https://github.com/whyisjake
943
+ [gh-wojsmol]: https://github.com/wojsmol
944
+ [gh-xknown]: https://github.com/xknown
945
+ [gh-Zegnat]: https://github.com/Zegnat
946
+ [gh-ZsgsDesign]: https://github.com/ZsgsDesign
razorpay-sdk/libs/Requests-2.0.0/LICENSE ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Requests
2
+ ========
3
+
4
+ Copyright (c) 2010-2012 Ryan McCue and contributors
5
+
6
+ Permission to use, copy, modify, and/or distribute this software for any
7
+ purpose with or without fee is hereby granted, provided that the above
8
+ copyright notice and this permission notice appear in all copies.
9
+
10
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
+
18
+
19
+ ComplexPie IRI Parser
20
+ =====================
21
+
22
+ Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
23
+ All rights reserved.
24
+
25
+ Redistribution and use in source and binary forms, with or without
26
+ modification, are permitted provided that the following conditions are met:
27
+
28
+ * Redistributions of source code must retain the above copyright notice,
29
+ this list of conditions and the following disclaimer.
30
+
31
+ * Redistributions in binary form must reproduce the above copyright notice,
32
+ this list of conditions and the following disclaimer in the documentation
33
+ and/or other materials provided with the distribution.
34
+
35
+ * Neither the name of the SimplePie Team nor the names of its contributors
36
+ may be used to endorse or promote products derived from this software
37
+ without specific prior written permission.
38
+
39
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
40
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
43
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
44
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
45
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
47
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
49
+ POSSIBILITY OF SUCH DAMAGE.
razorpay-sdk/libs/Requests-2.0.0/README.md ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Requests for PHP
2
+ ================
3
+
4
+ [![CS](https://github.com/WordPress/Requests/actions/workflows/cs.yml/badge.svg)](https://github.com/WordPress/Requests/actions/workflows/cs.yml)
5
+ [![Lint](https://github.com/WordPress/Requests/actions/workflows/lint.yml/badge.svg)](https://github.com/WordPress/Requests/actions/workflows/lint.yml)
6
+ [![Test](https://github.com/WordPress/Requests/actions/workflows/test.yml/badge.svg)](https://github.com/WordPress/Requests/actions/workflows/test.yml)
7
+ [![codecov.io](https://codecov.io/gh/WordPress/Requests/branch/stable/graph/badge.svg?token=AfpxK7WMxj&branch=stable)](https://codecov.io/gh/WordPress/Requests?branch=stable)
8
+
9
+ Requests is a HTTP library written in PHP, for human beings. It is roughly
10
+ based on the API from the excellent [Requests Python
11
+ library](http://python-requests.org/). Requests is [ISC
12
+ Licensed](https://github.com/WordPress/Requests/blob/stable/LICENSE) (similar to
13
+ the new BSD license) and has no dependencies, except for PHP 5.6+.
14
+
15
+ Despite PHP's use as a language for the web, its tools for sending HTTP requests
16
+ are severely lacking. cURL has an
17
+ [interesting API](https://www.php.net/curl-setopt), to say the
18
+ least, and you can't always rely on it being available. Sockets provide only low
19
+ level access, and require you to build most of the HTTP response parsing
20
+ yourself.
21
+
22
+ We all have better things to do. That's why Requests was born.
23
+
24
+ ```php
25
+ $headers = array('Accept' => 'application/json');
26
+ $options = array('auth' => array('user', 'pass'));
27
+ $request = WpOrg\Requests\Requests::get('https://api.github.com/gists', $headers, $options);
28
+
29
+ var_dump($request->status_code);
30
+ // int(200)
31
+
32
+ var_dump($request->headers['content-type']);
33
+ // string(31) "application/json; charset=utf-8"
34
+
35
+ var_dump($request->body);
36
+ // string(26891) "[...]"
37
+ ```
38
+
39
+ Requests allows you to send **HEAD**, **GET**, **POST**, **PUT**, **DELETE**,
40
+ and **PATCH** HTTP requests. You can add headers, form data, multipart files,
41
+ and parameters with basic arrays, and access the response data in the same way.
42
+ Requests uses cURL and fsockopen, depending on what your system has available,
43
+ but abstracts all the nasty stuff out of your way, providing a consistent API.
44
+
45
+
46
+ Features
47
+ --------
48
+
49
+ - International Domains and URLs
50
+ - Browser-style SSL Verification
51
+ - Basic/Digest Authentication
52
+ - Automatic Decompression
53
+ - Connection Timeouts
54
+
55
+
56
+ Installation
57
+ ------------
58
+
59
+ ### Install with Composer
60
+ If you're using [Composer](https://getcomposer.org/) to manage
61
+ dependencies, you can add Requests with it.
62
+
63
+ ```sh
64
+ composer require rmccue/requests
65
+ ```
66
+
67
+ or
68
+ ```json
69
+ {
70
+ "require": {
71
+ "rmccue/requests": "^2.0"
72
+ }
73
+ }
74
+ ```
75
+
76
+ ### Install source from GitHub
77
+ To install the source code:
78
+ ```bash
79
+ $ git clone git://github.com/WordPress/Requests.git
80
+ ```
81
+
82
+ Next, include the autoloader in your scripts:
83
+ ```php
84
+ require_once '/path/to/Requests/src/Autoload.php';
85
+ ```
86
+
87
+ You'll probably also want to register the autoloader:
88
+ ```php
89
+ WpOrg\Requests\Autoload::register();
90
+ ```
91
+
92
+ ### Install source from zip/tarball
93
+ Alternatively, you can fetch a [tarball][] or [zipball][]:
94
+
95
+ ```bash
96
+ $ curl -L https://github.com/WordPress/Requests/tarball/stable | tar xzv
97
+ (or)
98
+ $ wget https://github.com/WordPress/Requests/tarball/stable -O - | tar xzv
99
+ ```
100
+
101
+ [tarball]: https://github.com/WordPress/Requests/tarball/stable
102
+ [zipball]: https://github.com/WordPress/Requests/zipball/stable
103
+
104
+
105
+ ### Using a Class Loader
106
+ If you're using a class loader (e.g., [Symfony Class Loader][]) for
107
+ [PSR-4][]-style class loading:
108
+ ```php
109
+ $loader = new Psr4ClassLoader();
110
+ $loader->addPrefix('WpOrg\\Requests\\', 'path/to/vendor/Requests/src');
111
+ $loader->register();
112
+ ```
113
+
114
+ [Symfony Class Loader]: https://github.com/symfony/ClassLoader
115
+ [PSR-4]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4.md
116
+
117
+
118
+ Documentation
119
+ -------------
120
+ The best place to start is our [prose-based documentation][], which will guide
121
+ you through using Requests.
122
+
123
+ After that, take a look at [the documentation for
124
+ `\WpOrg\Requests\Requests::request()`][request_method], where all the parameters are fully
125
+ documented.
126
+
127
+ Requests is [100% documented with PHPDoc](https://requests.ryanmccue.info/api-2.x/).
128
+ If you find any problems with it, [create a new
129
+ issue](https://github.com/WordPress/Requests/issues/new)!
130
+
131
+ [prose-based documentation]: https://github.com/WordPress/Requests/blob/stable/docs/README.md
132
+ [request_method]: https://requests.ryanmccue.info/api-2.x/classes/WpOrg-Requests-Requests.html#method_request
133
+
134
+ Testing
135
+ -------
136
+
137
+ Requests strives to have 100% code-coverage of the library with an extensive
138
+ set of tests. We're not quite there yet, but [we're getting close][codecov].
139
+
140
+ [codecov]: https://codecov.io/github/WordPress/Requests/
141
+
142
+ To run the test suite, first check that you have the [PHP
143
+ JSON extension ](https://www.php.net/book.json) enabled. Then
144
+ simply:
145
+ ```bash
146
+ $ phpunit
147
+ ```
148
+
149
+ If you'd like to run a single set of tests, specify just the name:
150
+ ```bash
151
+ $ phpunit Transport/cURL
152
+ ```
153
+
154
+ Contribute
155
+ ----------
156
+
157
+ 1. Check for open issues or open a new issue for a feature request or a bug.
158
+ 2. Fork [the repository][] on Github to start making your changes to the
159
+ `develop` branch (or branch off of it).
160
+ 3. Write one or more tests which show that the bug was fixed or that the feature works as expected.
161
+ 4. Send in a pull request.
162
+
163
+ If you have questions while working on your contribution and you use Slack, there is
164
+ a [#core-http-api] channel available in the [WordPress Slack] in which contributions can be discussed.
165
+
166
+ [the repository]: https://github.com/WordPress/Requests
167
+ [#core-http-api]: https://wordpress.slack.com/archives/C02BBE29V42
168
+ [WordPress Slack]: https://make.wordpress.org/chat/
razorpay-sdk/libs/Requests-2.0.0/certificates/cacert.pem ADDED
@@ -0,0 +1,3232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT
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
+ ## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
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
+ ## Conversion done with mk-ca-bundle.pl version 1.28.
17
+ ## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
18
+ ##
19
+
20
+
21
+ GlobalSign Root CA
22
+ ==================
23
+ -----BEGIN CERTIFICATE-----
24
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
25
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
26
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
27
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
28
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
29
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
30
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
31
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
32
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
33
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
34
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
35
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
36
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
37
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
38
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
39
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
40
+ -----END CERTIFICATE-----
41
+
42
+ GlobalSign Root CA - R2
43
+ =======================
44
+ -----BEGIN CERTIFICATE-----
45
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
46
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
47
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
48
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
49
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
50
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
51
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
52
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
53
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
54
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
55
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
56
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
57
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
58
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
59
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
60
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
61
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
62
+ -----END CERTIFICATE-----
63
+
64
+ Entrust.net Premium 2048 Secure Server CA
65
+ =========================================
66
+ -----BEGIN CERTIFICATE-----
67
+ MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
68
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
69
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
70
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
71
+ NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
72
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
73
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
74
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
75
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
76
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
77
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
78
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
79
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
80
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
81
+ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
82
+ T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
83
+ zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
84
+ J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
85
+ nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
86
+ -----END CERTIFICATE-----
87
+
88
+ Baltimore CyberTrust Root
89
+ =========================
90
+ -----BEGIN CERTIFICATE-----
91
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
92
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
93
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
94
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
95
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
96
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
97
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
98
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
99
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
100
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
101
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
102
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
103
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
104
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
105
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
106
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
107
+ -----END CERTIFICATE-----
108
+
109
+ Entrust Root Certification Authority
110
+ ====================================
111
+ -----BEGIN CERTIFICATE-----
112
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
113
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
114
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
115
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
116
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
117
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
118
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
119
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
120
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
121
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
122
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
123
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
124
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
125
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
126
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
127
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
128
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
129
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
130
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
131
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
132
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
133
+ -----END CERTIFICATE-----
134
+
135
+ Comodo AAA Services root
136
+ ========================
137
+ -----BEGIN CERTIFICATE-----
138
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
139
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
140
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
141
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
142
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
143
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
144
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
145
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
146
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
147
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
148
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
149
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
150
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
151
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
152
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
153
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
154
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
155
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
156
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
157
+ -----END CERTIFICATE-----
158
+
159
+ QuoVadis Root CA 2
160
+ ==================
161
+ -----BEGIN CERTIFICATE-----
162
+ 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
188
+ -----END CERTIFICATE-----
189
+
190
+ QuoVadis Root CA 3
191
+ ==================
192
+ -----BEGIN CERTIFICATE-----
193
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
194
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
195
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
196
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
197
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
198
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
199
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
200
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
201
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
202
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
203
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
204
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
205
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
206
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
207
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
208
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
209
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
210
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
211
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
212
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
213
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
214
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
215
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
216
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
217
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
218
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
219
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
220
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
221
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
222
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
223
+ -----END CERTIFICATE-----
224
+
225
+ Security Communication Root CA
226
+ ==============================
227
+ -----BEGIN CERTIFICATE-----
228
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
229
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
230
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
231
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
232
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
233
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
234
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
235
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
236
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
237
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
238
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
239
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
240
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
241
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
242
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
243
+ FL39vmwLAw==
244
+ -----END CERTIFICATE-----
245
+
246
+ XRamp Global CA Root
247
+ ====================
248
+ -----BEGIN CERTIFICATE-----
249
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
250
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
251
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
252
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
253
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
254
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
255
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
256
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
257
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
258
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
259
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
260
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
261
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
262
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
263
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
264
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
265
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
266
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
267
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
268
+ -----END CERTIFICATE-----
269
+
270
+ Go Daddy Class 2 CA
271
+ ===================
272
+ -----BEGIN CERTIFICATE-----
273
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
274
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
275
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
276
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
277
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
278
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
279
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
280
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
281
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
282
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
283
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
284
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
285
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
286
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
287
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
288
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
289
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
290
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
291
+ vZ8=
292
+ -----END CERTIFICATE-----
293
+
294
+ Starfield Class 2 CA
295
+ ====================
296
+ -----BEGIN CERTIFICATE-----
297
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
298
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
299
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
300
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
301
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
302
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
303
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
304
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
305
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
306
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
307
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
308
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
309
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
310
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
311
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
312
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
313
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
314
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
315
+ QBFGmh95DmK/D5fs4C8fF5Q=
316
+ -----END CERTIFICATE-----
317
+
318
+ DigiCert Assured ID Root CA
319
+ ===========================
320
+ -----BEGIN CERTIFICATE-----
321
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
322
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
323
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
324
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
325
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
326
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
327
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
328
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
329
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
330
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
331
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
332
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
333
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
334
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
335
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
336
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
337
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
338
+ -----END CERTIFICATE-----
339
+
340
+ DigiCert Global Root CA
341
+ =======================
342
+ -----BEGIN CERTIFICATE-----
343
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
344
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
345
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
346
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
347
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
348
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
349
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
350
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
351
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
352
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
353
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
354
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
355
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
356
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
357
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
358
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
359
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
360
+ -----END CERTIFICATE-----
361
+
362
+ DigiCert High Assurance EV Root CA
363
+ ==================================
364
+ -----BEGIN CERTIFICATE-----
365
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
366
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
367
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
368
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
369
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
370
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
371
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
372
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
373
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
374
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
375
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
376
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
377
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
378
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
379
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
380
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
381
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
382
+ -----END CERTIFICATE-----
383
+
384
+ SwissSign Gold CA - G2
385
+ ======================
386
+ -----BEGIN CERTIFICATE-----
387
+ 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
413
+ -----END CERTIFICATE-----
414
+
415
+ SwissSign Silver CA - G2
416
+ ========================
417
+ -----BEGIN CERTIFICATE-----
418
+ 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
444
+ -----END CERTIFICATE-----
445
+
446
+ SecureTrust CA
447
+ ==============
448
+ -----BEGIN CERTIFICATE-----
449
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
450
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
451
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
452
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
453
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
454
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
455
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
456
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
457
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
458
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
459
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
460
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
461
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
462
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
463
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
464
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
465
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
466
+ -----END CERTIFICATE-----
467
+
468
+ Secure Global CA
469
+ ================
470
+ -----BEGIN CERTIFICATE-----
471
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
472
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
473
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
474
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
475
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
476
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
477
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
478
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
479
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
480
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
481
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
482
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
483
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
484
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
485
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
486
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
487
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
488
+ -----END CERTIFICATE-----
489
+
490
+ COMODO Certification Authority
491
+ ==============================
492
+ -----BEGIN CERTIFICATE-----
493
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
494
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
495
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
496
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
497
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
498
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
499
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
500
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
501
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
502
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
503
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
504
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
505
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
506
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
507
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
508
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
509
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
510
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
511
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
512
+ -----END CERTIFICATE-----
513
+
514
+ Network Solutions Certificate Authority
515
+ =======================================
516
+ -----BEGIN CERTIFICATE-----
517
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
518
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
519
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
520
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
521
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
522
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
523
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
524
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
525
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
526
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
527
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
528
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
529
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
530
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
531
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
532
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
533
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
534
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
535
+ -----END CERTIFICATE-----
536
+
537
+ COMODO ECC Certification Authority
538
+ ==================================
539
+ -----BEGIN CERTIFICATE-----
540
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
541
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
542
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
543
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
544
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
545
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
546
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
547
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
548
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
549
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
550
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
551
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
552
+ -----END CERTIFICATE-----
553
+
554
+ Certigna
555
+ ========
556
+ -----BEGIN CERTIFICATE-----
557
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
558
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
559
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
560
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
561
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
562
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
563
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
564
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
565
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
566
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
567
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
568
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
569
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
570
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
571
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
572
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
573
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
574
+ -----END CERTIFICATE-----
575
+
576
+ Cybertrust Global Root
577
+ ======================
578
+ -----BEGIN CERTIFICATE-----
579
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
580
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
581
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
582
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
583
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
584
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
585
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
586
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
587
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
588
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
589
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
590
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
591
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
592
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
593
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
594
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
595
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
596
+ -----END CERTIFICATE-----
597
+
598
+ ePKI Root Certification Authority
599
+ =================================
600
+ -----BEGIN CERTIFICATE-----
601
+ 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
627
+ -----END CERTIFICATE-----
628
+
629
+ certSIGN ROOT CA
630
+ ================
631
+ -----BEGIN CERTIFICATE-----
632
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
633
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
634
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
635
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
636
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
637
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
638
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
639
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
640
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
641
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
642
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
643
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
644
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
645
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
646
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
647
+ -----END CERTIFICATE-----
648
+
649
+ NetLock Arany (Class Gold) Főtanúsítvány
650
+ ========================================
651
+ -----BEGIN CERTIFICATE-----
652
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
653
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
654
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
655
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
656
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
657
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
658
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
659
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
660
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
661
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
662
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
663
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
664
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
665
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
666
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
667
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
668
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
669
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
670
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
671
+ -----END CERTIFICATE-----
672
+
673
+ Hongkong Post Root CA 1
674
+ =======================
675
+ -----BEGIN CERTIFICATE-----
676
+ MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
677
+ DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
678
+ NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
679
+ IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
680
+ AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
681
+ ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
682
+ auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
683
+ qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
684
+ V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
685
+ HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
686
+ h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
687
+ l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
688
+ IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
689
+ T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
690
+ c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
691
+ -----END CERTIFICATE-----
692
+
693
+ SecureSign RootCA11
694
+ ===================
695
+ -----BEGIN CERTIFICATE-----
696
+ MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
697
+ SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
698
+ b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
699
+ KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
700
+ cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
701
+ TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
702
+ wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
703
+ g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
704
+ O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
705
+ bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
706
+ t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
707
+ OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
708
+ bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
709
+ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
710
+ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
711
+ lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
712
+ -----END CERTIFICATE-----
713
+
714
+ Microsec e-Szigno Root CA 2009
715
+ ==============================
716
+ -----BEGIN CERTIFICATE-----
717
+ MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
718
+ MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
719
+ c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
720
+ dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
721
+ BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
722
+ U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
723
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
724
+ fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
725
+ 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
726
+ pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
727
+ 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
728
+ AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
729
+ QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
730
+ FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
731
+ lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
732
+ I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
733
+ tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
734
+ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
735
+ LXpUq3DDfSJlgnCW
736
+ -----END CERTIFICATE-----
737
+
738
+ GlobalSign Root CA - R3
739
+ =======================
740
+ -----BEGIN CERTIFICATE-----
741
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
742
+ YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
743
+ bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
744
+ aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
745
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
746
+ iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
747
+ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
748
+ rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
749
+ OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
750
+ xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
751
+ FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
752
+ lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
753
+ EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
754
+ bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
755
+ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
756
+ kpeDMdmztcpHWD9f
757
+ -----END CERTIFICATE-----
758
+
759
+ Autoridad de Certificacion Firmaprofesional CIF A62634068
760
+ =========================================================
761
+ -----BEGIN CERTIFICATE-----
762
+ MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
763
+ BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
764
+ MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
765
+ QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
766
+ NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
767
+ Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
768
+ B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
769
+ 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
770
+ ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
771
+ plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
772
+ MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
773
+ LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
774
+ bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
775
+ vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
776
+ EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
777
+ DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
778
+ cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
779
+ bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
780
+ ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
781
+ 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
782
+ R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
783
+ T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
784
+ Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
785
+ osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
786
+ crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
787
+ saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
788
+ KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
789
+ 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
790
+ -----END CERTIFICATE-----
791
+
792
+ Izenpe.com
793
+ ==========
794
+ -----BEGIN CERTIFICATE-----
795
+ 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
822
+ -----END CERTIFICATE-----
823
+
824
+ Go Daddy Root Certificate Authority - G2
825
+ ========================================
826
+ -----BEGIN CERTIFICATE-----
827
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
828
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
829
+ MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
830
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
831
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
832
+ A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
833
+ hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
834
+ 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
835
+ +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
836
+ fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
837
+ NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
838
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
839
+ BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
840
+ vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
841
+ 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
842
+ N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
843
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
844
+ -----END CERTIFICATE-----
845
+
846
+ Starfield Root Certificate Authority - G2
847
+ =========================================
848
+ -----BEGIN CERTIFICATE-----
849
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
850
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
851
+ b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
852
+ eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
853
+ DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
854
+ VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
855
+ dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
856
+ W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
857
+ bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
858
+ N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
859
+ ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
860
+ JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
861
+ AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
862
+ TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
863
+ 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
864
+ F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
865
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
866
+ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
867
+ -----END CERTIFICATE-----
868
+
869
+ Starfield Services Root Certificate Authority - G2
870
+ ==================================================
871
+ -----BEGIN CERTIFICATE-----
872
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
873
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
874
+ b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
875
+ IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
876
+ BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
877
+ dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
878
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
879
+ AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
880
+ h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
881
+ hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
882
+ LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
883
+ rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
884
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
885
+ SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
886
+ E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
887
+ xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
888
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
889
+ YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
890
+ -----END CERTIFICATE-----
891
+
892
+ AffirmTrust Commercial
893
+ ======================
894
+ -----BEGIN CERTIFICATE-----
895
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
896
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
897
+ MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
898
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
899
+ AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
900
+ DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
901
+ C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
902
+ BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
903
+ MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
904
+ HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
905
+ AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
906
+ hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
907
+ qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
908
+ 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
909
+ sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
910
+ -----END CERTIFICATE-----
911
+
912
+ AffirmTrust Networking
913
+ ======================
914
+ -----BEGIN CERTIFICATE-----
915
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
916
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
917
+ MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
918
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
919
+ AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
920
+ Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
921
+ dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
922
+ /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
923
+ h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
924
+ HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
925
+ AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
926
+ UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
927
+ 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
928
+ WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
929
+ /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
930
+ -----END CERTIFICATE-----
931
+
932
+ AffirmTrust Premium
933
+ ===================
934
+ -----BEGIN CERTIFICATE-----
935
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
936
+ BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
937
+ OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
938
+ dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
939
+ MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
940
+ BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
941
+ 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
942
+ +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
943
+ GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
944
+ p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
945
+ S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
946
+ 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
947
+ /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
948
+ +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
949
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
950
+ MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
951
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
952
+ 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
953
+ L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
954
+ +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
955
+ BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
956
+ IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
957
+ g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
958
+ zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
959
+ -----END CERTIFICATE-----
960
+
961
+ AffirmTrust Premium ECC
962
+ =======================
963
+ -----BEGIN CERTIFICATE-----
964
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
965
+ BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
966
+ MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
967
+ cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
968
+ IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
969
+ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
970
+ BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
971
+ BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
972
+ 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
973
+ eQ==
974
+ -----END CERTIFICATE-----
975
+
976
+ Certum Trusted Network CA
977
+ =========================
978
+ -----BEGIN CERTIFICATE-----
979
+ MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
980
+ ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
981
+ biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
982
+ MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
983
+ ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
984
+ MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
985
+ AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
986
+ l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
987
+ J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
988
+ fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
989
+ cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
990
+ Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
991
+ DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
992
+ jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
993
+ mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
994
+ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
995
+ 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
996
+ -----END CERTIFICATE-----
997
+
998
+ TWCA Root Certification Authority
999
+ =================================
1000
+ -----BEGIN CERTIFICATE-----
1001
+ MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
1002
+ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
1003
+ dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
1004
+ EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
1005
+ IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
1006
+ AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
1007
+ QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
1008
+ oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
1009
+ 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
1010
+ y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
1011
+ BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
1012
+ 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
1013
+ mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
1014
+ QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
1015
+ T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
1016
+ Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
1017
+ -----END CERTIFICATE-----
1018
+
1019
+ Security Communication RootCA2
1020
+ ==============================
1021
+ -----BEGIN CERTIFICATE-----
1022
+ MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1023
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
1024
+ dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
1025
+ SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
1026
+ aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1027
+ ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
1028
+ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
1029
+ 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
1030
+ spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
1031
+ EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
1032
+ QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
1033
+ CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
1034
+ u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
1035
+ 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
1036
+ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
1037
+ mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
1038
+ -----END CERTIFICATE-----
1039
+
1040
+ EC-ACC
1041
+ ======
1042
+ -----BEGIN CERTIFICATE-----
1043
+ MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
1044
+ BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
1045
+ ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
1046
+ VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
1047
+ CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
1048
+ BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
1049
+ MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
1050
+ SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
1051
+ Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
1052
+ cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
1053
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
1054
+ w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
1055
+ ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
1056
+ HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
1057
+ E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
1058
+ 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
1059
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
1060
+ VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
1061
+ Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
1062
+ dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
1063
+ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
1064
+ Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
1065
+ l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
1066
+ E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
1067
+ 5EI=
1068
+ -----END CERTIFICATE-----
1069
+
1070
+ Hellenic Academic and Research Institutions RootCA 2011
1071
+ =======================================================
1072
+ -----BEGIN CERTIFICATE-----
1073
+ MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
1074
+ O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
1075
+ aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
1076
+ IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
1077
+ AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
1078
+ IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
1079
+ IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1080
+ AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
1081
+ 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
1082
+ 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
1083
+ 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
1084
+ 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
1085
+ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
1086
+ MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
1087
+ b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
1088
+ XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
1089
+ TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
1090
+ /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
1091
+ 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
1092
+ -----END CERTIFICATE-----
1093
+
1094
+ Actalis Authentication Root CA
1095
+ ==============================
1096
+ -----BEGIN CERTIFICATE-----
1097
+ MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
1098
+ BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
1099
+ AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
1100
+ MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
1101
+ IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
1102
+ IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
1103
+ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
1104
+ by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
1105
+ zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
1106
+ YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
1107
+ oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
1108
+ EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
1109
+ hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
1110
+ EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
1111
+ jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
1112
+ iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
1113
+ ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
1114
+ WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
1115
+ JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
1116
+ K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
1117
+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
1118
+ 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
1119
+ 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
1120
+ lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
1121
+ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
1122
+ vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
1123
+ -----END CERTIFICATE-----
1124
+
1125
+ Buypass Class 2 Root CA
1126
+ =======================
1127
+ -----BEGIN CERTIFICATE-----
1128
+ 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
1152
+ rJgWVqA=
1153
+ -----END CERTIFICATE-----
1154
+
1155
+ Buypass Class 3 Root CA
1156
+ =======================
1157
+ -----BEGIN CERTIFICATE-----
1158
+ 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
1182
+ Cp/HuZc=
1183
+ -----END CERTIFICATE-----
1184
+
1185
+ T-TeleSec GlobalRoot Class 3
1186
+ ============================
1187
+ -----BEGIN CERTIFICATE-----
1188
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
1189
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
1190
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
1191
+ MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
1192
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
1193
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
1194
+ DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
1195
+ 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
1196
+ NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
1197
+ iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
1198
+ 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
1199
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
1200
+ AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
1201
+ fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
1202
+ ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
1203
+ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
1204
+ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
1205
+ -----END CERTIFICATE-----
1206
+
1207
+ D-TRUST Root Class 3 CA 2 2009
1208
+ ==============================
1209
+ -----BEGIN CERTIFICATE-----
1210
+ MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
1211
+ DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
1212
+ Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
1213
+ LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
1214
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
1215
+ ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
1216
+ BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
1217
+ KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
1218
+ p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
1219
+ AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
1220
+ 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
1221
+ eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
1222
+ MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
1223
+ PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
1224
+ OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
1225
+ 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
1226
+ o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
1227
+ dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
1228
+ X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
1229
+ -----END CERTIFICATE-----
1230
+
1231
+ D-TRUST Root Class 3 CA 2 EV 2009
1232
+ =================================
1233
+ -----BEGIN CERTIFICATE-----
1234
+ MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
1235
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
1236
+ OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
1237
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
1238
+ OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
1239
+ egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
1240
+ zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
1241
+ 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
1242
+ sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
1243
+ 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
1244
+ cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
1245
+ ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
1246
+ MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
1247
+ b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
1248
+ c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
1249
+ PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
1250
+ nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
1251
+ ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
1252
+ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
1253
+ w9y4AyHqnxbxLFS1
1254
+ -----END CERTIFICATE-----
1255
+
1256
+ CA Disig Root R2
1257
+ ================
1258
+ -----BEGIN CERTIFICATE-----
1259
+ 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
1283
+ 7+ZtsH8tZ/3zbBt1RqPlShfppNcL
1284
+ -----END CERTIFICATE-----
1285
+
1286
+ ACCVRAIZ1
1287
+ =========
1288
+ -----BEGIN CERTIFICATE-----
1289
+ MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
1290
+ SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
1291
+ MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
1292
+ UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1293
+ DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
1294
+ jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
1295
+ RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
1296
+ aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
1297
+ 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
1298
+ WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
1299
+ 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
1300
+ 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
1301
+ 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
1302
+ Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
1303
+ Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
1304
+ Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
1305
+ VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
1306
+ Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
1307
+ QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
1308
+ AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
1309
+ YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
1310
+ AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
1311
+ IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
1312
+ aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
1313
+ dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
1314
+ MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
1315
+ hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
1316
+ R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
1317
+ YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
1318
+ nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
1319
+ TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
1320
+ sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
1321
+ I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
1322
+ Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
1323
+ 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
1324
+ EfbRD0tVNEYqi4Y7
1325
+ -----END CERTIFICATE-----
1326
+
1327
+ TWCA Global Root CA
1328
+ ===================
1329
+ -----BEGIN CERTIFICATE-----
1330
+ MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
1331
+ CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
1332
+ QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
1333
+ EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
1334
+ Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
1335
+ nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
1336
+ r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
1337
+ Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
1338
+ tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
1339
+ KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
1340
+ sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
1341
+ yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
1342
+ kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
1343
+ zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
1344
+ AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
1345
+ cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
1346
+ LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
1347
+ 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
1348
+ /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
1349
+ lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
1350
+ A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
1351
+ i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
1352
+ EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
1353
+ zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
1354
+ -----END CERTIFICATE-----
1355
+
1356
+ TeliaSonera Root CA v1
1357
+ ======================
1358
+ -----BEGIN CERTIFICATE-----
1359
+ MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
1360
+ CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
1361
+ MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
1362
+ VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
1363
+ 6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
1364
+ 3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
1365
+ B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
1366
+ Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
1367
+ oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
1368
+ F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
1369
+ oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
1370
+ gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
1371
+ TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
1372
+ AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
1373
+ DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
1374
+ zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
1375
+ 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
1376
+ pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
1377
+ G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
1378
+ c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
1379
+ JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
1380
+ qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
1381
+ Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
1382
+ WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
1383
+ -----END CERTIFICATE-----
1384
+
1385
+ E-Tugra Certification Authority
1386
+ ===============================
1387
+ -----BEGIN CERTIFICATE-----
1388
+ MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
1389
+ DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
1390
+ ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
1391
+ ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
1392
+ NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
1393
+ QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
1394
+ cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
1395
+ DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
1396
+ MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
1397
+ hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
1398
+ CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
1399
+ ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
1400
+ BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
1401
+ E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
1402
+ rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
1403
+ jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
1404
+ rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
1405
+ dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
1406
+ /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
1407
+ MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
1408
+ kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
1409
+ XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
1410
+ VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
1411
+ a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
1412
+ dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
1413
+ KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
1414
+ Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
1415
+ 8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
1416
+ C7TbO6Orb1wdtn7os4I07QZcJA==
1417
+ -----END CERTIFICATE-----
1418
+
1419
+ T-TeleSec GlobalRoot Class 2
1420
+ ============================
1421
+ -----BEGIN CERTIFICATE-----
1422
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
1423
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
1424
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
1425
+ MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
1426
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
1427
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
1428
+ DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
1429
+ SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
1430
+ vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
1431
+ 2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
1432
+ WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
1433
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
1434
+ YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
1435
+ r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
1436
+ vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
1437
+ 3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
1438
+ 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
1439
+ -----END CERTIFICATE-----
1440
+
1441
+ Atos TrustedRoot 2011
1442
+ =====================
1443
+ -----BEGIN CERTIFICATE-----
1444
+ MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
1445
+ cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
1446
+ MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
1447
+ A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
1448
+ hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
1449
+ 54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
1450
+ DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
1451
+ HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
1452
+ z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
1453
+ l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
1454
+ bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
1455
+ CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
1456
+ k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
1457
+ TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
1458
+ 61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
1459
+ 3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
1460
+ -----END CERTIFICATE-----
1461
+
1462
+ QuoVadis Root CA 1 G3
1463
+ =====================
1464
+ -----BEGIN CERTIFICATE-----
1465
+ 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
1489
+ hMJKzRwuJIczYOXD
1490
+ -----END CERTIFICATE-----
1491
+
1492
+ QuoVadis Root CA 2 G3
1493
+ =====================
1494
+ -----BEGIN CERTIFICATE-----
1495
+ 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
1519
+ O3jtZsSOeWmD3n+M
1520
+ -----END CERTIFICATE-----
1521
+
1522
+ QuoVadis Root CA 3 G3
1523
+ =====================
1524
+ -----BEGIN CERTIFICATE-----
1525
+ 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
1549
+ PpxxVJkES/1Y+Zj0
1550
+ -----END CERTIFICATE-----
1551
+
1552
+ DigiCert Assured ID Root G2
1553
+ ===========================
1554
+ -----BEGIN CERTIFICATE-----
1555
+ MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
1556
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1557
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
1558
+ MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1559
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
1560
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
1561
+ 35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
1562
+ bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
1563
+ VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
1564
+ YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
1565
+ lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
1566
+ w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
1567
+ 0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
1568
+ d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
1569
+ hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
1570
+ jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
1571
+ IhNzbM8m9Yop5w==
1572
+ -----END CERTIFICATE-----
1573
+
1574
+ DigiCert Assured ID Root G3
1575
+ ===========================
1576
+ -----BEGIN CERTIFICATE-----
1577
+ MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
1578
+ UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
1579
+ VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
1580
+ MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1581
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
1582
+ BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
1583
+ RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
1584
+ KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
1585
+ UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
1586
+ YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
1587
+ 1vUhZscv6pZjamVFkpUBtA==
1588
+ -----END CERTIFICATE-----
1589
+
1590
+ DigiCert Global Root G2
1591
+ =======================
1592
+ -----BEGIN CERTIFICATE-----
1593
+ MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
1594
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1595
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
1596
+ MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1597
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
1598
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
1599
+ kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
1600
+ 3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
1601
+ BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
1602
+ UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
1603
+ o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
1604
+ 5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
1605
+ F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
1606
+ WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
1607
+ QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
1608
+ iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
1609
+ MrY=
1610
+ -----END CERTIFICATE-----
1611
+
1612
+ DigiCert Global Root G3
1613
+ =======================
1614
+ -----BEGIN CERTIFICATE-----
1615
+ MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
1616
+ UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
1617
+ VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
1618
+ MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
1619
+ aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
1620
+ AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
1621
+ YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
1622
+ BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
1623
+ Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
1624
+ 3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
1625
+ VOKa5Vt8sycX
1626
+ -----END CERTIFICATE-----
1627
+
1628
+ DigiCert Trusted Root G4
1629
+ ========================
1630
+ -----BEGIN CERTIFICATE-----
1631
+ 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
1656
+ 82Z+
1657
+ -----END CERTIFICATE-----
1658
+
1659
+ COMODO RSA Certification Authority
1660
+ ==================================
1661
+ -----BEGIN CERTIFICATE-----
1662
+ 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
1688
+ LaZRfyHBNVOFBkpdn627G190
1689
+ -----END CERTIFICATE-----
1690
+
1691
+ USERTrust RSA Certification Authority
1692
+ =====================================
1693
+ -----BEGIN CERTIFICATE-----
1694
+ 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
1720
+ Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
1721
+ -----END CERTIFICATE-----
1722
+
1723
+ USERTrust ECC Certification Authority
1724
+ =====================================
1725
+ -----BEGIN CERTIFICATE-----
1726
+ MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
1727
+ VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
1728
+ aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
1729
+ biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
1730
+ VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
1731
+ aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
1732
+ biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
1733
+ 0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
1734
+ nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
1735
+ HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
1736
+ HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
1737
+ 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
1738
+ -----END CERTIFICATE-----
1739
+
1740
+ GlobalSign ECC Root CA - R4
1741
+ ===========================
1742
+ -----BEGIN CERTIFICATE-----
1743
+ MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
1744
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1745
+ EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
1746
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1747
+ EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
1748
+ OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
1749
+ AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
1750
+ MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
1751
+ JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
1752
+ -----END CERTIFICATE-----
1753
+
1754
+ GlobalSign ECC Root CA - R5
1755
+ ===========================
1756
+ -----BEGIN CERTIFICATE-----
1757
+ MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
1758
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1759
+ EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
1760
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
1761
+ EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
1762
+ SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
1763
+ h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
1764
+ BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
1765
+ uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
1766
+ yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
1767
+ -----END CERTIFICATE-----
1768
+
1769
+ Staat der Nederlanden EV Root CA
1770
+ ================================
1771
+ -----BEGIN CERTIFICATE-----
1772
+ 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
1796
+ eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
1797
+ -----END CERTIFICATE-----
1798
+
1799
+ IdenTrust Commercial Root CA 1
1800
+ ==============================
1801
+ -----BEGIN CERTIFICATE-----
1802
+ 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
1826
+ cGzM7vRX+Bi6hG6H
1827
+ -----END CERTIFICATE-----
1828
+
1829
+ IdenTrust Public Sector Root CA 1
1830
+ =================================
1831
+ -----BEGIN CERTIFICATE-----
1832
+ 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
1856
+ 3Wl9af0AVqW3rLatt8o+Ae+c
1857
+ -----END CERTIFICATE-----
1858
+
1859
+ Entrust Root Certification Authority - G2
1860
+ =========================================
1861
+ -----BEGIN CERTIFICATE-----
1862
+ MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
1863
+ BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
1864
+ bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
1865
+ b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
1866
+ HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
1867
+ DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
1868
+ OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
1869
+ eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
1870
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
1871
+ /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
1872
+ HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
1873
+ s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
1874
+ TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
1875
+ AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
1876
+ 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
1877
+ iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
1878
+ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
1879
+ nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
1880
+ vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
1881
+ e4pIb4tF9g==
1882
+ -----END CERTIFICATE-----
1883
+
1884
+ Entrust Root Certification Authority - EC1
1885
+ ==========================================
1886
+ -----BEGIN CERTIFICATE-----
1887
+ MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
1888
+ FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
1889
+ YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
1890
+ ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1891
+ IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
1892
+ FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
1893
+ LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
1894
+ dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
1895
+ IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
1896
+ AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
1897
+ 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
1898
+ FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
1899
+ vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
1900
+ kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
1901
+ -----END CERTIFICATE-----
1902
+
1903
+ CFCA EV ROOT
1904
+ ============
1905
+ -----BEGIN CERTIFICATE-----
1906
+ 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
1931
+ -----END CERTIFICATE-----
1932
+
1933
+ OISTE WISeKey Global Root GB CA
1934
+ ===============================
1935
+ -----BEGIN CERTIFICATE-----
1936
+ MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
1937
+ EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
1938
+ ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
1939
+ MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
1940
+ VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
1941
+ b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
1942
+ scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
1943
+ rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
1944
+ 9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
1945
+ Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
1946
+ GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
1947
+ /zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
1948
+ hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
1949
+ dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
1950
+ VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
1951
+ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
1952
+ Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
1953
+ -----END CERTIFICATE-----
1954
+
1955
+ SZAFIR ROOT CA2
1956
+ ===============
1957
+ -----BEGIN CERTIFICATE-----
1958
+ MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
1959
+ A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
1960
+ BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
1961
+ BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
1962
+ VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
1963
+ qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
1964
+ DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
1965
+ 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
1966
+ ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
1967
+ ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
1968
+ AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
1969
+ AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
1970
+ O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
1971
+ oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
1972
+ 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
1973
+ +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
1974
+ -----END CERTIFICATE-----
1975
+
1976
+ Certum Trusted Network CA 2
1977
+ ===========================
1978
+ -----BEGIN CERTIFICATE-----
1979
+ MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
1980
+ BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
1981
+ bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
1982
+ ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
1983
+ TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
1984
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
1985
+ IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
1986
+ 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
1987
+ CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
1988
+ Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
1989
+ uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
1990
+ GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
1991
+ 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
1992
+ Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
1993
+ hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
1994
+ BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
1995
+ AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
1996
+ hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
1997
+ Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
1998
+ L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
1999
+ clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
2000
+ pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
2001
+ w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
2002
+ J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
2003
+ ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
2004
+ is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
2005
+ zAYspsbiDrW5viSP
2006
+ -----END CERTIFICATE-----
2007
+
2008
+ Hellenic Academic and Research Institutions RootCA 2015
2009
+ =======================================================
2010
+ -----BEGIN CERTIFICATE-----
2011
+ MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
2012
+ BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
2013
+ aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
2014
+ YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
2015
+ MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
2016
+ QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
2017
+ BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
2018
+ MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
2019
+ bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
2020
+ iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
2021
+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
2022
+ FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
2023
+ i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
2024
+ GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
2025
+ fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
2026
+ iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
2027
+ Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2028
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
2029
+ hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
2030
+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
2031
+ d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
2032
+ d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
2033
+ 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
2034
+ davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
2035
+ Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
2036
+ J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
2037
+ JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
2038
+ p/UsQu0yrbYhnr68
2039
+ -----END CERTIFICATE-----
2040
+
2041
+ Hellenic Academic and Research Institutions ECC RootCA 2015
2042
+ ===========================================================
2043
+ -----BEGIN CERTIFICATE-----
2044
+ MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
2045
+ aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
2046
+ cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
2047
+ aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
2048
+ MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
2049
+ IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
2050
+ VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
2051
+ Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
2052
+ dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
2053
+ Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
2054
+ BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
2055
+ GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
2056
+ dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
2057
+ -----END CERTIFICATE-----
2058
+
2059
+ ISRG Root X1
2060
+ ============
2061
+ -----BEGIN CERTIFICATE-----
2062
+ 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
2086
+ m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
2087
+ -----END CERTIFICATE-----
2088
+
2089
+ AC RAIZ FNMT-RCM
2090
+ ================
2091
+ -----BEGIN CERTIFICATE-----
2092
+ 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
2117
+ -----END CERTIFICATE-----
2118
+
2119
+ Amazon Root CA 1
2120
+ ================
2121
+ -----BEGIN CERTIFICATE-----
2122
+ MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
2123
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
2124
+ MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
2125
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2126
+ ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
2127
+ FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
2128
+ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
2129
+ dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
2130
+ VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
2131
+ /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
2132
+ DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
2133
+ CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
2134
+ 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
2135
+ 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
2136
+ xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
2137
+ -----END CERTIFICATE-----
2138
+
2139
+ Amazon Root CA 2
2140
+ ================
2141
+ -----BEGIN CERTIFICATE-----
2142
+ MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
2143
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
2144
+ MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
2145
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
2146
+ ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
2147
+ kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
2148
+ N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
2149
+ AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
2150
+ fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
2151
+ kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
2152
+ btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
2153
+ Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
2154
+ c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
2155
+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
2156
+ DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
2157
+ A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
2158
+ +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
2159
+ YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
2160
+ xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
2161
+ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
2162
+ aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
2163
+ Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
2164
+ KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
2165
+ JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
2166
+ -----END CERTIFICATE-----
2167
+
2168
+ Amazon Root CA 3
2169
+ ================
2170
+ -----BEGIN CERTIFICATE-----
2171
+ MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
2172
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
2173
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
2174
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
2175
+ f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
2176
+ Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
2177
+ rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
2178
+ eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
2179
+ -----END CERTIFICATE-----
2180
+
2181
+ Amazon Root CA 4
2182
+ ================
2183
+ -----BEGIN CERTIFICATE-----
2184
+ MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
2185
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
2186
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
2187
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
2188
+ /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
2189
+ 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
2190
+ HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
2191
+ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
2192
+ AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
2193
+ -----END CERTIFICATE-----
2194
+
2195
+ TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
2196
+ =============================================
2197
+ -----BEGIN CERTIFICATE-----
2198
+ MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
2199
+ D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
2200
+ IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
2201
+ TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
2202
+ ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
2203
+ VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
2204
+ c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
2205
+ bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
2206
+ IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2207
+ MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
2208
+ 6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
2209
+ wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
2210
+ 3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
2211
+ WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
2212
+ ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
2213
+ KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
2214
+ AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
2215
+ lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
2216
+ e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
2217
+ q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
2218
+ -----END CERTIFICATE-----
2219
+
2220
+ GDCA TrustAUTH R5 ROOT
2221
+ ======================
2222
+ -----BEGIN CERTIFICATE-----
2223
+ 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
2248
+ -----END CERTIFICATE-----
2249
+
2250
+ TrustCor RootCert CA-1
2251
+ ======================
2252
+ -----BEGIN CERTIFICATE-----
2253
+ MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP
2254
+ MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
2255
+ U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
2256
+ dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx
2257
+ MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu
2258
+ YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe
2259
+ VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy
2260
+ dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq
2261
+ jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4
2262
+ pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0
2263
+ JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h
2264
+ gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw
2265
+ /Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j
2266
+ BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2267
+ AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5
2268
+ mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
2269
+ ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C
2270
+ qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P
2271
+ 3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk=
2272
+ -----END CERTIFICATE-----
2273
+
2274
+ TrustCor RootCert CA-2
2275
+ ======================
2276
+ -----BEGIN CERTIFICATE-----
2277
+ MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w
2278
+ DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT
2279
+ eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0
2280
+ eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy
2281
+ MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h
2282
+ bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
2283
+ cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0
2284
+ IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb
2285
+ ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk
2286
+ RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1
2287
+ oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb
2288
+ XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1
2289
+ /p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q
2290
+ jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP
2291
+ eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg
2292
+ rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
2293
+ 8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU
2294
+ 2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD
2295
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h
2296
+ Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp
2297
+ kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv
2298
+ 2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3
2299
+ S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw
2300
+ PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv
2301
+ DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU
2302
+ RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE
2303
+ xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX
2304
+ RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ
2305
+ -----END CERTIFICATE-----
2306
+
2307
+ TrustCor ECA-1
2308
+ ==============
2309
+ -----BEGIN CERTIFICATE-----
2310
+ MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP
2311
+ MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
2312
+ U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
2313
+ dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw
2314
+ N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5
2315
+ MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y
2316
+ IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG
2317
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR
2318
+ MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23
2319
+ xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc
2320
+ p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+
2321
+ fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj
2322
+ YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL
2323
+ f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
2324
+ AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u
2325
+ /ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
2326
+ hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs
2327
+ J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC
2328
+ jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g==
2329
+ -----END CERTIFICATE-----
2330
+
2331
+ SSL.com Root Certification Authority RSA
2332
+ ========================================
2333
+ -----BEGIN CERTIFICATE-----
2334
+ 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
2360
+ WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k=
2361
+ -----END CERTIFICATE-----
2362
+
2363
+ SSL.com Root Certification Authority ECC
2364
+ ========================================
2365
+ -----BEGIN CERTIFICATE-----
2366
+ MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV
2367
+ BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv
2368
+ BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy
2369
+ MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
2370
+ BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv
2371
+ bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
2372
+ BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+
2373
+ 8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR
2374
+ hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT
2375
+ jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW
2376
+ e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z
2377
+ 5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl
2378
+ -----END CERTIFICATE-----
2379
+
2380
+ SSL.com EV Root Certification Authority RSA R2
2381
+ ==============================================
2382
+ -----BEGIN CERTIFICATE-----
2383
+ MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w
2384
+ DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u
2385
+ MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy
2386
+ MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
2387
+ DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD
2388
+ VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN
2389
+ BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh
2390
+ hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w
2391
+ cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO
2392
+ Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+
2393
+ B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh
2394
+ CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim
2395
+ 9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto
2396
+ RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm
2397
+ JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48
2398
+ +qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV
2399
+ HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp
2400
+ qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1
2401
+ ++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx
2402
+ Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G
2403
+ guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz
2404
+ OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7
2405
+ CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq
2406
+ lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR
2407
+ rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1
2408
+ hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX
2409
+ 9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w==
2410
+ -----END CERTIFICATE-----
2411
+
2412
+ SSL.com EV Root Certification Authority ECC
2413
+ ===========================================
2414
+ -----BEGIN CERTIFICATE-----
2415
+ MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV
2416
+ BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy
2417
+ BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw
2418
+ MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
2419
+ EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM
2420
+ LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB
2421
+ BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy
2422
+ 3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O
2423
+ BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe
2424
+ 5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ
2425
+ N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm
2426
+ m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==
2427
+ -----END CERTIFICATE-----
2428
+
2429
+ GlobalSign Root CA - R6
2430
+ =======================
2431
+ -----BEGIN CERTIFICATE-----
2432
+ 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
2457
+ -----END CERTIFICATE-----
2458
+
2459
+ OISTE WISeKey Global Root GC CA
2460
+ ===============================
2461
+ -----BEGIN CERTIFICATE-----
2462
+ MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD
2463
+ SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo
2464
+ MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa
2465
+ Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL
2466
+ ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh
2467
+ bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr
2468
+ VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab
2469
+ NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
2470
+ BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E
2471
+ AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk
2472
+ AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9
2473
+ -----END CERTIFICATE-----
2474
+
2475
+ GTS Root R1
2476
+ ===========
2477
+ -----BEGIN CERTIFICATE-----
2478
+ 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
2502
+ CFF1pkgl
2503
+ -----END CERTIFICATE-----
2504
+
2505
+ GTS Root R2
2506
+ ===========
2507
+ -----BEGIN CERTIFICATE-----
2508
+ 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
2532
+ o/DUhgkC
2533
+ -----END CERTIFICATE-----
2534
+
2535
+ GTS Root R3
2536
+ ===========
2537
+ -----BEGIN CERTIFICATE-----
2538
+ MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
2539
+ UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
2540
+ UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
2541
+ ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq
2542
+ hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU
2543
+ Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej
2544
+ QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP
2545
+ 0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0
2546
+ glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa
2547
+ KaqW04MjyaR7YbPMAuhd
2548
+ -----END CERTIFICATE-----
2549
+
2550
+ GTS Root R4
2551
+ ===========
2552
+ -----BEGIN CERTIFICATE-----
2553
+ MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
2554
+ UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
2555
+ UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
2556
+ ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq
2557
+ hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa
2558
+ 6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj
2559
+ QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV
2560
+ 2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI
2561
+ N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x
2562
+ zPKwTdb+mciUqXWi4w==
2563
+ -----END CERTIFICATE-----
2564
+
2565
+ UCA Global G2 Root
2566
+ ==================
2567
+ -----BEGIN CERTIFICATE-----
2568
+ MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG
2569
+ EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x
2570
+ NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU
2571
+ cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
2572
+ MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT
2573
+ oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV
2574
+ 8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS
2575
+ h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o
2576
+ LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/
2577
+ R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe
2578
+ KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa
2579
+ 4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc
2580
+ OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97
2581
+ 8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
2582
+ BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo
2583
+ 5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5
2584
+ 1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A
2585
+ Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9
2586
+ yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX
2587
+ c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo
2588
+ jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk
2589
+ bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x
2590
+ ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn
2591
+ RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A==
2592
+ -----END CERTIFICATE-----
2593
+
2594
+ UCA Extended Validation Root
2595
+ ============================
2596
+ -----BEGIN CERTIFICATE-----
2597
+ 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
2621
+ dhh2n1ax
2622
+ -----END CERTIFICATE-----
2623
+
2624
+ Certigna Root CA
2625
+ ================
2626
+ -----BEGIN CERTIFICATE-----
2627
+ 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
2656
+ -----END CERTIFICATE-----
2657
+
2658
+ emSign Root CA - G1
2659
+ ===================
2660
+ -----BEGIN CERTIFICATE-----
2661
+ MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET
2662
+ MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl
2663
+ ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx
2664
+ ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk
2665
+ aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB
2666
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN
2667
+ LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1
2668
+ cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW
2669
+ DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ
2670
+ 6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH
2671
+ hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG
2672
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2
2673
+ vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q
2674
+ NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q
2675
+ +Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih
2676
+ U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx
2677
+ iN66zB+Afko=
2678
+ -----END CERTIFICATE-----
2679
+
2680
+ emSign ECC Root CA - G3
2681
+ =======================
2682
+ -----BEGIN CERTIFICATE-----
2683
+ MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG
2684
+ A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg
2685
+ MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4
2686
+ MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11
2687
+ ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g
2688
+ RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc
2689
+ 58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr
2690
+ MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC
2691
+ AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D
2692
+ CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7
2693
+ jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj
2694
+ -----END CERTIFICATE-----
2695
+
2696
+ emSign Root CA - C1
2697
+ ===================
2698
+ -----BEGIN CERTIFICATE-----
2699
+ MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx
2700
+ EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp
2701
+ Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE
2702
+ BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD
2703
+ ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up
2704
+ ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/
2705
+ Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX
2706
+ OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V
2707
+ I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms
2708
+ lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+
2709
+ XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD
2710
+ ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp
2711
+ /6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1
2712
+ NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9
2713
+ wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ
2714
+ BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
2715
+ -----END CERTIFICATE-----
2716
+
2717
+ emSign ECC Root CA - C3
2718
+ =======================
2719
+ -----BEGIN CERTIFICATE-----
2720
+ MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG
2721
+ A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF
2722
+ Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE
2723
+ BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD
2724
+ ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd
2725
+ 6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9
2726
+ SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA
2727
+ B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA
2728
+ MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU
2729
+ ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
2730
+ -----END CERTIFICATE-----
2731
+
2732
+ Hongkong Post Root CA 3
2733
+ =======================
2734
+ -----BEGIN CERTIFICATE-----
2735
+ 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
2761
+ dBb9HxEGmpv0
2762
+ -----END CERTIFICATE-----
2763
+
2764
+ Entrust Root Certification Authority - G4
2765
+ =========================================
2766
+ -----BEGIN CERTIFICATE-----
2767
+ MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
2768
+ BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
2769
+ bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1
2770
+ dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1
2771
+ dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT
2772
+ AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
2773
+ L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv
2774
+ cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv
2775
+ cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D
2776
+ umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV
2777
+ 3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds
2778
+ 8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ
2779
+ e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7
2780
+ ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X
2781
+ xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV
2782
+ 7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8
2783
+ dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW
2784
+ Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T
2785
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n
2786
+ MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q
2787
+ jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht
2788
+ 7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK
2789
+ YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt
2790
+ jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+
2791
+ m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW
2792
+ RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA
2793
+ JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
2794
+ +TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT
2795
+ kcpG2om3PVODLAgfi49T3f+sHw==
2796
+ -----END CERTIFICATE-----
2797
+
2798
+ Microsoft ECC Root Certificate Authority 2017
2799
+ =============================================
2800
+ -----BEGIN CERTIFICATE-----
2801
+ MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
2802
+ UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND
2803
+ IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4
2804
+ MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw
2805
+ NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ
2806
+ BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6
2807
+ thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB
2808
+ eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM
2809
+ +Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf
2810
+ Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR
2811
+ eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=
2812
+ -----END CERTIFICATE-----
2813
+
2814
+ Microsoft RSA Root Certificate Authority 2017
2815
+ =============================================
2816
+ -----BEGIN CERTIFICATE-----
2817
+ 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
2842
+ 5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E
2843
+ -----END CERTIFICATE-----
2844
+
2845
+ e-Szigno Root CA 2017
2846
+ =====================
2847
+ -----BEGIN CERTIFICATE-----
2848
+ MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw
2849
+ DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt
2850
+ MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa
2851
+ Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE
2852
+ CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp
2853
+ Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx
2854
+ s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G
2855
+ A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv
2856
+ vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA
2857
+ tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO
2858
+ svxyqltZ+efcMQ==
2859
+ -----END CERTIFICATE-----
2860
+
2861
+ certSIGN Root CA G2
2862
+ ===================
2863
+ -----BEGIN CERTIFICATE-----
2864
+ MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw
2865
+ EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy
2866
+ MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH
2867
+ TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
2868
+ ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05
2869
+ N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk
2870
+ abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg
2871
+ wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp
2872
+ dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh
2873
+ ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732
2874
+ jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf
2875
+ 95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc
2876
+ z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL
2877
+ iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud
2878
+ DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB
2879
+ ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC
2880
+ b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB
2881
+ /AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5
2882
+ 8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5
2883
+ BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW
2884
+ atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU
2885
+ Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M
2886
+ NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
2887
+ 0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
2888
+ -----END CERTIFICATE-----
2889
+
2890
+ Trustwave Global Certification Authority
2891
+ ========================================
2892
+ -----BEGIN CERTIFICATE-----
2893
+ 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
2919
+ 29FpHOTKyeC2nOnOcXHebD8WpHk=
2920
+ -----END CERTIFICATE-----
2921
+
2922
+ Trustwave Global ECC P256 Certification Authority
2923
+ =================================================
2924
+ -----BEGIN CERTIFICATE-----
2925
+ MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER
2926
+ MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
2927
+ b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp
2928
+ Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD
2929
+ VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
2930
+ dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1
2931
+ NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj
2932
+ 43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm
2933
+ P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt
2934
+ 0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz
2935
+ RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
2936
+ -----END CERTIFICATE-----
2937
+
2938
+ Trustwave Global ECC P384 Certification Authority
2939
+ =================================================
2940
+ -----BEGIN CERTIFICATE-----
2941
+ MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER
2942
+ MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
2943
+ b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp
2944
+ Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD
2945
+ VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
2946
+ dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4
2947
+ NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH
2948
+ Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr
2949
+ /TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV
2950
+ HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn
2951
+ ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
2952
+ CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
2953
+ -----END CERTIFICATE-----
2954
+
2955
+ NAVER Global Root Certification Authority
2956
+ =========================================
2957
+ -----BEGIN CERTIFICATE-----
2958
+ MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
2959
+ A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
2960
+ DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4
2961
+ NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT
2962
+ UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv
2963
+ biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb
2964
+ UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW
2965
+ +j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7
2966
+ XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2
2967
+ aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4
2968
+ Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z
2969
+ VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B
2970
+ A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai
2971
+ cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy
2972
+ YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV
2973
+ HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
2974
+ Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK
2975
+ 21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB
2976
+ jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx
2977
+ hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg
2978
+ E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH
2979
+ D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ
2980
+ A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY
2981
+ qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG
2982
+ I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
2983
+ kpzNNIaRkPpkUZ3+/uul9XXeifdy
2984
+ -----END CERTIFICATE-----
2985
+
2986
+ AC RAIZ FNMT-RCM SERVIDORES SEGUROS
2987
+ ===================================
2988
+ -----BEGIN CERTIFICATE-----
2989
+ MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF
2990
+ UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy
2991
+ NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4
2992
+ MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt
2993
+ UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB
2994
+ QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
2995
+ BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2
2996
+ LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw
2997
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG
2998
+ SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD
2999
+ zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c=
3000
+ -----END CERTIFICATE-----
3001
+
3002
+ GlobalSign Root R46
3003
+ ===================
3004
+ -----BEGIN CERTIFICATE-----
3005
+ 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
3029
+ QEUxeCp6
3030
+ -----END CERTIFICATE-----
3031
+
3032
+ GlobalSign Root E46
3033
+ ===================
3034
+ -----BEGIN CERTIFICATE-----
3035
+ MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT
3036
+ AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg
3037
+ RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV
3038
+ BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq
3039
+ hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB
3040
+ jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj
3041
+ QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL
3042
+ gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
3043
+ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
3044
+ CAezNIm8BZ/3Hobui3A=
3045
+ -----END CERTIFICATE-----
3046
+
3047
+ GLOBALTRUST 2020
3048
+ ================
3049
+ -----BEGIN CERTIFICATE-----
3050
+ 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
3075
+ -----END CERTIFICATE-----
3076
+
3077
+ ANF Secure Server Root CA
3078
+ =========================
3079
+ -----BEGIN CERTIFICATE-----
3080
+ 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
3107
+ -----END CERTIFICATE-----
3108
+
3109
+ Certum EC-384 CA
3110
+ ================
3111
+ -----BEGIN CERTIFICATE-----
3112
+ MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
3113
+ TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
3114
+ dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2
3115
+ MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh
3116
+ dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
3117
+ GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq
3118
+ vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn
3119
+ iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
3120
+ VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
3121
+ ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
3122
+ QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
3123
+ -----END CERTIFICATE-----
3124
+
3125
+ Certum Trusted Root CA
3126
+ ======================
3127
+ -----BEGIN CERTIFICATE-----
3128
+ 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
3154
+ -----END CERTIFICATE-----
3155
+
3156
+ TunTrust Root CA
3157
+ ================
3158
+ -----BEGIN CERTIFICATE-----
3159
+ MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
3160
+ A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
3161
+ dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
3162
+ NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
3163
+ ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
3164
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
3165
+ 2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
3166
+ bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
3167
+ NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
3168
+ gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
3169
+ VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
3170
+ Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
3171
+ juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
3172
+ DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
3173
+ VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
3174
+ 04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
3175
+ 90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
3176
+ 0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
3177
+ Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
3178
+ YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
3179
+ adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
3180
+ xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
3181
+ jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
3182
+ MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
3183
+ ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
3184
+ AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
3185
+ -----END CERTIFICATE-----
3186
+
3187
+ HARICA TLS RSA Root CA 2021
3188
+ ===========================
3189
+ -----BEGIN CERTIFICATE-----
3190
+ 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
3215
+ kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
3216
+ -----END CERTIFICATE-----
3217
+
3218
+ HARICA TLS ECC Root CA 2021
3219
+ ===========================
3220
+ -----BEGIN CERTIFICATE-----
3221
+ MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
3222
+ UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
3223
+ QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
3224
+ DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
3225
+ IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
3226
+ b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
3227
+ AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
3228
+ ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
3229
+ 0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
3230
+ rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
3231
+ CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
3232
+ -----END CERTIFICATE-----
razorpay-sdk/libs/Requests-2.0.0/composer.json ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "rmccue/requests",
3
+ "description": "A HTTP library written in PHP, for human beings.",
4
+ "homepage": "https://requests.ryanmccue.info/",
5
+ "license": "ISC",
6
+ "keywords": [
7
+ "http",
8
+ "idna",
9
+ "iri",
10
+ "ipv6",
11
+ "curl",
12
+ "sockets",
13
+ "fsockopen"
14
+ ],
15
+ "authors": [
16
+ {
17
+ "name": "Ryan McCue",
18
+ "homepage": "https://rmccue.io/"
19
+ },
20
+ {
21
+ "name": "Alain Schlesser",
22
+ "homepage": "https://github.com/schlessera"
23
+ },
24
+ {
25
+ "name": "Juliette Reinders Folmer",
26
+ "homepage": "https://github.com/jrfnl"
27
+ },
28
+ {
29
+ "name": "Contributors",
30
+ "homepage": "https://github.com/WordPress/Requests/graphs/contributors"
31
+ }
32
+ ],
33
+ "support": {
34
+ "issues": "https://github.com/WordPress/Requests/issues",
35
+ "source": "https://github.com/WordPress/Requests",
36
+ "docs": "https://requests.ryanmccue.info/"
37
+ },
38
+ "require": {
39
+ "php": ">=5.6",
40
+ "ext-json": "*"
41
+ },
42
+ "require-dev": {
43
+ "requests/test-server": "dev-master",
44
+ "squizlabs/php_codesniffer": "^3.6",
45
+ "phpcompatibility/php-compatibility": "^9.0",
46
+ "wp-coding-standards/wpcs": "^2.0",
47
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
48
+ "php-parallel-lint/php-parallel-lint": "^1.3.1",
49
+ "php-parallel-lint/php-console-highlighter": "^0.5.0",
50
+ "yoast/phpunit-polyfills": "^1.0.0",
51
+ "roave/security-advisories": "dev-latest"
52
+ },
53
+ "type": "library",
54
+ "autoload": {
55
+ "psr-4": {
56
+ "WpOrg\\Requests\\": "src/"
57
+ },
58
+ "classmap": ["library/Requests.php"],
59
+ "files": ["library/Deprecated.php"]
60
+ },
61
+ "autoload-dev": {
62
+ "psr-4": {
63
+ "WpOrg\\Requests\\Tests\\": "tests/"
64
+ }
65
+ },
66
+ "scripts": {
67
+ "lint": [
68
+ "@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . -e php --exclude vendor --exclude .git"
69
+ ],
70
+ "checkcs": [
71
+ "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs"
72
+ ],
73
+ "fixcs": [
74
+ "@php ./vendor/squizlabs/php_codesniffer/bin/phpcbf"
75
+ ],
76
+ "test": [
77
+ "@php ./vendor/phpunit/phpunit/phpunit --no-coverage"
78
+ ],
79
+ "coverage": [
80
+ "@php ./vendor/phpunit/phpunit/phpunit"
81
+ ]
82
+ }
83
+ }
razorpay-sdk/libs/Requests-2.0.0/library/Deprecated.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Backwards compatibility layer for Requests.
4
+ *
5
+ * Allows for Composer to autoload the old PSR-0 classes via the custom autoloader.
6
+ * This prevents issues with _extending final classes_ (which was the previous solution).
7
+ *
8
+ * Please see the Changelog for the 2.0.0 release for upgrade notes.
9
+ *
10
+ * @package Requests
11
+ *
12
+ * @deprecated 2.0.0 Use the PSR-4 class names instead.
13
+ */
14
+
15
+ if (class_exists('WpOrg\Requests\Autoload') === false) {
16
+ require_once dirname(__DIR__) . '/src/Autoload.php';
17
+ }
18
+
19
+ WpOrg\Requests\Autoload::register();
razorpay-sdk/libs/Requests-2.0.0/library/README.md ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ ## The Library directory is deprecated.
2
+
3
+ The files in this directory are only still in place to provide backward compatibility with Requests 1.x.
4
+ Please see the release notes of Requests 2.0.0 on how to upgrade.
5
+
6
+ This directory will be removed in Requests v 4.0.0.
razorpay-sdk/libs/Requests-2.0.0/library/Requests.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Requests for PHP
4
+ *
5
+ * Inspired by Requests for Python.
6
+ *
7
+ * Based on concepts from SimplePie_File, RequestCore and WP_Http.
8
+ *
9
+ * @package Requests
10
+ *
11
+ * @deprecated 2.0.0
12
+ */
13
+
14
+ /*
15
+ * Integrators who cannot yet upgrade to the PSR-4 class names can silence deprecations
16
+ * by defining a `REQUESTS_SILENCE_PSR0_DEPRECATIONS` constant and setting it to `true`.
17
+ * The constant needs to be defined before this class is required.
18
+ */
19
+ if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS') || REQUESTS_SILENCE_PSR0_DEPRECATIONS !== true) {
20
+ // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
21
+ trigger_error(
22
+ 'The PSR-0 `Requests_...` class names in the Request library are deprecated.'
23
+ . ' Switch to the PSR-4 `WpOrg\Requests\...` class names at your earliest convenience.',
24
+ E_USER_DEPRECATED
25
+ );
26
+
27
+ // Prevent the deprecation notice from being thrown twice.
28
+ if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS')) {
29
+ define('REQUESTS_SILENCE_PSR0_DEPRECATIONS', true);
30
+ }
31
+ }
32
+
33
+ require_once dirname(__DIR__) . '/src/Requests.php';
34
+
35
+ /**
36
+ * Requests for PHP
37
+ *
38
+ * Inspired by Requests for Python.
39
+ *
40
+ * Based on concepts from SimplePie_File, RequestCore and WP_Http.
41
+ *
42
+ * @package Requests
43
+ *
44
+ * @deprecated 2.0.0 Use `WpOrg\Requests\Requests` instead for the actual functionality and
45
+ * use `WpOrg\Requests\Autoload` for the autoloading.
46
+ */
47
+ class Requests extends WpOrg\Requests\Requests {
48
+
49
+ /**
50
+ * Deprecated autoloader for Requests.
51
+ *
52
+ * @deprecated 2.0.0 Use the `WpOrg\Requests\Autoload::load()` method instead.
53
+ *
54
+ * @codeCoverageIgnore
55
+ *
56
+ * @param string $class Class name to load
57
+ */
58
+ public static function autoloader($class) {
59
+ if (class_exists('WpOrg\Requests\Autoload') === false) {
60
+ require_once dirname(__DIR__) . '/src/Autoload.php';
61
+ }
62
+
63
+ return WpOrg\Requests\Autoload::load($class);
64
+ }
65
+
66
+ /**
67
+ * Register the built-in autoloader
68
+ *
69
+ * @deprecated 2.0.0 Include the `WpOrg\Requests\Autoload` class and
70
+ * call `WpOrg\Requests\Autoload::register()` instead.
71
+ *
72
+ * @codeCoverageIgnore
73
+ */
74
+ public static function register_autoloader() {
75
+ require_once dirname(__DIR__) . '/src/Autoload.php';
76
+ WpOrg\Requests\Autoload::register();
77
+ }
78
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Auth.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Authentication provider interface
4
+ *
5
+ * @package Requests\Authentication
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use WpOrg\Requests\Hooks;
11
+
12
+ /**
13
+ * Authentication provider interface
14
+ *
15
+ * Implement this interface to act as an authentication provider.
16
+ *
17
+ * Parameters should be passed via the constructor where possible, as this
18
+ * makes it much easier for users to use your provider.
19
+ *
20
+ * @see \WpOrg\Requests\Hooks
21
+ *
22
+ * @package Requests\Authentication
23
+ */
24
+ interface Auth {
25
+ /**
26
+ * Register hooks as needed
27
+ *
28
+ * This method is called in {@see \WpOrg\Requests\Requests::request()} when the user
29
+ * has set an instance as the 'auth' option. Use this callback to register all the
30
+ * hooks you'll need.
31
+ *
32
+ * @see \WpOrg\Requests\Hooks::register()
33
+ * @param \WpOrg\Requests\Hooks $hooks Hook system
34
+ */
35
+ public function register(Hooks $hooks);
36
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Auth/Basic.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Basic Authentication provider
4
+ *
5
+ * @package Requests\Authentication
6
+ */
7
+
8
+ namespace WpOrg\Requests\Auth;
9
+
10
+ use WpOrg\Requests\Auth;
11
+ use WpOrg\Requests\Exception\ArgumentCount;
12
+ use WpOrg\Requests\Exception\InvalidArgument;
13
+ use WpOrg\Requests\Hooks;
14
+
15
+ /**
16
+ * Basic Authentication provider
17
+ *
18
+ * Provides a handler for Basic HTTP authentication via the Authorization
19
+ * header.
20
+ *
21
+ * @package Requests\Authentication
22
+ */
23
+ class Basic implements Auth {
24
+ /**
25
+ * Username
26
+ *
27
+ * @var string
28
+ */
29
+ public $user;
30
+
31
+ /**
32
+ * Password
33
+ *
34
+ * @var string
35
+ */
36
+ public $pass;
37
+
38
+ /**
39
+ * Constructor
40
+ *
41
+ * @since 2.0 Throws an `InvalidArgument` exception.
42
+ * @since 2.0 Throws an `ArgumentCount` exception instead of the Requests base `Exception.
43
+ *
44
+ * @param array|null $args Array of user and password. Must have exactly two elements
45
+ *
46
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array or null.
47
+ * @throws \WpOrg\Requests\Exception\ArgumentCount On incorrect number of array elements (`authbasicbadargs`).
48
+ */
49
+ public function __construct($args = null) {
50
+ if (is_array($args)) {
51
+ if (count($args) !== 2) {
52
+ throw ArgumentCount::create('an array with exactly two elements', count($args), 'authbasicbadargs');
53
+ }
54
+
55
+ list($this->user, $this->pass) = $args;
56
+ return;
57
+ }
58
+
59
+ if ($args !== null) {
60
+ throw InvalidArgument::create(1, '$args', 'array|null', gettype($args));
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Register the necessary callbacks
66
+ *
67
+ * @see \WpOrg\Requests\Auth\Basic::curl_before_send()
68
+ * @see \WpOrg\Requests\Auth\Basic::fsockopen_header()
69
+ * @param \WpOrg\Requests\Hooks $hooks Hook system
70
+ */
71
+ public function register(Hooks $hooks) {
72
+ $hooks->register('curl.before_send', [$this, 'curl_before_send']);
73
+ $hooks->register('fsockopen.after_headers', [$this, 'fsockopen_header']);
74
+ }
75
+
76
+ /**
77
+ * Set cURL parameters before the data is sent
78
+ *
79
+ * @param resource|\CurlHandle $handle cURL handle
80
+ */
81
+ public function curl_before_send(&$handle) {
82
+ curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
83
+ curl_setopt($handle, CURLOPT_USERPWD, $this->getAuthString());
84
+ }
85
+
86
+ /**
87
+ * Add extra headers to the request before sending
88
+ *
89
+ * @param string $out HTTP header string
90
+ */
91
+ public function fsockopen_header(&$out) {
92
+ $out .= sprintf("Authorization: Basic %s\r\n", base64_encode($this->getAuthString()));
93
+ }
94
+
95
+ /**
96
+ * Get the authentication string (user:pass)
97
+ *
98
+ * @return string
99
+ */
100
+ public function getAuthString() {
101
+ return $this->user . ':' . $this->pass;
102
+ }
103
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Autoload.php ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Autoloader for Requests for PHP.
4
+ *
5
+ * Include this file if you'd like to avoid having to create your own autoloader.
6
+ *
7
+ * @package Requests
8
+ * @since 2.0.0
9
+ *
10
+ * @codeCoverageIgnore
11
+ */
12
+
13
+ namespace WpOrg\Requests;
14
+
15
+ /*
16
+ * Ensure the autoloader is only declared once.
17
+ * This safeguard is in place as this is the typical entry point for this library
18
+ * and this file being required unconditionally could easily cause
19
+ * fatal "Class already declared" errors.
20
+ */
21
+ if (class_exists('WpOrg\Requests\Autoload') === false) {
22
+
23
+ /**
24
+ * Autoloader for Requests for PHP.
25
+ *
26
+ * This autoloader supports the PSR-4 based Requests 2.0.0 classes in a case-sensitive manner
27
+ * as the most common server OS-es are case-sensitive and the file names are in mixed case.
28
+ *
29
+ * For the PSR-0 Requests 1.x BC-layer, requested classes will be treated case-insensitively.
30
+ *
31
+ * @package Requests
32
+ */
33
+ final class Autoload {
34
+
35
+ /**
36
+ * List of the old PSR-0 class names in lowercase as keys with their PSR-4 case-sensitive name as a value.
37
+ *
38
+ * @var array
39
+ */
40
+ private static $deprecated_classes = [
41
+ // Interfaces.
42
+ 'requests_auth' => '\WpOrg\Requests\Auth',
43
+ 'requests_hooker' => '\WpOrg\Requests\HookManager',
44
+ 'requests_proxy' => '\WpOrg\Requests\Proxy',
45
+ 'requests_transport' => '\WpOrg\Requests\Transport',
46
+
47
+ // Classes.
48
+ 'requests_cookie' => '\WpOrg\Requests\Cookie',
49
+ 'requests_exception' => '\WpOrg\Requests\Exception',
50
+ 'requests_hooks' => '\WpOrg\Requests\Hooks',
51
+ 'requests_idnaencoder' => '\WpOrg\Requests\IdnaEncoder',
52
+ 'requests_ipv6' => '\WpOrg\Requests\Ipv6',
53
+ 'requests_iri' => '\WpOrg\Requests\Iri',
54
+ 'requests_response' => '\WpOrg\Requests\Response',
55
+ 'requests_session' => '\WpOrg\Requests\Session',
56
+ 'requests_ssl' => '\WpOrg\Requests\Ssl',
57
+ 'requests_auth_basic' => '\WpOrg\Requests\Auth\Basic',
58
+ 'requests_cookie_jar' => '\WpOrg\Requests\Cookie\Jar',
59
+ 'requests_proxy_http' => '\WpOrg\Requests\Proxy\Http',
60
+ 'requests_response_headers' => '\WpOrg\Requests\Response\Headers',
61
+ 'requests_transport_curl' => '\WpOrg\Requests\Transport\Curl',
62
+ 'requests_transport_fsockopen' => '\WpOrg\Requests\Transport\Fsockopen',
63
+ 'requests_utility_caseinsensitivedictionary' => '\WpOrg\Requests\Utility\CaseInsensitiveDictionary',
64
+ 'requests_utility_filterediterator' => '\WpOrg\Requests\Utility\FilteredIterator',
65
+ 'requests_exception_http' => '\WpOrg\Requests\Exception\Http',
66
+ 'requests_exception_transport' => '\WpOrg\Requests\Exception\Transport',
67
+ 'requests_exception_transport_curl' => '\WpOrg\Requests\Exception\Transport\Curl',
68
+ 'requests_exception_http_304' => '\WpOrg\Requests\Exception\Http\Status304',
69
+ 'requests_exception_http_305' => '\WpOrg\Requests\Exception\Http\Status305',
70
+ 'requests_exception_http_306' => '\WpOrg\Requests\Exception\Http\Status306',
71
+ 'requests_exception_http_400' => '\WpOrg\Requests\Exception\Http\Status400',
72
+ 'requests_exception_http_401' => '\WpOrg\Requests\Exception\Http\Status401',
73
+ 'requests_exception_http_402' => '\WpOrg\Requests\Exception\Http\Status402',
74
+ 'requests_exception_http_403' => '\WpOrg\Requests\Exception\Http\Status403',
75
+ 'requests_exception_http_404' => '\WpOrg\Requests\Exception\Http\Status404',
76
+ 'requests_exception_http_405' => '\WpOrg\Requests\Exception\Http\Status405',
77
+ 'requests_exception_http_406' => '\WpOrg\Requests\Exception\Http\Status406',
78
+ 'requests_exception_http_407' => '\WpOrg\Requests\Exception\Http\Status407',
79
+ 'requests_exception_http_408' => '\WpOrg\Requests\Exception\Http\Status408',
80
+ 'requests_exception_http_409' => '\WpOrg\Requests\Exception\Http\Status409',
81
+ 'requests_exception_http_410' => '\WpOrg\Requests\Exception\Http\Status410',
82
+ 'requests_exception_http_411' => '\WpOrg\Requests\Exception\Http\Status411',
83
+ 'requests_exception_http_412' => '\WpOrg\Requests\Exception\Http\Status412',
84
+ 'requests_exception_http_413' => '\WpOrg\Requests\Exception\Http\Status413',
85
+ 'requests_exception_http_414' => '\WpOrg\Requests\Exception\Http\Status414',
86
+ 'requests_exception_http_415' => '\WpOrg\Requests\Exception\Http\Status415',
87
+ 'requests_exception_http_416' => '\WpOrg\Requests\Exception\Http\Status416',
88
+ 'requests_exception_http_417' => '\WpOrg\Requests\Exception\Http\Status417',
89
+ 'requests_exception_http_418' => '\WpOrg\Requests\Exception\Http\Status418',
90
+ 'requests_exception_http_428' => '\WpOrg\Requests\Exception\Http\Status428',
91
+ 'requests_exception_http_429' => '\WpOrg\Requests\Exception\Http\Status429',
92
+ 'requests_exception_http_431' => '\WpOrg\Requests\Exception\Http\Status431',
93
+ 'requests_exception_http_500' => '\WpOrg\Requests\Exception\Http\Status500',
94
+ 'requests_exception_http_501' => '\WpOrg\Requests\Exception\Http\Status501',
95
+ 'requests_exception_http_502' => '\WpOrg\Requests\Exception\Http\Status502',
96
+ 'requests_exception_http_503' => '\WpOrg\Requests\Exception\Http\Status503',
97
+ 'requests_exception_http_504' => '\WpOrg\Requests\Exception\Http\Status504',
98
+ 'requests_exception_http_505' => '\WpOrg\Requests\Exception\Http\Status505',
99
+ 'requests_exception_http_511' => '\WpOrg\Requests\Exception\Http\Status511',
100
+ 'requests_exception_http_unknown' => '\WpOrg\Requests\Exception\Http\StatusUnknown',
101
+ ];
102
+
103
+ /**
104
+ * Register the autoloader.
105
+ *
106
+ * Note: the autoloader is *prepended* in the autoload queue.
107
+ * This is done to ensure that the Requests 2.0 autoloader takes precedence
108
+ * over a potentially (dependency-registered) Requests 1.x autoloader.
109
+ *
110
+ * @internal This method contains a safeguard against the autoloader being
111
+ * registered multiple times. This safeguard uses a global constant to
112
+ * (hopefully/in most cases) still function correctly, even if the
113
+ * class would be renamed.
114
+ *
115
+ * @return void
116
+ */
117
+ public static function register() {
118
+ if (defined('REQUESTS_AUTOLOAD_REGISTERED') === false) {
119
+ spl_autoload_register([self::class, 'load'], true);
120
+ define('REQUESTS_AUTOLOAD_REGISTERED', true);
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Autoloader.
126
+ *
127
+ * @param string $class_name Name of the class name to load.
128
+ *
129
+ * @return bool Whether a class was loaded or not.
130
+ */
131
+ public static function load($class_name) {
132
+ // Check that the class starts with "Requests" (PSR-0) or "WpOrg\Requests" (PSR-4).
133
+ $psr_4_prefix_pos = strpos($class_name, 'WpOrg\\Requests\\');
134
+
135
+ if (stripos($class_name, 'Requests') !== 0 && $psr_4_prefix_pos !== 0) {
136
+ return false;
137
+ }
138
+
139
+ $class_lower = strtolower($class_name);
140
+
141
+ if ($class_lower === 'requests') {
142
+ // Reference to the original PSR-0 Requests class.
143
+ $file = dirname(__DIR__) . '/library/Requests.php';
144
+ } elseif ($psr_4_prefix_pos === 0) {
145
+ // PSR-4 classname.
146
+ $file = __DIR__ . '/' . strtr(substr($class_name, 15), '\\', '/') . '.php';
147
+ }
148
+
149
+ if (isset($file) && file_exists($file)) {
150
+ include $file;
151
+ return true;
152
+ }
153
+
154
+ /*
155
+ * Okay, so the class starts with "Requests", but we couldn't find the file.
156
+ * If this is one of the deprecated/renamed PSR-0 classes being requested,
157
+ * let's alias it to the new name and throw a deprecation notice.
158
+ */
159
+ if (isset(self::$deprecated_classes[$class_lower])) {
160
+ /*
161
+ * Integrators who cannot yet upgrade to the PSR-4 class names can silence deprecations
162
+ * by defining a `REQUESTS_SILENCE_PSR0_DEPRECATIONS` constant and setting it to `true`.
163
+ * The constant needs to be defined before the first deprecated class is requested
164
+ * via this autoloader.
165
+ */
166
+ if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS') || REQUESTS_SILENCE_PSR0_DEPRECATIONS !== true) {
167
+ // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
168
+ trigger_error(
169
+ 'The PSR-0 `Requests_...` class names in the Request library are deprecated.'
170
+ . ' Switch to the PSR-4 `WpOrg\Requests\...` class names at your earliest convenience.',
171
+ E_USER_DEPRECATED
172
+ );
173
+
174
+ // Prevent the deprecation notice from being thrown twice.
175
+ if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS')) {
176
+ define('REQUESTS_SILENCE_PSR0_DEPRECATIONS', true);
177
+ }
178
+ }
179
+
180
+ // Create an alias and let the autoloader recursively kick in to load the PSR-4 class.
181
+ return class_alias(self::$deprecated_classes[$class_lower], $class_name, true);
182
+ }
183
+
184
+ return false;
185
+ }
186
+ }
187
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Capability.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Capability interface declaring the known capabilities.
4
+ *
5
+ * @package Requests\Utilities
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ /**
11
+ * Capability interface declaring the known capabilities.
12
+ *
13
+ * This is used as the authoritative source for which capabilities can be queried.
14
+ *
15
+ * @package Requests\Utilities
16
+ */
17
+ interface Capability {
18
+
19
+ /**
20
+ * Support for SSL.
21
+ *
22
+ * @var string
23
+ */
24
+ const SSL = 'ssl';
25
+
26
+ /**
27
+ * Collection of all capabilities supported in Requests.
28
+ *
29
+ * Note: this does not automatically mean that the capability will be supported for your chosen transport!
30
+ *
31
+ * @var array<string>
32
+ */
33
+ const ALL = [
34
+ self::SSL,
35
+ ];
36
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Cookie.php ADDED
@@ -0,0 +1,527 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Cookie storage object
4
+ *
5
+ * @package Requests\Cookies
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use WpOrg\Requests\Exception\InvalidArgument;
11
+ use WpOrg\Requests\Iri;
12
+ use WpOrg\Requests\Response\Headers;
13
+ use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
14
+ use WpOrg\Requests\Utility\InputValidator;
15
+
16
+ /**
17
+ * Cookie storage object
18
+ *
19
+ * @package Requests\Cookies
20
+ */
21
+ class Cookie {
22
+ /**
23
+ * Cookie name.
24
+ *
25
+ * @var string
26
+ */
27
+ public $name;
28
+
29
+ /**
30
+ * Cookie value.
31
+ *
32
+ * @var string
33
+ */
34
+ public $value;
35
+
36
+ /**
37
+ * Cookie attributes
38
+ *
39
+ * Valid keys are (currently) path, domain, expires, max-age, secure and
40
+ * httponly.
41
+ *
42
+ * @var \WpOrg\Requests\Utility\CaseInsensitiveDictionary|array Array-like object
43
+ */
44
+ public $attributes = [];
45
+
46
+ /**
47
+ * Cookie flags
48
+ *
49
+ * Valid keys are (currently) creation, last-access, persistent and
50
+ * host-only.
51
+ *
52
+ * @var array
53
+ */
54
+ public $flags = [];
55
+
56
+ /**
57
+ * Reference time for relative calculations
58
+ *
59
+ * This is used in place of `time()` when calculating Max-Age expiration and
60
+ * checking time validity.
61
+ *
62
+ * @var int
63
+ */
64
+ public $reference_time = 0;
65
+
66
+ /**
67
+ * Create a new cookie object
68
+ *
69
+ * @param string $name
70
+ * @param string $value
71
+ * @param array|\WpOrg\Requests\Utility\CaseInsensitiveDictionary $attributes Associative array of attribute data
72
+ * @param array $flags
73
+ * @param int|null $reference_time
74
+ *
75
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $name argument is not a string.
76
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $value argument is not a string.
77
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $attributes argument is not an array or iterable object with array access.
78
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $flags argument is not an array.
79
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $reference_time argument is not an integer or null.
80
+ */
81
+ public function __construct($name, $value, $attributes = [], $flags = [], $reference_time = null) {
82
+ if (is_string($name) === false) {
83
+ throw InvalidArgument::create(1, '$name', 'string', gettype($name));
84
+ }
85
+
86
+ if (is_string($value) === false) {
87
+ throw InvalidArgument::create(2, '$value', 'string', gettype($value));
88
+ }
89
+
90
+ if (InputValidator::has_array_access($attributes) === false || InputValidator::is_iterable($attributes) === false) {
91
+ throw InvalidArgument::create(3, '$attributes', 'array|ArrayAccess&Traversable', gettype($attributes));
92
+ }
93
+
94
+ if (is_array($flags) === false) {
95
+ throw InvalidArgument::create(4, '$flags', 'array', gettype($flags));
96
+ }
97
+
98
+ if ($reference_time !== null && is_int($reference_time) === false) {
99
+ throw InvalidArgument::create(5, '$reference_time', 'integer|null', gettype($reference_time));
100
+ }
101
+
102
+ $this->name = $name;
103
+ $this->value = $value;
104
+ $this->attributes = $attributes;
105
+ $default_flags = [
106
+ 'creation' => time(),
107
+ 'last-access' => time(),
108
+ 'persistent' => false,
109
+ 'host-only' => true,
110
+ ];
111
+ $this->flags = array_merge($default_flags, $flags);
112
+
113
+ $this->reference_time = time();
114
+ if ($reference_time !== null) {
115
+ $this->reference_time = $reference_time;
116
+ }
117
+
118
+ $this->normalize();
119
+ }
120
+
121
+ /**
122
+ * Get the cookie value
123
+ *
124
+ * Attributes and other data can be accessed via methods.
125
+ */
126
+ public function __toString() {
127
+ return $this->value;
128
+ }
129
+
130
+ /**
131
+ * Check if a cookie is expired.
132
+ *
133
+ * Checks the age against $this->reference_time to determine if the cookie
134
+ * is expired.
135
+ *
136
+ * @return boolean True if expired, false if time is valid.
137
+ */
138
+ public function is_expired() {
139
+ // RFC6265, s. 4.1.2.2:
140
+ // If a cookie has both the Max-Age and the Expires attribute, the Max-
141
+ // Age attribute has precedence and controls the expiration date of the
142
+ // cookie.
143
+ if (isset($this->attributes['max-age'])) {
144
+ $max_age = $this->attributes['max-age'];
145
+ return $max_age < $this->reference_time;
146
+ }
147
+
148
+ if (isset($this->attributes['expires'])) {
149
+ $expires = $this->attributes['expires'];
150
+ return $expires < $this->reference_time;
151
+ }
152
+
153
+ return false;
154
+ }
155
+
156
+ /**
157
+ * Check if a cookie is valid for a given URI
158
+ *
159
+ * @param \WpOrg\Requests\Iri $uri URI to check
160
+ * @return boolean Whether the cookie is valid for the given URI
161
+ */
162
+ public function uri_matches(Iri $uri) {
163
+ if (!$this->domain_matches($uri->host)) {
164
+ return false;
165
+ }
166
+
167
+ if (!$this->path_matches($uri->path)) {
168
+ return false;
169
+ }
170
+
171
+ return empty($this->attributes['secure']) || $uri->scheme === 'https';
172
+ }
173
+
174
+ /**
175
+ * Check if a cookie is valid for a given domain
176
+ *
177
+ * @param string $domain Domain to check
178
+ * @return boolean Whether the cookie is valid for the given domain
179
+ */
180
+ public function domain_matches($domain) {
181
+ if (is_string($domain) === false) {
182
+ return false;
183
+ }
184
+
185
+ if (!isset($this->attributes['domain'])) {
186
+ // Cookies created manually; cookies created by Requests will set
187
+ // the domain to the requested domain
188
+ return true;
189
+ }
190
+
191
+ $cookie_domain = $this->attributes['domain'];
192
+ if ($cookie_domain === $domain) {
193
+ // The cookie domain and the passed domain are identical.
194
+ return true;
195
+ }
196
+
197
+ // If the cookie is marked as host-only and we don't have an exact
198
+ // match, reject the cookie
199
+ if ($this->flags['host-only'] === true) {
200
+ return false;
201
+ }
202
+
203
+ if (strlen($domain) <= strlen($cookie_domain)) {
204
+ // For obvious reasons, the cookie domain cannot be a suffix if the passed domain
205
+ // is shorter than the cookie domain
206
+ return false;
207
+ }
208
+
209
+ if (substr($domain, -1 * strlen($cookie_domain)) !== $cookie_domain) {
210
+ // The cookie domain should be a suffix of the passed domain.
211
+ return false;
212
+ }
213
+
214
+ $prefix = substr($domain, 0, strlen($domain) - strlen($cookie_domain));
215
+ if (substr($prefix, -1) !== '.') {
216
+ // The last character of the passed domain that is not included in the
217
+ // domain string should be a %x2E (".") character.
218
+ return false;
219
+ }
220
+
221
+ // The passed domain should be a host name (i.e., not an IP address).
222
+ return !preg_match('#^(.+\.)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $domain);
223
+ }
224
+
225
+ /**
226
+ * Check if a cookie is valid for a given path
227
+ *
228
+ * From the path-match check in RFC 6265 section 5.1.4
229
+ *
230
+ * @param string $request_path Path to check
231
+ * @return boolean Whether the cookie is valid for the given path
232
+ */
233
+ public function path_matches($request_path) {
234
+ if (empty($request_path)) {
235
+ // Normalize empty path to root
236
+ $request_path = '/';
237
+ }
238
+
239
+ if (!isset($this->attributes['path'])) {
240
+ // Cookies created manually; cookies created by Requests will set
241
+ // the path to the requested path
242
+ return true;
243
+ }
244
+
245
+ if (is_scalar($request_path) === false) {
246
+ return false;
247
+ }
248
+
249
+ $cookie_path = $this->attributes['path'];
250
+
251
+ if ($cookie_path === $request_path) {
252
+ // The cookie-path and the request-path are identical.
253
+ return true;
254
+ }
255
+
256
+ if (strlen($request_path) > strlen($cookie_path) && substr($request_path, 0, strlen($cookie_path)) === $cookie_path) {
257
+ if (substr($cookie_path, -1) === '/') {
258
+ // The cookie-path is a prefix of the request-path, and the last
259
+ // character of the cookie-path is %x2F ("/").
260
+ return true;
261
+ }
262
+
263
+ if (substr($request_path, strlen($cookie_path), 1) === '/') {
264
+ // The cookie-path is a prefix of the request-path, and the
265
+ // first character of the request-path that is not included in
266
+ // the cookie-path is a %x2F ("/") character.
267
+ return true;
268
+ }
269
+ }
270
+
271
+ return false;
272
+ }
273
+
274
+ /**
275
+ * Normalize cookie and attributes
276
+ *
277
+ * @return boolean Whether the cookie was successfully normalized
278
+ */
279
+ public function normalize() {
280
+ foreach ($this->attributes as $key => $value) {
281
+ $orig_value = $value;
282
+ $value = $this->normalize_attribute($key, $value);
283
+ if ($value === null) {
284
+ unset($this->attributes[$key]);
285
+ continue;
286
+ }
287
+
288
+ if ($value !== $orig_value) {
289
+ $this->attributes[$key] = $value;
290
+ }
291
+ }
292
+
293
+ return true;
294
+ }
295
+
296
+ /**
297
+ * Parse an individual cookie attribute
298
+ *
299
+ * Handles parsing individual attributes from the cookie values.
300
+ *
301
+ * @param string $name Attribute name
302
+ * @param string|boolean $value Attribute value (string value, or true if empty/flag)
303
+ * @return mixed Value if available, or null if the attribute value is invalid (and should be skipped)
304
+ */
305
+ protected function normalize_attribute($name, $value) {
306
+ switch (strtolower($name)) {
307
+ case 'expires':
308
+ // Expiration parsing, as per RFC 6265 section 5.2.1
309
+ if (is_int($value)) {
310
+ return $value;
311
+ }
312
+
313
+ $expiry_time = strtotime($value);
314
+ if ($expiry_time === false) {
315
+ return null;
316
+ }
317
+
318
+ return $expiry_time;
319
+
320
+ case 'max-age':
321
+ // Expiration parsing, as per RFC 6265 section 5.2.2
322
+ if (is_int($value)) {
323
+ return $value;
324
+ }
325
+
326
+ // Check that we have a valid age
327
+ if (!preg_match('/^-?\d+$/', $value)) {
328
+ return null;
329
+ }
330
+
331
+ $delta_seconds = (int) $value;
332
+ if ($delta_seconds <= 0) {
333
+ $expiry_time = 0;
334
+ }
335
+ else {
336
+ $expiry_time = $this->reference_time + $delta_seconds;
337
+ }
338
+
339
+ return $expiry_time;
340
+
341
+ case 'domain':
342
+ // Domains are not required as per RFC 6265 section 5.2.3
343
+ if (empty($value)) {
344
+ return null;
345
+ }
346
+
347
+ // Domain normalization, as per RFC 6265 section 5.2.3
348
+ if ($value[0] === '.') {
349
+ $value = substr($value, 1);
350
+ }
351
+
352
+ return $value;
353
+
354
+ default:
355
+ return $value;
356
+ }
357
+ }
358
+
359
+ /**
360
+ * Format a cookie for a Cookie header
361
+ *
362
+ * This is used when sending cookies to a server.
363
+ *
364
+ * @return string Cookie formatted for Cookie header
365
+ */
366
+ public function format_for_header() {
367
+ return sprintf('%s=%s', $this->name, $this->value);
368
+ }
369
+
370
+ /**
371
+ * Format a cookie for a Set-Cookie header
372
+ *
373
+ * This is used when sending cookies to clients. This isn't really
374
+ * applicable to client-side usage, but might be handy for debugging.
375
+ *
376
+ * @return string Cookie formatted for Set-Cookie header
377
+ */
378
+ public function format_for_set_cookie() {
379
+ $header_value = $this->format_for_header();
380
+ if (!empty($this->attributes)) {
381
+ $parts = [];
382
+ foreach ($this->attributes as $key => $value) {
383
+ // Ignore non-associative attributes
384
+ if (is_numeric($key)) {
385
+ $parts[] = $value;
386
+ }
387
+ else {
388
+ $parts[] = sprintf('%s=%s', $key, $value);
389
+ }
390
+ }
391
+
392
+ $header_value .= '; ' . implode('; ', $parts);
393
+ }
394
+ return $header_value;
395
+ }
396
+
397
+ /**
398
+ * Parse a cookie string into a cookie object
399
+ *
400
+ * Based on Mozilla's parsing code in Firefox and related projects, which
401
+ * is an intentional deviation from RFC 2109 and RFC 2616. RFC 6265
402
+ * specifies some of this handling, but not in a thorough manner.
403
+ *
404
+ * @param string $cookie_header Cookie header value (from a Set-Cookie header)
405
+ * @param string $name
406
+ * @param int|null $reference_time
407
+ * @return \WpOrg\Requests\Cookie Parsed cookie object
408
+ *
409
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $cookie_header argument is not a string.
410
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $name argument is not a string.
411
+ */
412
+ public static function parse($cookie_header, $name = '', $reference_time = null) {
413
+ if (is_string($cookie_header) === false) {
414
+ throw InvalidArgument::create(1, '$cookie_header', 'string', gettype($cookie_header));
415
+ }
416
+
417
+ if (is_string($name) === false) {
418
+ throw InvalidArgument::create(2, '$name', 'string', gettype($name));
419
+ }
420
+
421
+ $parts = explode(';', $cookie_header);
422
+ $kvparts = array_shift($parts);
423
+
424
+ if (!empty($name)) {
425
+ $value = $cookie_header;
426
+ }
427
+ elseif (strpos($kvparts, '=') === false) {
428
+ // Some sites might only have a value without the equals separator.
429
+ // Deviate from RFC 6265 and pretend it was actually a blank name
430
+ // (`=foo`)
431
+ //
432
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=169091
433
+ $name = '';
434
+ $value = $kvparts;
435
+ }
436
+ else {
437
+ list($name, $value) = explode('=', $kvparts, 2);
438
+ }
439
+ $name = trim($name);
440
+ $value = trim($value);
441
+
442
+ // Attribute keys are handled case-insensitively
443
+ $attributes = new CaseInsensitiveDictionary();
444
+
445
+ if (!empty($parts)) {
446
+ foreach ($parts as $part) {
447
+ if (strpos($part, '=') === false) {
448
+ $part_key = $part;
449
+ $part_value = true;
450
+ }
451
+ else {
452
+ list($part_key, $part_value) = explode('=', $part, 2);
453
+ $part_value = trim($part_value);
454
+ }
455
+
456
+ $part_key = trim($part_key);
457
+ $attributes[$part_key] = $part_value;
458
+ }
459
+ }
460
+
461
+ return new static($name, $value, $attributes, [], $reference_time);
462
+ }
463
+
464
+ /**
465
+ * Parse all Set-Cookie headers from request headers
466
+ *
467
+ * @param \WpOrg\Requests\Response\Headers $headers Headers to parse from
468
+ * @param \WpOrg\Requests\Iri|null $origin URI for comparing cookie origins
469
+ * @param int|null $time Reference time for expiration calculation
470
+ * @return array
471
+ */
472
+ public static function parse_from_headers(Headers $headers, Iri $origin = null, $time = null) {
473
+ $cookie_headers = $headers->getValues('Set-Cookie');
474
+ if (empty($cookie_headers)) {
475
+ return [];
476
+ }
477
+
478
+ $cookies = [];
479
+ foreach ($cookie_headers as $header) {
480
+ $parsed = self::parse($header, '', $time);
481
+
482
+ // Default domain/path attributes
483
+ if (empty($parsed->attributes['domain']) && !empty($origin)) {
484
+ $parsed->attributes['domain'] = $origin->host;
485
+ $parsed->flags['host-only'] = true;
486
+ }
487
+ else {
488
+ $parsed->flags['host-only'] = false;
489
+ }
490
+
491
+ $path_is_valid = (!empty($parsed->attributes['path']) && $parsed->attributes['path'][0] === '/');
492
+ if (!$path_is_valid && !empty($origin)) {
493
+ $path = $origin->path;
494
+
495
+ // Default path normalization as per RFC 6265 section 5.1.4
496
+ if (substr($path, 0, 1) !== '/') {
497
+ // If the uri-path is empty or if the first character of
498
+ // the uri-path is not a %x2F ("/") character, output
499
+ // %x2F ("/") and skip the remaining steps.
500
+ $path = '/';
501
+ }
502
+ elseif (substr_count($path, '/') === 1) {
503
+ // If the uri-path contains no more than one %x2F ("/")
504
+ // character, output %x2F ("/") and skip the remaining
505
+ // step.
506
+ $path = '/';
507
+ }
508
+ else {
509
+ // Output the characters of the uri-path from the first
510
+ // character up to, but not including, the right-most
511
+ // %x2F ("/").
512
+ $path = substr($path, 0, strrpos($path, '/'));
513
+ }
514
+ $parsed->attributes['path'] = $path;
515
+ }
516
+
517
+ // Reject invalid cookie domains
518
+ if (!empty($origin) && !$parsed->domain_matches($origin->host)) {
519
+ continue;
520
+ }
521
+
522
+ $cookies[$parsed->name] = $parsed;
523
+ }
524
+
525
+ return $cookies;
526
+ }
527
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Cookie/Jar.php ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Cookie holder object
4
+ *
5
+ * @package Requests\Cookies
6
+ */
7
+
8
+ namespace WpOrg\Requests\Cookie;
9
+
10
+ use ArrayAccess;
11
+ use ArrayIterator;
12
+ use IteratorAggregate;
13
+ use ReturnTypeWillChange;
14
+ use WpOrg\Requests\Cookie;
15
+ use WpOrg\Requests\Exception;
16
+ use WpOrg\Requests\Exception\InvalidArgument;
17
+ use WpOrg\Requests\HookManager;
18
+ use WpOrg\Requests\Iri;
19
+ use WpOrg\Requests\Response;
20
+
21
+ /**
22
+ * Cookie holder object
23
+ *
24
+ * @package Requests\Cookies
25
+ */
26
+ class Jar implements ArrayAccess, IteratorAggregate {
27
+ /**
28
+ * Actual item data
29
+ *
30
+ * @var array
31
+ */
32
+ protected $cookies = [];
33
+
34
+ /**
35
+ * Create a new jar
36
+ *
37
+ * @param array $cookies Existing cookie values
38
+ *
39
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array.
40
+ */
41
+ public function __construct($cookies = []) {
42
+ if (is_array($cookies) === false) {
43
+ throw InvalidArgument::create(1, '$cookies', 'array', gettype($cookies));
44
+ }
45
+
46
+ $this->cookies = $cookies;
47
+ }
48
+
49
+ /**
50
+ * Normalise cookie data into a \WpOrg\Requests\Cookie
51
+ *
52
+ * @param string|\WpOrg\Requests\Cookie $cookie
53
+ * @return \WpOrg\Requests\Cookie
54
+ */
55
+ public function normalize_cookie($cookie, $key = '') {
56
+ if ($cookie instanceof Cookie) {
57
+ return $cookie;
58
+ }
59
+
60
+ return Cookie::parse($cookie, $key);
61
+ }
62
+
63
+ /**
64
+ * Check if the given item exists
65
+ *
66
+ * @param string $offset Item key
67
+ * @return boolean Does the item exist?
68
+ */
69
+ #[ReturnTypeWillChange]
70
+ public function offsetExists($offset) {
71
+ return isset($this->cookies[$offset]);
72
+ }
73
+
74
+ /**
75
+ * Get the value for the item
76
+ *
77
+ * @param string $offset Item key
78
+ * @return string|null Item value (null if offsetExists is false)
79
+ */
80
+ #[ReturnTypeWillChange]
81
+ public function offsetGet($offset) {
82
+ if (!isset($this->cookies[$offset])) {
83
+ return null;
84
+ }
85
+
86
+ return $this->cookies[$offset];
87
+ }
88
+
89
+ /**
90
+ * Set the given item
91
+ *
92
+ * @param string $offset Item name
93
+ * @param string $value Item value
94
+ *
95
+ * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
96
+ */
97
+ #[ReturnTypeWillChange]
98
+ public function offsetSet($offset, $value) {
99
+ if ($offset === null) {
100
+ throw new Exception('Object is a dictionary, not a list', 'invalidset');
101
+ }
102
+
103
+ $this->cookies[$offset] = $value;
104
+ }
105
+
106
+ /**
107
+ * Unset the given header
108
+ *
109
+ * @param string $offset
110
+ */
111
+ #[ReturnTypeWillChange]
112
+ public function offsetUnset($offset) {
113
+ unset($this->cookies[$offset]);
114
+ }
115
+
116
+ /**
117
+ * Get an iterator for the data
118
+ *
119
+ * @return \ArrayIterator
120
+ */
121
+ #[ReturnTypeWillChange]
122
+ public function getIterator() {
123
+ return new ArrayIterator($this->cookies);
124
+ }
125
+
126
+ /**
127
+ * Register the cookie handler with the request's hooking system
128
+ *
129
+ * @param \WpOrg\Requests\HookManager $hooks Hooking system
130
+ */
131
+ public function register(HookManager $hooks) {
132
+ $hooks->register('requests.before_request', [$this, 'before_request']);
133
+ $hooks->register('requests.before_redirect_check', [$this, 'before_redirect_check']);
134
+ }
135
+
136
+ /**
137
+ * Add Cookie header to a request if we have any
138
+ *
139
+ * As per RFC 6265, cookies are separated by '; '
140
+ *
141
+ * @param string $url
142
+ * @param array $headers
143
+ * @param array $data
144
+ * @param string $type
145
+ * @param array $options
146
+ */
147
+ public function before_request($url, &$headers, &$data, &$type, &$options) {
148
+ if (!$url instanceof Iri) {
149
+ $url = new Iri($url);
150
+ }
151
+
152
+ if (!empty($this->cookies)) {
153
+ $cookies = [];
154
+ foreach ($this->cookies as $key => $cookie) {
155
+ $cookie = $this->normalize_cookie($cookie, $key);
156
+
157
+ // Skip expired cookies
158
+ if ($cookie->is_expired()) {
159
+ continue;
160
+ }
161
+
162
+ if ($cookie->domain_matches($url->host)) {
163
+ $cookies[] = $cookie->format_for_header();
164
+ }
165
+ }
166
+
167
+ $headers['Cookie'] = implode('; ', $cookies);
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Parse all cookies from a response and attach them to the response
173
+ *
174
+ * @param \WpOrg\Requests\Response $response
175
+ */
176
+ public function before_redirect_check(Response $response) {
177
+ $url = $response->url;
178
+ if (!$url instanceof Iri) {
179
+ $url = new Iri($url);
180
+ }
181
+
182
+ $cookies = Cookie::parse_from_headers($response->headers, $url);
183
+ $this->cookies = array_merge($this->cookies, $cookies);
184
+ $response->cookies = $this;
185
+ }
186
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for HTTP requests
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use Exception as PHPException;
11
+
12
+ /**
13
+ * Exception for HTTP requests
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ class Exception extends PHPException {
18
+ /**
19
+ * Type of exception
20
+ *
21
+ * @var string
22
+ */
23
+ protected $type;
24
+
25
+ /**
26
+ * Data associated with the exception
27
+ *
28
+ * @var mixed
29
+ */
30
+ protected $data;
31
+
32
+ /**
33
+ * Create a new exception
34
+ *
35
+ * @param string $message Exception message
36
+ * @param string $type Exception type
37
+ * @param mixed $data Associated data
38
+ * @param integer $code Exception numerical code, if applicable
39
+ */
40
+ public function __construct($message, $type, $data = null, $code = 0) {
41
+ parent::__construct($message, $code);
42
+
43
+ $this->type = $type;
44
+ $this->data = $data;
45
+ }
46
+
47
+ /**
48
+ * Like {@see \Exception::getCode()}, but a string code.
49
+ *
50
+ * @codeCoverageIgnore
51
+ * @return string
52
+ */
53
+ public function getType() {
54
+ return $this->type;
55
+ }
56
+
57
+ /**
58
+ * Gives any relevant data
59
+ *
60
+ * @codeCoverageIgnore
61
+ * @return mixed
62
+ */
63
+ public function getData() {
64
+ return $this->data;
65
+ }
66
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/ArgumentCount.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WpOrg\Requests\Exception;
4
+
5
+ use WpOrg\Requests\Exception;
6
+
7
+ /**
8
+ * Exception for when an incorrect number of arguments are passed to a method.
9
+ *
10
+ * Typically, this exception is used when all arguments for a method are optional,
11
+ * but certain arguments need to be passed together, i.e. a method which can be called
12
+ * with no arguments or with two arguments, but not with one argument.
13
+ *
14
+ * Along the same lines, this exception is also used if a method expects an array
15
+ * with a certain number of elements and the provided number of elements does not comply.
16
+ *
17
+ * @package Requests\Exceptions
18
+ * @since 2.0.0
19
+ */
20
+ final class ArgumentCount extends Exception {
21
+
22
+ /**
23
+ * Create a new argument count exception with a standardized text.
24
+ *
25
+ * @param string $expected The argument count expected as a phrase.
26
+ * For example: `at least 2 arguments` or `exactly 1 argument`.
27
+ * @param int $received The actual argument count received.
28
+ * @param string $type Exception type.
29
+ *
30
+ * @return \WpOrg\Requests\Exception\ArgumentCount
31
+ */
32
+ public static function create($expected, $received, $type) {
33
+ // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
34
+ $stack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
35
+
36
+ return new self(
37
+ sprintf(
38
+ '%s::%s() expects %s, %d given',
39
+ $stack[1]['class'],
40
+ $stack[1]['function'],
41
+ $expected,
42
+ $received
43
+ ),
44
+ $type
45
+ );
46
+ }
47
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception based on HTTP response
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception;
9
+
10
+ use WpOrg\Requests\Exception;
11
+ use WpOrg\Requests\Exception\Http\StatusUnknown;
12
+
13
+ /**
14
+ * Exception based on HTTP response
15
+ *
16
+ * @package Requests\Exceptions
17
+ */
18
+ class Http extends Exception {
19
+ /**
20
+ * HTTP status code
21
+ *
22
+ * @var integer
23
+ */
24
+ protected $code = 0;
25
+
26
+ /**
27
+ * Reason phrase
28
+ *
29
+ * @var string
30
+ */
31
+ protected $reason = 'Unknown';
32
+
33
+ /**
34
+ * Create a new exception
35
+ *
36
+ * There is no mechanism to pass in the status code, as this is set by the
37
+ * subclass used. Reason phrases can vary, however.
38
+ *
39
+ * @param string|null $reason Reason phrase
40
+ * @param mixed $data Associated data
41
+ */
42
+ public function __construct($reason = null, $data = null) {
43
+ if ($reason !== null) {
44
+ $this->reason = $reason;
45
+ }
46
+
47
+ $message = sprintf('%d %s', $this->code, $this->reason);
48
+ parent::__construct($message, 'httpresponse', $data, $this->code);
49
+ }
50
+
51
+ /**
52
+ * Get the status message.
53
+ *
54
+ * @return string
55
+ */
56
+ public function getReason() {
57
+ return $this->reason;
58
+ }
59
+
60
+ /**
61
+ * Get the correct exception class for a given error code
62
+ *
63
+ * @param int|bool $code HTTP status code, or false if unavailable
64
+ * @return string Exception class name to use
65
+ */
66
+ public static function get_class($code) {
67
+ if (!$code) {
68
+ return StatusUnknown::class;
69
+ }
70
+
71
+ $class = sprintf('\WpOrg\Requests\Exception\Http\Status%d', $code);
72
+ if (class_exists($class)) {
73
+ return $class;
74
+ }
75
+
76
+ return StatusUnknown::class;
77
+ }
78
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status304.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 304 Not Modified responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 304 Not Modified responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status304 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 304;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Not Modified';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status305.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 305 Use Proxy responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 305 Use Proxy responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status305 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 305;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Use Proxy';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status306.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 306 Switch Proxy responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 306 Switch Proxy responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status306 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 306;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Switch Proxy';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status400.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 400 Bad Request responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 400 Bad Request responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status400 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 400;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Bad Request';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status401.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 401 Unauthorized responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 401 Unauthorized responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status401 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 401;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Unauthorized';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status402.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 402 Payment Required responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 402 Payment Required responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status402 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 402;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Payment Required';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status403.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 403 Forbidden responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 403 Forbidden responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status403 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 403;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Forbidden';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status404.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 404 Not Found responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 404 Not Found responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status404 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 404;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Not Found';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status405.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 405 Method Not Allowed responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 405 Method Not Allowed responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status405 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 405;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Method Not Allowed';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status406.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 406 Not Acceptable responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 406 Not Acceptable responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status406 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 406;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Not Acceptable';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status407.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 407 Proxy Authentication Required responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 407 Proxy Authentication Required responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status407 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 407;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Proxy Authentication Required';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status408.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 408 Request Timeout responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 408 Request Timeout responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status408 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 408;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Request Timeout';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status409.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 409 Conflict responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 409 Conflict responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status409 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 409;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Conflict';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status410.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 410 Gone responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 410 Gone responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status410 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 410;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Gone';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status411.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 411 Length Required responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 411 Length Required responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status411 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 411;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Length Required';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status412.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 412 Precondition Failed responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 412 Precondition Failed responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status412 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 412;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Precondition Failed';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status413.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 413 Request Entity Too Large responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 413 Request Entity Too Large responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status413 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 413;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Request Entity Too Large';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status414.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 414 Request-URI Too Large responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 414 Request-URI Too Large responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status414 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 414;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Request-URI Too Large';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status415.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 415 Unsupported Media Type responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 415 Unsupported Media Type responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status415 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 415;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Unsupported Media Type';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status416.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 416 Requested Range Not Satisfiable responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 416 Requested Range Not Satisfiable responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status416 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 416;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Requested Range Not Satisfiable';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status417.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 417 Expectation Failed responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 417 Expectation Failed responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status417 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 417;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Expectation Failed';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status418.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 418 I'm A Teapot responses
4
+ *
5
+ * @link https://tools.ietf.org/html/rfc2324
6
+ *
7
+ * @package Requests\Exceptions
8
+ */
9
+
10
+ namespace WpOrg\Requests\Exception\Http;
11
+
12
+ use WpOrg\Requests\Exception\Http;
13
+
14
+ /**
15
+ * Exception for 418 I'm A Teapot responses
16
+ *
17
+ * @link https://tools.ietf.org/html/rfc2324
18
+ *
19
+ * @package Requests\Exceptions
20
+ */
21
+ final class Status418 extends Http {
22
+ /**
23
+ * HTTP status code
24
+ *
25
+ * @var integer
26
+ */
27
+ protected $code = 418;
28
+
29
+ /**
30
+ * Reason phrase
31
+ *
32
+ * @var string
33
+ */
34
+ protected $reason = "I'm A Teapot";
35
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status428.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 428 Precondition Required responses
4
+ *
5
+ * @link https://tools.ietf.org/html/rfc6585
6
+ *
7
+ * @package Requests\Exceptions
8
+ */
9
+
10
+ namespace WpOrg\Requests\Exception\Http;
11
+
12
+ use WpOrg\Requests\Exception\Http;
13
+
14
+ /**
15
+ * Exception for 428 Precondition Required responses
16
+ *
17
+ * @link https://tools.ietf.org/html/rfc6585
18
+ *
19
+ * @package Requests\Exceptions
20
+ */
21
+ final class Status428 extends Http {
22
+ /**
23
+ * HTTP status code
24
+ *
25
+ * @var integer
26
+ */
27
+ protected $code = 428;
28
+
29
+ /**
30
+ * Reason phrase
31
+ *
32
+ * @var string
33
+ */
34
+ protected $reason = 'Precondition Required';
35
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status429.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 429 Too Many Requests responses
4
+ *
5
+ * @link https://tools.ietf.org/html/draft-nottingham-http-new-status-04
6
+ *
7
+ * @package Requests\Exceptions
8
+ */
9
+
10
+ namespace WpOrg\Requests\Exception\Http;
11
+
12
+ use WpOrg\Requests\Exception\Http;
13
+
14
+ /**
15
+ * Exception for 429 Too Many Requests responses
16
+ *
17
+ * @link https://tools.ietf.org/html/draft-nottingham-http-new-status-04
18
+ *
19
+ * @package Requests\Exceptions
20
+ */
21
+ final class Status429 extends Http {
22
+ /**
23
+ * HTTP status code
24
+ *
25
+ * @var integer
26
+ */
27
+ protected $code = 429;
28
+
29
+ /**
30
+ * Reason phrase
31
+ *
32
+ * @var string
33
+ */
34
+ protected $reason = 'Too Many Requests';
35
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status431.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 431 Request Header Fields Too Large responses
4
+ *
5
+ * @link https://tools.ietf.org/html/rfc6585
6
+ *
7
+ * @package Requests\Exceptions
8
+ */
9
+
10
+ namespace WpOrg\Requests\Exception\Http;
11
+
12
+ use WpOrg\Requests\Exception\Http;
13
+
14
+ /**
15
+ * Exception for 431 Request Header Fields Too Large responses
16
+ *
17
+ * @link https://tools.ietf.org/html/rfc6585
18
+ *
19
+ * @package Requests\Exceptions
20
+ */
21
+ final class Status431 extends Http {
22
+ /**
23
+ * HTTP status code
24
+ *
25
+ * @var integer
26
+ */
27
+ protected $code = 431;
28
+
29
+ /**
30
+ * Reason phrase
31
+ *
32
+ * @var string
33
+ */
34
+ protected $reason = 'Request Header Fields Too Large';
35
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status500.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 500 Internal Server Error responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 500 Internal Server Error responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status500 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 500;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Internal Server Error';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status501.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 501 Not Implemented responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 501 Not Implemented responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status501 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 501;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Not Implemented';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status502.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 502 Bad Gateway responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 502 Bad Gateway responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status502 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 502;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Bad Gateway';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status503.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 503 Service Unavailable responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 503 Service Unavailable responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status503 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 503;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Service Unavailable';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status504.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 504 Gateway Timeout responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 504 Gateway Timeout responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status504 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 504;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'Gateway Timeout';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status505.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 505 HTTP Version Not Supported responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+
12
+ /**
13
+ * Exception for 505 HTTP Version Not Supported responses
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Status505 extends Http {
18
+ /**
19
+ * HTTP status code
20
+ *
21
+ * @var integer
22
+ */
23
+ protected $code = 505;
24
+
25
+ /**
26
+ * Reason phrase
27
+ *
28
+ * @var string
29
+ */
30
+ protected $reason = 'HTTP Version Not Supported';
31
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/Status511.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for 511 Network Authentication Required responses
4
+ *
5
+ * @link https://tools.ietf.org/html/rfc6585
6
+ *
7
+ * @package Requests\Exceptions
8
+ */
9
+
10
+ namespace WpOrg\Requests\Exception\Http;
11
+
12
+ use WpOrg\Requests\Exception\Http;
13
+
14
+ /**
15
+ * Exception for 511 Network Authentication Required responses
16
+ *
17
+ * @link https://tools.ietf.org/html/rfc6585
18
+ *
19
+ * @package Requests\Exceptions
20
+ */
21
+ final class Status511 extends Http {
22
+ /**
23
+ * HTTP status code
24
+ *
25
+ * @var integer
26
+ */
27
+ protected $code = 511;
28
+
29
+ /**
30
+ * Reason phrase
31
+ *
32
+ * @var string
33
+ */
34
+ protected $reason = 'Network Authentication Required';
35
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Http/StatusUnknown.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Exception for unknown status responses
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Http;
9
+
10
+ use WpOrg\Requests\Exception\Http;
11
+ use WpOrg\Requests\Response;
12
+
13
+ /**
14
+ * Exception for unknown status responses
15
+ *
16
+ * @package Requests\Exceptions
17
+ */
18
+ final class StatusUnknown extends Http {
19
+ /**
20
+ * HTTP status code
21
+ *
22
+ * @var integer|bool Code if available, false if an error occurred
23
+ */
24
+ protected $code = 0;
25
+
26
+ /**
27
+ * Reason phrase
28
+ *
29
+ * @var string
30
+ */
31
+ protected $reason = 'Unknown';
32
+
33
+ /**
34
+ * Create a new exception
35
+ *
36
+ * If `$data` is an instance of {@see \WpOrg\Requests\Response}, uses the status
37
+ * code from it. Otherwise, sets as 0
38
+ *
39
+ * @param string|null $reason Reason phrase
40
+ * @param mixed $data Associated data
41
+ */
42
+ public function __construct($reason = null, $data = null) {
43
+ if ($data instanceof Response) {
44
+ $this->code = (int) $data->status_code;
45
+ }
46
+
47
+ parent::__construct($reason, $data);
48
+ }
49
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/InvalidArgument.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WpOrg\Requests\Exception;
4
+
5
+ use InvalidArgumentException;
6
+
7
+ /**
8
+ * Exception for an invalid argument passed.
9
+ *
10
+ * @package Requests\Exceptions
11
+ * @since 2.0.0
12
+ */
13
+ final class InvalidArgument extends InvalidArgumentException {
14
+
15
+ /**
16
+ * Create a new invalid argument exception with a standardized text.
17
+ *
18
+ * @param int $position The argument position in the function signature. 1-based.
19
+ * @param string $name The argument name in the function signature.
20
+ * @param string $expected The argument type expected as a string.
21
+ * @param string $received The actual argument type received.
22
+ *
23
+ * @return \WpOrg\Requests\Exception\InvalidArgument
24
+ */
25
+ public static function create($position, $name, $expected, $received) {
26
+ // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
27
+ $stack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
28
+
29
+ return new self(
30
+ sprintf(
31
+ '%s::%s(): Argument #%d (%s) must be of type %s, %s given',
32
+ $stack[1]['class'],
33
+ $stack[1]['function'],
34
+ $position,
35
+ $name,
36
+ $expected,
37
+ $received
38
+ )
39
+ );
40
+ }
41
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Transport.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Transport Exception
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception;
9
+
10
+ use WpOrg\Requests\Exception;
11
+
12
+ /**
13
+ * Transport Exception
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ class Transport extends Exception {}
razorpay-sdk/libs/Requests-2.0.0/src/Exception/Transport/Curl.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * CURL Transport Exception.
4
+ *
5
+ * @package Requests\Exceptions
6
+ */
7
+
8
+ namespace WpOrg\Requests\Exception\Transport;
9
+
10
+ use WpOrg\Requests\Exception\Transport;
11
+
12
+ /**
13
+ * CURL Transport Exception.
14
+ *
15
+ * @package Requests\Exceptions
16
+ */
17
+ final class Curl extends Transport {
18
+
19
+ const EASY = 'cURLEasy';
20
+ const MULTI = 'cURLMulti';
21
+ const SHARE = 'cURLShare';
22
+
23
+ /**
24
+ * cURL error code
25
+ *
26
+ * @var integer
27
+ */
28
+ protected $code = -1;
29
+
30
+ /**
31
+ * Which type of cURL error
32
+ *
33
+ * EASY|MULTI|SHARE
34
+ *
35
+ * @var string
36
+ */
37
+ protected $type = 'Unknown';
38
+
39
+ /**
40
+ * Clear text error message
41
+ *
42
+ * @var string
43
+ */
44
+ protected $reason = 'Unknown';
45
+
46
+ /**
47
+ * Create a new exception.
48
+ *
49
+ * @param string $message Exception message.
50
+ * @param string $type Exception type.
51
+ * @param mixed $data Associated data, if applicable.
52
+ * @param int $code Exception numerical code, if applicable.
53
+ */
54
+ public function __construct($message, $type, $data = null, $code = 0) {
55
+ if ($type !== null) {
56
+ $this->type = $type;
57
+ }
58
+
59
+ if ($code !== null) {
60
+ $this->code = (int) $code;
61
+ }
62
+
63
+ if ($message !== null) {
64
+ $this->reason = $message;
65
+ }
66
+
67
+ $message = sprintf('%d %s', $this->code, $this->reason);
68
+ parent::__construct($message, $this->type, $data, $this->code);
69
+ }
70
+
71
+ /**
72
+ * Get the error message.
73
+ *
74
+ * @return string
75
+ */
76
+ public function getReason() {
77
+ return $this->reason;
78
+ }
79
+
80
+ }
razorpay-sdk/libs/Requests-2.0.0/src/HookManager.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Event dispatcher
4
+ *
5
+ * @package Requests\EventDispatcher
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ /**
11
+ * Event dispatcher
12
+ *
13
+ * @package Requests\EventDispatcher
14
+ */
15
+ interface HookManager {
16
+ /**
17
+ * Register a callback for a hook
18
+ *
19
+ * @param string $hook Hook name
20
+ * @param callable $callback Function/method to call on event
21
+ * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
22
+ */
23
+ public function register($hook, $callback, $priority = 0);
24
+
25
+ /**
26
+ * Dispatch a message
27
+ *
28
+ * @param string $hook Hook name
29
+ * @param array $parameters Parameters to pass to callbacks
30
+ * @return boolean Successfulness
31
+ */
32
+ public function dispatch($hook, $parameters = []);
33
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Hooks.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles adding and dispatching events
4
+ *
5
+ * @package Requests\EventDispatcher
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use WpOrg\Requests\Exception\InvalidArgument;
11
+ use WpOrg\Requests\HookManager;
12
+ use WpOrg\Requests\Utility\InputValidator;
13
+
14
+ /**
15
+ * Handles adding and dispatching events
16
+ *
17
+ * @package Requests\EventDispatcher
18
+ */
19
+ class Hooks implements HookManager {
20
+ /**
21
+ * Registered callbacks for each hook
22
+ *
23
+ * @var array
24
+ */
25
+ protected $hooks = [];
26
+
27
+ /**
28
+ * Register a callback for a hook
29
+ *
30
+ * @param string $hook Hook name
31
+ * @param callable $callback Function/method to call on event
32
+ * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
33
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $hook argument is not a string.
34
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $callback argument is not callable.
35
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $priority argument is not an integer.
36
+ */
37
+ public function register($hook, $callback, $priority = 0) {
38
+ if (is_string($hook) === false) {
39
+ throw InvalidArgument::create(1, '$hook', 'string', gettype($hook));
40
+ }
41
+
42
+ if (is_callable($callback) === false) {
43
+ throw InvalidArgument::create(2, '$callback', 'callable', gettype($callback));
44
+ }
45
+
46
+ if (InputValidator::is_numeric_array_key($priority) === false) {
47
+ throw InvalidArgument::create(3, '$priority', 'integer', gettype($priority));
48
+ }
49
+
50
+ if (!isset($this->hooks[$hook])) {
51
+ $this->hooks[$hook] = [
52
+ $priority => [],
53
+ ];
54
+ } elseif (!isset($this->hooks[$hook][$priority])) {
55
+ $this->hooks[$hook][$priority] = [];
56
+ }
57
+
58
+ $this->hooks[$hook][$priority][] = $callback;
59
+ }
60
+
61
+ /**
62
+ * Dispatch a message
63
+ *
64
+ * @param string $hook Hook name
65
+ * @param array $parameters Parameters to pass to callbacks
66
+ * @return boolean Successfulness
67
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $hook argument is not a string.
68
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $parameters argument is not an array.
69
+ */
70
+ public function dispatch($hook, $parameters = []) {
71
+ if (is_string($hook) === false) {
72
+ throw InvalidArgument::create(1, '$hook', 'string', gettype($hook));
73
+ }
74
+
75
+ // Check strictly against array, as Array* objects don't work in combination with `call_user_func_array()`.
76
+ if (is_array($parameters) === false) {
77
+ throw InvalidArgument::create(2, '$parameters', 'array', gettype($parameters));
78
+ }
79
+
80
+ if (empty($this->hooks[$hook])) {
81
+ return false;
82
+ }
83
+
84
+ if (!empty($parameters)) {
85
+ // Strip potential keys from the array to prevent them being interpreted as parameter names in PHP 8.0.
86
+ $parameters = array_values($parameters);
87
+ }
88
+
89
+ foreach ($this->hooks[$hook] as $priority => $hooked) {
90
+ foreach ($hooked as $callback) {
91
+ $callback(...$parameters);
92
+ }
93
+ }
94
+
95
+ return true;
96
+ }
97
+ }
razorpay-sdk/libs/Requests-2.0.0/src/IdnaEncoder.php ADDED
@@ -0,0 +1,418 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WpOrg\Requests;
4
+
5
+ use WpOrg\Requests\Exception;
6
+ use WpOrg\Requests\Exception\InvalidArgument;
7
+ use WpOrg\Requests\Utility\InputValidator;
8
+
9
+ /**
10
+ * IDNA URL encoder
11
+ *
12
+ * Note: Not fully compliant, as nameprep does nothing yet.
13
+ *
14
+ * @package Requests\Utilities
15
+ *
16
+ * @link https://tools.ietf.org/html/rfc3490 IDNA specification
17
+ * @link https://tools.ietf.org/html/rfc3492 Punycode/Bootstrap specification
18
+ */
19
+ class IdnaEncoder {
20
+ /**
21
+ * ACE prefix used for IDNA
22
+ *
23
+ * @link https://tools.ietf.org/html/rfc3490#section-5
24
+ * @var string
25
+ */
26
+ const ACE_PREFIX = 'xn--';
27
+
28
+ /**
29
+ * Maximum length of a IDNA URL in ASCII.
30
+ *
31
+ * @see \WpOrg\Requests\IdnaEncoder::to_ascii()
32
+ *
33
+ * @since 2.0.0
34
+ *
35
+ * @var int
36
+ */
37
+ const MAX_LENGTH = 64;
38
+
39
+ /**#@+
40
+ * Bootstrap constant for Punycode
41
+ *
42
+ * @link https://tools.ietf.org/html/rfc3492#section-5
43
+ * @var int
44
+ */
45
+ const BOOTSTRAP_BASE = 36;
46
+ const BOOTSTRAP_TMIN = 1;
47
+ const BOOTSTRAP_TMAX = 26;
48
+ const BOOTSTRAP_SKEW = 38;
49
+ const BOOTSTRAP_DAMP = 700;
50
+ const BOOTSTRAP_INITIAL_BIAS = 72;
51
+ const BOOTSTRAP_INITIAL_N = 128;
52
+ /**#@-*/
53
+
54
+ /**
55
+ * Encode a hostname using Punycode
56
+ *
57
+ * @param string|Stringable $hostname Hostname
58
+ * @return string Punycode-encoded hostname
59
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or a stringable object.
60
+ */
61
+ public static function encode($hostname) {
62
+ if (InputValidator::is_string_or_stringable($hostname) === false) {
63
+ throw InvalidArgument::create(1, '$hostname', 'string|Stringable', gettype($hostname));
64
+ }
65
+
66
+ $parts = explode('.', $hostname);
67
+ foreach ($parts as &$part) {
68
+ $part = self::to_ascii($part);
69
+ }
70
+ return implode('.', $parts);
71
+ }
72
+
73
+ /**
74
+ * Convert a UTF-8 text string to an ASCII string using Punycode
75
+ *
76
+ * @param string $text ASCII or UTF-8 string (max length 64 characters)
77
+ * @return string ASCII string
78
+ *
79
+ * @throws \WpOrg\Requests\Exception Provided string longer than 64 ASCII characters (`idna.provided_too_long`)
80
+ * @throws \WpOrg\Requests\Exception Prepared string longer than 64 ASCII characters (`idna.prepared_too_long`)
81
+ * @throws \WpOrg\Requests\Exception Provided string already begins with xn-- (`idna.provided_is_prefixed`)
82
+ * @throws \WpOrg\Requests\Exception Encoded string longer than 64 ASCII characters (`idna.encoded_too_long`)
83
+ */
84
+ public static function to_ascii($text) {
85
+ // Step 1: Check if the text is already ASCII
86
+ if (self::is_ascii($text)) {
87
+ // Skip to step 7
88
+ if (strlen($text) < self::MAX_LENGTH) {
89
+ return $text;
90
+ }
91
+
92
+ throw new Exception('Provided string is too long', 'idna.provided_too_long', $text);
93
+ }
94
+
95
+ // Step 2: nameprep
96
+ $text = self::nameprep($text);
97
+
98
+ // Step 3: UseSTD3ASCIIRules is false, continue
99
+ // Step 4: Check if it's ASCII now
100
+ if (self::is_ascii($text)) {
101
+ // Skip to step 7
102
+ /*
103
+ * As the `nameprep()` method returns the original string, this code will never be reached until
104
+ * that method is properly implemented.
105
+ */
106
+ // @codeCoverageIgnoreStart
107
+ if (strlen($text) < self::MAX_LENGTH) {
108
+ return $text;
109
+ }
110
+
111
+ throw new Exception('Prepared string is too long', 'idna.prepared_too_long', $text);
112
+ // @codeCoverageIgnoreEnd
113
+ }
114
+
115
+ // Step 5: Check ACE prefix
116
+ if (strpos($text, self::ACE_PREFIX) === 0) {
117
+ throw new Exception('Provided string begins with ACE prefix', 'idna.provided_is_prefixed', $text);
118
+ }
119
+
120
+ // Step 6: Encode with Punycode
121
+ $text = self::punycode_encode($text);
122
+
123
+ // Step 7: Prepend ACE prefix
124
+ $text = self::ACE_PREFIX . $text;
125
+
126
+ // Step 8: Check size
127
+ if (strlen($text) < self::MAX_LENGTH) {
128
+ return $text;
129
+ }
130
+
131
+ throw new Exception('Encoded string is too long', 'idna.encoded_too_long', $text);
132
+ }
133
+
134
+ /**
135
+ * Check whether a given text string contains only ASCII characters
136
+ *
137
+ * @internal (Testing found regex was the fastest implementation)
138
+ *
139
+ * @param string $text
140
+ * @return bool Is the text string ASCII-only?
141
+ */
142
+ protected static function is_ascii($text) {
143
+ return (preg_match('/(?:[^\x00-\x7F])/', $text) !== 1);
144
+ }
145
+
146
+ /**
147
+ * Prepare a text string for use as an IDNA name
148
+ *
149
+ * @todo Implement this based on RFC 3491 and the newer 5891
150
+ * @param string $text
151
+ * @return string Prepared string
152
+ */
153
+ protected static function nameprep($text) {
154
+ return $text;
155
+ }
156
+
157
+ /**
158
+ * Convert a UTF-8 string to a UCS-4 codepoint array
159
+ *
160
+ * Based on \WpOrg\Requests\Iri::replace_invalid_with_pct_encoding()
161
+ *
162
+ * @param string $input
163
+ * @return array Unicode code points
164
+ *
165
+ * @throws \WpOrg\Requests\Exception Invalid UTF-8 codepoint (`idna.invalidcodepoint`)
166
+ */
167
+ protected static function utf8_to_codepoints($input) {
168
+ $codepoints = [];
169
+
170
+ // Get number of bytes
171
+ $strlen = strlen($input);
172
+
173
+ // phpcs:ignore Generic.CodeAnalysis.JumbledIncrementer -- This is a deliberate choice.
174
+ for ($position = 0; $position < $strlen; $position++) {
175
+ $value = ord($input[$position]);
176
+
177
+ // One byte sequence:
178
+ if ((~$value & 0x80) === 0x80) {
179
+ $character = $value;
180
+ $length = 1;
181
+ $remaining = 0;
182
+ }
183
+ // Two byte sequence:
184
+ elseif (($value & 0xE0) === 0xC0) {
185
+ $character = ($value & 0x1F) << 6;
186
+ $length = 2;
187
+ $remaining = 1;
188
+ }
189
+ // Three byte sequence:
190
+ elseif (($value & 0xF0) === 0xE0) {
191
+ $character = ($value & 0x0F) << 12;
192
+ $length = 3;
193
+ $remaining = 2;
194
+ }
195
+ // Four byte sequence:
196
+ elseif (($value & 0xF8) === 0xF0) {
197
+ $character = ($value & 0x07) << 18;
198
+ $length = 4;
199
+ $remaining = 3;
200
+ }
201
+ // Invalid byte:
202
+ else {
203
+ throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $value);
204
+ }
205
+
206
+ if ($remaining > 0) {
207
+ if ($position + $length > $strlen) {
208
+ throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
209
+ }
210
+ for ($position++; $remaining > 0; $position++) {
211
+ $value = ord($input[$position]);
212
+
213
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
214
+ if (($value & 0xC0) !== 0x80) {
215
+ throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
216
+ }
217
+
218
+ --$remaining;
219
+ $character |= ($value & 0x3F) << ($remaining * 6);
220
+ }
221
+ $position--;
222
+ }
223
+
224
+ if (// Non-shortest form sequences are invalid
225
+ $length > 1 && $character <= 0x7F
226
+ || $length > 2 && $character <= 0x7FF
227
+ || $length > 3 && $character <= 0xFFFF
228
+ // Outside of range of ucschar codepoints
229
+ // Noncharacters
230
+ || ($character & 0xFFFE) === 0xFFFE
231
+ || $character >= 0xFDD0 && $character <= 0xFDEF
232
+ || (
233
+ // Everything else not in ucschar
234
+ $character > 0xD7FF && $character < 0xF900
235
+ || $character < 0x20
236
+ || $character > 0x7E && $character < 0xA0
237
+ || $character > 0xEFFFD
238
+ )
239
+ ) {
240
+ throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
241
+ }
242
+
243
+ $codepoints[] = $character;
244
+ }
245
+
246
+ return $codepoints;
247
+ }
248
+
249
+ /**
250
+ * RFC3492-compliant encoder
251
+ *
252
+ * @internal Pseudo-code from Section 6.3 is commented with "#" next to relevant code
253
+ *
254
+ * @param string $input UTF-8 encoded string to encode
255
+ * @return string Punycode-encoded string
256
+ *
257
+ * @throws \WpOrg\Requests\Exception On character outside of the domain (never happens with Punycode) (`idna.character_outside_domain`)
258
+ */
259
+ public static function punycode_encode($input) {
260
+ $output = '';
261
+ // let n = initial_n
262
+ $n = self::BOOTSTRAP_INITIAL_N;
263
+ // let delta = 0
264
+ $delta = 0;
265
+ // let bias = initial_bias
266
+ $bias = self::BOOTSTRAP_INITIAL_BIAS;
267
+ // let h = b = the number of basic code points in the input
268
+ $h = 0;
269
+ $b = 0; // see loop
270
+ // copy them to the output in order
271
+ $codepoints = self::utf8_to_codepoints($input);
272
+ $extended = [];
273
+
274
+ foreach ($codepoints as $char) {
275
+ if ($char < 128) {
276
+ // Character is valid ASCII
277
+ // TODO: this should also check if it's valid for a URL
278
+ $output .= chr($char);
279
+ $h++;
280
+ }
281
+ // Check if the character is non-ASCII, but below initial n
282
+ // This never occurs for Punycode, so ignore in coverage
283
+ // @codeCoverageIgnoreStart
284
+ elseif ($char < $n) {
285
+ throw new Exception('Invalid character', 'idna.character_outside_domain', $char);
286
+ }
287
+ // @codeCoverageIgnoreEnd
288
+ else {
289
+ $extended[$char] = true;
290
+ }
291
+ }
292
+ $extended = array_keys($extended);
293
+ sort($extended);
294
+ $b = $h;
295
+ // [copy them] followed by a delimiter if b > 0
296
+ if (strlen($output) > 0) {
297
+ $output .= '-';
298
+ }
299
+ // {if the input contains a non-basic code point < n then fail}
300
+ // while h < length(input) do begin
301
+ $codepointcount = count($codepoints);
302
+ while ($h < $codepointcount) {
303
+ // let m = the minimum code point >= n in the input
304
+ $m = array_shift($extended);
305
+ //printf('next code point to insert is %s' . PHP_EOL, dechex($m));
306
+ // let delta = delta + (m - n) * (h + 1), fail on overflow
307
+ $delta += ($m - $n) * ($h + 1);
308
+ // let n = m
309
+ $n = $m;
310
+ // for each code point c in the input (in order) do begin
311
+ for ($num = 0; $num < $codepointcount; $num++) {
312
+ $c = $codepoints[$num];
313
+ // if c < n then increment delta, fail on overflow
314
+ if ($c < $n) {
315
+ $delta++;
316
+ }
317
+ // if c == n then begin
318
+ elseif ($c === $n) {
319
+ // let q = delta
320
+ $q = $delta;
321
+ // for k = base to infinity in steps of base do begin
322
+ for ($k = self::BOOTSTRAP_BASE; ; $k += self::BOOTSTRAP_BASE) {
323
+ // let t = tmin if k <= bias {+ tmin}, or
324
+ // tmax if k >= bias + tmax, or k - bias otherwise
325
+ if ($k <= ($bias + self::BOOTSTRAP_TMIN)) {
326
+ $t = self::BOOTSTRAP_TMIN;
327
+ }
328
+ elseif ($k >= ($bias + self::BOOTSTRAP_TMAX)) {
329
+ $t = self::BOOTSTRAP_TMAX;
330
+ }
331
+ else {
332
+ $t = $k - $bias;
333
+ }
334
+ // if q < t then break
335
+ if ($q < $t) {
336
+ break;
337
+ }
338
+ // output the code point for digit t + ((q - t) mod (base - t))
339
+ $digit = $t + (($q - $t) % (self::BOOTSTRAP_BASE - $t));
340
+ $output .= self::digit_to_char($digit);
341
+ // let q = (q - t) div (base - t)
342
+ $q = floor(($q - $t) / (self::BOOTSTRAP_BASE - $t));
343
+ } // end
344
+ // output the code point for digit q
345
+ $output .= self::digit_to_char($q);
346
+ // let bias = adapt(delta, h + 1, test h equals b?)
347
+ $bias = self::adapt($delta, $h + 1, $h === $b);
348
+ // let delta = 0
349
+ $delta = 0;
350
+ // increment h
351
+ $h++;
352
+ } // end
353
+ } // end
354
+ // increment delta and n
355
+ $delta++;
356
+ $n++;
357
+ } // end
358
+
359
+ return $output;
360
+ }
361
+
362
+ /**
363
+ * Convert a digit to its respective character
364
+ *
365
+ * @link https://tools.ietf.org/html/rfc3492#section-5
366
+ *
367
+ * @param int $digit Digit in the range 0-35
368
+ * @return string Single character corresponding to digit
369
+ *
370
+ * @throws \WpOrg\Requests\Exception On invalid digit (`idna.invalid_digit`)
371
+ */
372
+ protected static function digit_to_char($digit) {
373
+ // @codeCoverageIgnoreStart
374
+ // As far as I know, this never happens, but still good to be sure.
375
+ if ($digit < 0 || $digit > 35) {
376
+ throw new Exception(sprintf('Invalid digit %d', $digit), 'idna.invalid_digit', $digit);
377
+ }
378
+ // @codeCoverageIgnoreEnd
379
+ $digits = 'abcdefghijklmnopqrstuvwxyz0123456789';
380
+ return substr($digits, $digit, 1);
381
+ }
382
+
383
+ /**
384
+ * Adapt the bias
385
+ *
386
+ * @link https://tools.ietf.org/html/rfc3492#section-6.1
387
+ * @param int $delta
388
+ * @param int $numpoints
389
+ * @param bool $firsttime
390
+ * @return int New bias
391
+ *
392
+ * function adapt(delta,numpoints,firsttime):
393
+ */
394
+ protected static function adapt($delta, $numpoints, $firsttime) {
395
+ // if firsttime then let delta = delta div damp
396
+ if ($firsttime) {
397
+ $delta = floor($delta / self::BOOTSTRAP_DAMP);
398
+ }
399
+ // else let delta = delta div 2
400
+ else {
401
+ $delta = floor($delta / 2);
402
+ }
403
+ // let delta = delta + (delta div numpoints)
404
+ $delta += floor($delta / $numpoints);
405
+ // let k = 0
406
+ $k = 0;
407
+ // while delta > ((base - tmin) * tmax) div 2 do begin
408
+ $max = floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN) * self::BOOTSTRAP_TMAX) / 2);
409
+ while ($delta > $max) {
410
+ // let delta = delta div (base - tmin)
411
+ $delta = floor($delta / (self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN));
412
+ // let k = k + base
413
+ $k += self::BOOTSTRAP_BASE;
414
+ } // end
415
+ // return k + (((base - tmin + 1) * delta) div (delta + skew))
416
+ return $k + floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN + 1) * $delta) / ($delta + self::BOOTSTRAP_SKEW));
417
+ }
418
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Ipv6.php ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class to validate and to work with IPv6 addresses
4
+ *
5
+ * @package Requests\Utilities
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use WpOrg\Requests\Exception\InvalidArgument;
11
+ use WpOrg\Requests\Utility\InputValidator;
12
+
13
+ /**
14
+ * Class to validate and to work with IPv6 addresses
15
+ *
16
+ * This was originally based on the PEAR class of the same name, but has been
17
+ * entirely rewritten.
18
+ *
19
+ * @package Requests\Utilities
20
+ */
21
+ final class Ipv6 {
22
+ /**
23
+ * Uncompresses an IPv6 address
24
+ *
25
+ * RFC 4291 allows you to compress consecutive zero pieces in an address to
26
+ * '::'. This method expects a valid IPv6 address and expands the '::' to
27
+ * the required number of zero pieces.
28
+ *
29
+ * Example: FF01::101 -> FF01:0:0:0:0:0:0:101
30
+ * ::1 -> 0:0:0:0:0:0:0:1
31
+ *
32
+ * @author Alexander Merz <alexander.merz@web.de>
33
+ * @author elfrink at introweb dot nl
34
+ * @author Josh Peck <jmp at joshpeck dot org>
35
+ * @copyright 2003-2005 The PHP Group
36
+ * @license https://opensource.org/licenses/bsd-license.php
37
+ *
38
+ * @param string|Stringable $ip An IPv6 address
39
+ * @return string The uncompressed IPv6 address
40
+ *
41
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or a stringable object.
42
+ */
43
+ public static function uncompress($ip) {
44
+ if (InputValidator::is_string_or_stringable($ip) === false) {
45
+ throw InvalidArgument::create(1, '$ip', 'string|Stringable', gettype($ip));
46
+ }
47
+
48
+ $ip = (string) $ip;
49
+
50
+ if (substr_count($ip, '::') !== 1) {
51
+ return $ip;
52
+ }
53
+
54
+ list($ip1, $ip2) = explode('::', $ip);
55
+ $c1 = ($ip1 === '') ? -1 : substr_count($ip1, ':');
56
+ $c2 = ($ip2 === '') ? -1 : substr_count($ip2, ':');
57
+
58
+ if (strpos($ip2, '.') !== false) {
59
+ $c2++;
60
+ }
61
+ // ::
62
+ if ($c1 === -1 && $c2 === -1) {
63
+ $ip = '0:0:0:0:0:0:0:0';
64
+ }
65
+ // ::xxx
66
+ elseif ($c1 === -1) {
67
+ $fill = str_repeat('0:', 7 - $c2);
68
+ $ip = str_replace('::', $fill, $ip);
69
+ }
70
+ // xxx::
71
+ elseif ($c2 === -1) {
72
+ $fill = str_repeat(':0', 7 - $c1);
73
+ $ip = str_replace('::', $fill, $ip);
74
+ }
75
+ // xxx::xxx
76
+ else {
77
+ $fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
78
+ $ip = str_replace('::', $fill, $ip);
79
+ }
80
+ return $ip;
81
+ }
82
+
83
+ /**
84
+ * Compresses an IPv6 address
85
+ *
86
+ * RFC 4291 allows you to compress consecutive zero pieces in an address to
87
+ * '::'. This method expects a valid IPv6 address and compresses consecutive
88
+ * zero pieces to '::'.
89
+ *
90
+ * Example: FF01:0:0:0:0:0:0:101 -> FF01::101
91
+ * 0:0:0:0:0:0:0:1 -> ::1
92
+ *
93
+ * @see \WpOrg\Requests\IPv6::uncompress()
94
+ *
95
+ * @param string $ip An IPv6 address
96
+ * @return string The compressed IPv6 address
97
+ */
98
+ public static function compress($ip) {
99
+ // Prepare the IP to be compressed.
100
+ // Note: Input validation is handled in the `uncompress()` method, which is the first call made in this method.
101
+ $ip = self::uncompress($ip);
102
+ $ip_parts = self::split_v6_v4($ip);
103
+
104
+ // Replace all leading zeros
105
+ $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);
106
+
107
+ // Find bunches of zeros
108
+ if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) {
109
+ $max = 0;
110
+ $pos = null;
111
+ foreach ($matches[0] as $match) {
112
+ if (strlen($match[0]) > $max) {
113
+ $max = strlen($match[0]);
114
+ $pos = $match[1];
115
+ }
116
+ }
117
+
118
+ $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
119
+ }
120
+
121
+ if ($ip_parts[1] !== '') {
122
+ return implode(':', $ip_parts);
123
+ }
124
+ else {
125
+ return $ip_parts[0];
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Splits an IPv6 address into the IPv6 and IPv4 representation parts
131
+ *
132
+ * RFC 4291 allows you to represent the last two parts of an IPv6 address
133
+ * using the standard IPv4 representation
134
+ *
135
+ * Example: 0:0:0:0:0:0:13.1.68.3
136
+ * 0:0:0:0:0:FFFF:129.144.52.38
137
+ *
138
+ * @param string $ip An IPv6 address
139
+ * @return string[] [0] contains the IPv6 represented part, and [1] the IPv4 represented part
140
+ */
141
+ private static function split_v6_v4($ip) {
142
+ if (strpos($ip, '.') !== false) {
143
+ $pos = strrpos($ip, ':');
144
+ $ipv6_part = substr($ip, 0, $pos);
145
+ $ipv4_part = substr($ip, $pos + 1);
146
+ return [$ipv6_part, $ipv4_part];
147
+ }
148
+ else {
149
+ return [$ip, ''];
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Checks an IPv6 address
155
+ *
156
+ * Checks if the given IP is a valid IPv6 address
157
+ *
158
+ * @param string $ip An IPv6 address
159
+ * @return bool true if $ip is a valid IPv6 address
160
+ */
161
+ public static function check_ipv6($ip) {
162
+ // Note: Input validation is handled in the `uncompress()` method, which is the first call made in this method.
163
+ $ip = self::uncompress($ip);
164
+ list($ipv6, $ipv4) = self::split_v6_v4($ip);
165
+ $ipv6 = explode(':', $ipv6);
166
+ $ipv4 = explode('.', $ipv4);
167
+ if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
168
+ foreach ($ipv6 as $ipv6_part) {
169
+ // The section can't be empty
170
+ if ($ipv6_part === '') {
171
+ return false;
172
+ }
173
+
174
+ // Nor can it be over four characters
175
+ if (strlen($ipv6_part) > 4) {
176
+ return false;
177
+ }
178
+
179
+ // Remove leading zeros (this is safe because of the above)
180
+ $ipv6_part = ltrim($ipv6_part, '0');
181
+ if ($ipv6_part === '') {
182
+ $ipv6_part = '0';
183
+ }
184
+
185
+ // Check the value is valid
186
+ $value = hexdec($ipv6_part);
187
+ if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) {
188
+ return false;
189
+ }
190
+ }
191
+ if (count($ipv4) === 4) {
192
+ foreach ($ipv4 as $ipv4_part) {
193
+ $value = (int) $ipv4_part;
194
+ if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) {
195
+ return false;
196
+ }
197
+ }
198
+ }
199
+ return true;
200
+ }
201
+ else {
202
+ return false;
203
+ }
204
+ }
205
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Iri.php ADDED
@@ -0,0 +1,1101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * IRI parser/serialiser/normaliser
4
+ *
5
+ * @package Requests\Utilities
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use WpOrg\Requests\Exception;
11
+ use WpOrg\Requests\Exception\InvalidArgument;
12
+ use WpOrg\Requests\Ipv6;
13
+ use WpOrg\Requests\Port;
14
+ use WpOrg\Requests\Utility\InputValidator;
15
+
16
+ /**
17
+ * IRI parser/serialiser/normaliser
18
+ *
19
+ * Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
20
+ * All rights reserved.
21
+ *
22
+ * Redistribution and use in source and binary forms, with or without
23
+ * modification, are permitted provided that the following conditions are met:
24
+ *
25
+ * * Redistributions of source code must retain the above copyright notice,
26
+ * this list of conditions and the following disclaimer.
27
+ *
28
+ * * Redistributions in binary form must reproduce the above copyright notice,
29
+ * this list of conditions and the following disclaimer in the documentation
30
+ * and/or other materials provided with the distribution.
31
+ *
32
+ * * Neither the name of the SimplePie Team nor the names of its contributors
33
+ * may be used to endorse or promote products derived from this software
34
+ * without specific prior written permission.
35
+ *
36
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
37
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
39
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
40
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
41
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
42
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
43
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
44
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
46
+ * POSSIBILITY OF SUCH DAMAGE.
47
+ *
48
+ * @package Requests\Utilities
49
+ * @author Geoffrey Sneddon
50
+ * @author Steve Minutillo
51
+ * @copyright 2007-2009 Geoffrey Sneddon and Steve Minutillo
52
+ * @license https://opensource.org/licenses/bsd-license.php
53
+ * @link http://hg.gsnedders.com/iri/
54
+ *
55
+ * @property string $iri IRI we're working with
56
+ * @property-read string $uri IRI in URI form, {@see \WpOrg\Requests\IRI::to_uri()}
57
+ * @property string $scheme Scheme part of the IRI
58
+ * @property string $authority Authority part, formatted for a URI (userinfo + host + port)
59
+ * @property string $iauthority Authority part of the IRI (userinfo + host + port)
60
+ * @property string $userinfo Userinfo part, formatted for a URI (after '://' and before '@')
61
+ * @property string $iuserinfo Userinfo part of the IRI (after '://' and before '@')
62
+ * @property string $host Host part, formatted for a URI
63
+ * @property string $ihost Host part of the IRI
64
+ * @property string $port Port part of the IRI (after ':')
65
+ * @property string $path Path part, formatted for a URI (after first '/')
66
+ * @property string $ipath Path part of the IRI (after first '/')
67
+ * @property string $query Query part, formatted for a URI (after '?')
68
+ * @property string $iquery Query part of the IRI (after '?')
69
+ * @property string $fragment Fragment, formatted for a URI (after '#')
70
+ * @property string $ifragment Fragment part of the IRI (after '#')
71
+ */
72
+ class Iri {
73
+ /**
74
+ * Scheme
75
+ *
76
+ * @var string|null
77
+ */
78
+ protected $scheme = null;
79
+
80
+ /**
81
+ * User Information
82
+ *
83
+ * @var string|null
84
+ */
85
+ protected $iuserinfo = null;
86
+
87
+ /**
88
+ * ihost
89
+ *
90
+ * @var string|null
91
+ */
92
+ protected $ihost = null;
93
+
94
+ /**
95
+ * Port
96
+ *
97
+ * @var string|null
98
+ */
99
+ protected $port = null;
100
+
101
+ /**
102
+ * ipath
103
+ *
104
+ * @var string
105
+ */
106
+ protected $ipath = '';
107
+
108
+ /**
109
+ * iquery
110
+ *
111
+ * @var string|null
112
+ */
113
+ protected $iquery = null;
114
+
115
+ /**
116
+ * ifragment|null
117
+ *
118
+ * @var string
119
+ */
120
+ protected $ifragment = null;
121
+
122
+ /**
123
+ * Normalization database
124
+ *
125
+ * Each key is the scheme, each value is an array with each key as the IRI
126
+ * part and value as the default value for that part.
127
+ *
128
+ * @var array
129
+ */
130
+ protected $normalization = array(
131
+ 'acap' => array(
132
+ 'port' => Port::ACAP,
133
+ ),
134
+ 'dict' => array(
135
+ 'port' => Port::DICT,
136
+ ),
137
+ 'file' => array(
138
+ 'ihost' => 'localhost',
139
+ ),
140
+ 'http' => array(
141
+ 'port' => Port::HTTP,
142
+ ),
143
+ 'https' => array(
144
+ 'port' => Port::HTTPS,
145
+ ),
146
+ );
147
+
148
+ /**
149
+ * Return the entire IRI when you try and read the object as a string
150
+ *
151
+ * @return string
152
+ */
153
+ public function __toString() {
154
+ return $this->get_iri();
155
+ }
156
+
157
+ /**
158
+ * Overload __set() to provide access via properties
159
+ *
160
+ * @param string $name Property name
161
+ * @param mixed $value Property value
162
+ */
163
+ public function __set($name, $value) {
164
+ if (method_exists($this, 'set_' . $name)) {
165
+ call_user_func(array($this, 'set_' . $name), $value);
166
+ }
167
+ elseif (
168
+ $name === 'iauthority'
169
+ || $name === 'iuserinfo'
170
+ || $name === 'ihost'
171
+ || $name === 'ipath'
172
+ || $name === 'iquery'
173
+ || $name === 'ifragment'
174
+ ) {
175
+ call_user_func(array($this, 'set_' . substr($name, 1)), $value);
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Overload __get() to provide access via properties
181
+ *
182
+ * @param string $name Property name
183
+ * @return mixed
184
+ */
185
+ public function __get($name) {
186
+ // isset() returns false for null, we don't want to do that
187
+ // Also why we use array_key_exists below instead of isset()
188
+ $props = get_object_vars($this);
189
+
190
+ if (
191
+ $name === 'iri' ||
192
+ $name === 'uri' ||
193
+ $name === 'iauthority' ||
194
+ $name === 'authority'
195
+ ) {
196
+ $method = 'get_' . $name;
197
+ $return = $this->$method();
198
+ }
199
+ elseif (array_key_exists($name, $props)) {
200
+ $return = $this->$name;
201
+ }
202
+ // host -> ihost
203
+ elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) {
204
+ $name = $prop;
205
+ $return = $this->$prop;
206
+ }
207
+ // ischeme -> scheme
208
+ elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) {
209
+ $name = $prop;
210
+ $return = $this->$prop;
211
+ }
212
+ else {
213
+ trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
214
+ $return = null;
215
+ }
216
+
217
+ if ($return === null && isset($this->normalization[$this->scheme][$name])) {
218
+ return $this->normalization[$this->scheme][$name];
219
+ }
220
+ else {
221
+ return $return;
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Overload __isset() to provide access via properties
227
+ *
228
+ * @param string $name Property name
229
+ * @return bool
230
+ */
231
+ public function __isset($name) {
232
+ return (method_exists($this, 'get_' . $name) || isset($this->$name));
233
+ }
234
+
235
+ /**
236
+ * Overload __unset() to provide access via properties
237
+ *
238
+ * @param string $name Property name
239
+ */
240
+ public function __unset($name) {
241
+ if (method_exists($this, 'set_' . $name)) {
242
+ call_user_func(array($this, 'set_' . $name), '');
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Create a new IRI object, from a specified string
248
+ *
249
+ * @param string|Stringable|null $iri
250
+ *
251
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $iri argument is not a string, Stringable or null.
252
+ */
253
+ public function __construct($iri = null) {
254
+ if ($iri !== null && InputValidator::is_string_or_stringable($iri) === false) {
255
+ throw InvalidArgument::create(1, '$iri', 'string|Stringable|null', gettype($iri));
256
+ }
257
+
258
+ $this->set_iri($iri);
259
+ }
260
+
261
+ /**
262
+ * Create a new IRI object by resolving a relative IRI
263
+ *
264
+ * Returns false if $base is not absolute, otherwise an IRI.
265
+ *
266
+ * @param \WpOrg\Requests\Iri|string $base (Absolute) Base IRI
267
+ * @param \WpOrg\Requests\Iri|string $relative Relative IRI
268
+ * @return \WpOrg\Requests\Iri|false
269
+ */
270
+ public static function absolutize($base, $relative) {
271
+ if (!($relative instanceof self)) {
272
+ $relative = new self($relative);
273
+ }
274
+ if (!$relative->is_valid()) {
275
+ return false;
276
+ }
277
+ elseif ($relative->scheme !== null) {
278
+ return clone $relative;
279
+ }
280
+
281
+ if (!($base instanceof self)) {
282
+ $base = new self($base);
283
+ }
284
+ if ($base->scheme === null || !$base->is_valid()) {
285
+ return false;
286
+ }
287
+
288
+ if ($relative->get_iri() !== '') {
289
+ if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
290
+ $target = clone $relative;
291
+ $target->scheme = $base->scheme;
292
+ }
293
+ else {
294
+ $target = new self;
295
+ $target->scheme = $base->scheme;
296
+ $target->iuserinfo = $base->iuserinfo;
297
+ $target->ihost = $base->ihost;
298
+ $target->port = $base->port;
299
+ if ($relative->ipath !== '') {
300
+ if ($relative->ipath[0] === '/') {
301
+ $target->ipath = $relative->ipath;
302
+ }
303
+ elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
304
+ $target->ipath = '/' . $relative->ipath;
305
+ }
306
+ elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
307
+ $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
308
+ }
309
+ else {
310
+ $target->ipath = $relative->ipath;
311
+ }
312
+ $target->ipath = $target->remove_dot_segments($target->ipath);
313
+ $target->iquery = $relative->iquery;
314
+ }
315
+ else {
316
+ $target->ipath = $base->ipath;
317
+ if ($relative->iquery !== null) {
318
+ $target->iquery = $relative->iquery;
319
+ }
320
+ elseif ($base->iquery !== null) {
321
+ $target->iquery = $base->iquery;
322
+ }
323
+ }
324
+ $target->ifragment = $relative->ifragment;
325
+ }
326
+ }
327
+ else {
328
+ $target = clone $base;
329
+ $target->ifragment = null;
330
+ }
331
+ $target->scheme_normalization();
332
+ return $target;
333
+ }
334
+
335
+ /**
336
+ * Parse an IRI into scheme/authority/path/query/fragment segments
337
+ *
338
+ * @param string $iri
339
+ * @return array
340
+ */
341
+ protected function parse_iri($iri) {
342
+ $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
343
+ $has_match = preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match);
344
+ if (!$has_match) {
345
+ throw new Exception('Cannot parse supplied IRI', 'iri.cannot_parse', $iri);
346
+ }
347
+
348
+ if ($match[1] === '') {
349
+ $match['scheme'] = null;
350
+ }
351
+ if (!isset($match[3]) || $match[3] === '') {
352
+ $match['authority'] = null;
353
+ }
354
+ if (!isset($match[5])) {
355
+ $match['path'] = '';
356
+ }
357
+ if (!isset($match[6]) || $match[6] === '') {
358
+ $match['query'] = null;
359
+ }
360
+ if (!isset($match[8]) || $match[8] === '') {
361
+ $match['fragment'] = null;
362
+ }
363
+ return $match;
364
+ }
365
+
366
+ /**
367
+ * Remove dot segments from a path
368
+ *
369
+ * @param string $input
370
+ * @return string
371
+ */
372
+ protected function remove_dot_segments($input) {
373
+ $output = '';
374
+ while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') {
375
+ // A: If the input buffer begins with a prefix of "../" or "./",
376
+ // then remove that prefix from the input buffer; otherwise,
377
+ if (strpos($input, '../') === 0) {
378
+ $input = substr($input, 3);
379
+ }
380
+ elseif (strpos($input, './') === 0) {
381
+ $input = substr($input, 2);
382
+ }
383
+ // B: if the input buffer begins with a prefix of "/./" or "/.",
384
+ // where "." is a complete path segment, then replace that prefix
385
+ // with "/" in the input buffer; otherwise,
386
+ elseif (strpos($input, '/./') === 0) {
387
+ $input = substr($input, 2);
388
+ }
389
+ elseif ($input === '/.') {
390
+ $input = '/';
391
+ }
392
+ // C: if the input buffer begins with a prefix of "/../" or "/..",
393
+ // where ".." is a complete path segment, then replace that prefix
394
+ // with "/" in the input buffer and remove the last segment and its
395
+ // preceding "/" (if any) from the output buffer; otherwise,
396
+ elseif (strpos($input, '/../') === 0) {
397
+ $input = substr($input, 3);
398
+ $output = substr_replace($output, '', strrpos($output, '/'));
399
+ }
400
+ elseif ($input === '/..') {
401
+ $input = '/';
402
+ $output = substr_replace($output, '', strrpos($output, '/'));
403
+ }
404
+ // D: if the input buffer consists only of "." or "..", then remove
405
+ // that from the input buffer; otherwise,
406
+ elseif ($input === '.' || $input === '..') {
407
+ $input = '';
408
+ }
409
+ // E: move the first path segment in the input buffer to the end of
410
+ // the output buffer, including the initial "/" character (if any)
411
+ // and any subsequent characters up to, but not including, the next
412
+ // "/" character or the end of the input buffer
413
+ elseif (($pos = strpos($input, '/', 1)) !== false) {
414
+ $output .= substr($input, 0, $pos);
415
+ $input = substr_replace($input, '', 0, $pos);
416
+ }
417
+ else {
418
+ $output .= $input;
419
+ $input = '';
420
+ }
421
+ }
422
+ return $output . $input;
423
+ }
424
+
425
+ /**
426
+ * Replace invalid character with percent encoding
427
+ *
428
+ * @param string $text Input string
429
+ * @param string $extra_chars Valid characters not in iunreserved or
430
+ * iprivate (this is ASCII-only)
431
+ * @param bool $iprivate Allow iprivate
432
+ * @return string
433
+ */
434
+ protected function replace_invalid_with_pct_encoding($text, $extra_chars, $iprivate = false) {
435
+ // Normalize as many pct-encoded sections as possible
436
+ $text = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $text);
437
+
438
+ // Replace invalid percent characters
439
+ $text = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $text);
440
+
441
+ // Add unreserved and % to $extra_chars (the latter is safe because all
442
+ // pct-encoded sections are now valid).
443
+ $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
444
+
445
+ // Now replace any bytes that aren't allowed with their pct-encoded versions
446
+ $position = 0;
447
+ $strlen = strlen($text);
448
+ while (($position += strspn($text, $extra_chars, $position)) < $strlen) {
449
+ $value = ord($text[$position]);
450
+
451
+ // Start position
452
+ $start = $position;
453
+
454
+ // By default we are valid
455
+ $valid = true;
456
+
457
+ // No one byte sequences are valid due to the while.
458
+ // Two byte sequence:
459
+ if (($value & 0xE0) === 0xC0) {
460
+ $character = ($value & 0x1F) << 6;
461
+ $length = 2;
462
+ $remaining = 1;
463
+ }
464
+ // Three byte sequence:
465
+ elseif (($value & 0xF0) === 0xE0) {
466
+ $character = ($value & 0x0F) << 12;
467
+ $length = 3;
468
+ $remaining = 2;
469
+ }
470
+ // Four byte sequence:
471
+ elseif (($value & 0xF8) === 0xF0) {
472
+ $character = ($value & 0x07) << 18;
473
+ $length = 4;
474
+ $remaining = 3;
475
+ }
476
+ // Invalid byte:
477
+ else {
478
+ $valid = false;
479
+ $length = 1;
480
+ $remaining = 0;
481
+ }
482
+
483
+ if ($remaining) {
484
+ if ($position + $length <= $strlen) {
485
+ for ($position++; $remaining; $position++) {
486
+ $value = ord($text[$position]);
487
+
488
+ // Check that the byte is valid, then add it to the character:
489
+ if (($value & 0xC0) === 0x80) {
490
+ $character |= ($value & 0x3F) << (--$remaining * 6);
491
+ }
492
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
493
+ else {
494
+ $valid = false;
495
+ $position--;
496
+ break;
497
+ }
498
+ }
499
+ }
500
+ else {
501
+ $position = $strlen - 1;
502
+ $valid = false;
503
+ }
504
+ }
505
+
506
+ // Percent encode anything invalid or not in ucschar
507
+ if (
508
+ // Invalid sequences
509
+ !$valid
510
+ // Non-shortest form sequences are invalid
511
+ || $length > 1 && $character <= 0x7F
512
+ || $length > 2 && $character <= 0x7FF
513
+ || $length > 3 && $character <= 0xFFFF
514
+ // Outside of range of ucschar codepoints
515
+ // Noncharacters
516
+ || ($character & 0xFFFE) === 0xFFFE
517
+ || $character >= 0xFDD0 && $character <= 0xFDEF
518
+ || (
519
+ // Everything else not in ucschar
520
+ $character > 0xD7FF && $character < 0xF900
521
+ || $character < 0xA0
522
+ || $character > 0xEFFFD
523
+ )
524
+ && (
525
+ // Everything not in iprivate, if it applies
526
+ !$iprivate
527
+ || $character < 0xE000
528
+ || $character > 0x10FFFD
529
+ )
530
+ ) {
531
+ // If we were a character, pretend we weren't, but rather an error.
532
+ if ($valid) {
533
+ $position--;
534
+ }
535
+
536
+ for ($j = $start; $j <= $position; $j++) {
537
+ $text = substr_replace($text, sprintf('%%%02X', ord($text[$j])), $j, 1);
538
+ $j += 2;
539
+ $position += 2;
540
+ $strlen += 2;
541
+ }
542
+ }
543
+ }
544
+
545
+ return $text;
546
+ }
547
+
548
+ /**
549
+ * Callback function for preg_replace_callback.
550
+ *
551
+ * Removes sequences of percent encoded bytes that represent UTF-8
552
+ * encoded characters in iunreserved
553
+ *
554
+ * @param array $regex_match PCRE match
555
+ * @return string Replacement
556
+ */
557
+ protected function remove_iunreserved_percent_encoded($regex_match) {
558
+ // As we just have valid percent encoded sequences we can just explode
559
+ // and ignore the first member of the returned array (an empty string).
560
+ $bytes = explode('%', $regex_match[0]);
561
+
562
+ // Initialize the new string (this is what will be returned) and that
563
+ // there are no bytes remaining in the current sequence (unsurprising
564
+ // at the first byte!).
565
+ $string = '';
566
+ $remaining = 0;
567
+
568
+ // Loop over each and every byte, and set $value to its value
569
+ for ($i = 1, $len = count($bytes); $i < $len; $i++) {
570
+ $value = hexdec($bytes[$i]);
571
+
572
+ // If we're the first byte of sequence:
573
+ if (!$remaining) {
574
+ // Start position
575
+ $start = $i;
576
+
577
+ // By default we are valid
578
+ $valid = true;
579
+
580
+ // One byte sequence:
581
+ if ($value <= 0x7F) {
582
+ $character = $value;
583
+ $length = 1;
584
+ }
585
+ // Two byte sequence:
586
+ elseif (($value & 0xE0) === 0xC0) {
587
+ $character = ($value & 0x1F) << 6;
588
+ $length = 2;
589
+ $remaining = 1;
590
+ }
591
+ // Three byte sequence:
592
+ elseif (($value & 0xF0) === 0xE0) {
593
+ $character = ($value & 0x0F) << 12;
594
+ $length = 3;
595
+ $remaining = 2;
596
+ }
597
+ // Four byte sequence:
598
+ elseif (($value & 0xF8) === 0xF0) {
599
+ $character = ($value & 0x07) << 18;
600
+ $length = 4;
601
+ $remaining = 3;
602
+ }
603
+ // Invalid byte:
604
+ else {
605
+ $valid = false;
606
+ $remaining = 0;
607
+ }
608
+ }
609
+ // Continuation byte:
610
+ else {
611
+ // Check that the byte is valid, then add it to the character:
612
+ if (($value & 0xC0) === 0x80) {
613
+ $remaining--;
614
+ $character |= ($value & 0x3F) << ($remaining * 6);
615
+ }
616
+ // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
617
+ else {
618
+ $valid = false;
619
+ $remaining = 0;
620
+ $i--;
621
+ }
622
+ }
623
+
624
+ // If we've reached the end of the current byte sequence, append it to Unicode::$data
625
+ if (!$remaining) {
626
+ // Percent encode anything invalid or not in iunreserved
627
+ if (
628
+ // Invalid sequences
629
+ !$valid
630
+ // Non-shortest form sequences are invalid
631
+ || $length > 1 && $character <= 0x7F
632
+ || $length > 2 && $character <= 0x7FF
633
+ || $length > 3 && $character <= 0xFFFF
634
+ // Outside of range of iunreserved codepoints
635
+ || $character < 0x2D
636
+ || $character > 0xEFFFD
637
+ // Noncharacters
638
+ || ($character & 0xFFFE) === 0xFFFE
639
+ || $character >= 0xFDD0 && $character <= 0xFDEF
640
+ // Everything else not in iunreserved (this is all BMP)
641
+ || $character === 0x2F
642
+ || $character > 0x39 && $character < 0x41
643
+ || $character > 0x5A && $character < 0x61
644
+ || $character > 0x7A && $character < 0x7E
645
+ || $character > 0x7E && $character < 0xA0
646
+ || $character > 0xD7FF && $character < 0xF900
647
+ ) {
648
+ for ($j = $start; $j <= $i; $j++) {
649
+ $string .= '%' . strtoupper($bytes[$j]);
650
+ }
651
+ }
652
+ else {
653
+ for ($j = $start; $j <= $i; $j++) {
654
+ $string .= chr(hexdec($bytes[$j]));
655
+ }
656
+ }
657
+ }
658
+ }
659
+
660
+ // If we have any bytes left over they are invalid (i.e., we are
661
+ // mid-way through a multi-byte sequence)
662
+ if ($remaining) {
663
+ for ($j = $start; $j < $len; $j++) {
664
+ $string .= '%' . strtoupper($bytes[$j]);
665
+ }
666
+ }
667
+
668
+ return $string;
669
+ }
670
+
671
+ protected function scheme_normalization() {
672
+ if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) {
673
+ $this->iuserinfo = null;
674
+ }
675
+ if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) {
676
+ $this->ihost = null;
677
+ }
678
+ if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) {
679
+ $this->port = null;
680
+ }
681
+ if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) {
682
+ $this->ipath = '';
683
+ }
684
+ if (isset($this->ihost) && empty($this->ipath)) {
685
+ $this->ipath = '/';
686
+ }
687
+ if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) {
688
+ $this->iquery = null;
689
+ }
690
+ if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) {
691
+ $this->ifragment = null;
692
+ }
693
+ }
694
+
695
+ /**
696
+ * Check if the object represents a valid IRI. This needs to be done on each
697
+ * call as some things change depending on another part of the IRI.
698
+ *
699
+ * @return bool
700
+ */
701
+ public function is_valid() {
702
+ $isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null;
703
+ if ($this->ipath !== '' &&
704
+ (
705
+ $isauthority && $this->ipath[0] !== '/' ||
706
+ (
707
+ $this->scheme === null &&
708
+ !$isauthority &&
709
+ strpos($this->ipath, ':') !== false &&
710
+ (strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/'))
711
+ )
712
+ )
713
+ ) {
714
+ return false;
715
+ }
716
+
717
+ return true;
718
+ }
719
+
720
+ /**
721
+ * Set the entire IRI. Returns true on success, false on failure (if there
722
+ * are any invalid characters).
723
+ *
724
+ * @param string $iri
725
+ * @return bool
726
+ */
727
+ protected function set_iri($iri) {
728
+ static $cache;
729
+ if (!$cache) {
730
+ $cache = array();
731
+ }
732
+
733
+ if ($iri === null) {
734
+ return true;
735
+ }
736
+
737
+ $iri = (string) $iri;
738
+
739
+ if (isset($cache[$iri])) {
740
+ list($this->scheme,
741
+ $this->iuserinfo,
742
+ $this->ihost,
743
+ $this->port,
744
+ $this->ipath,
745
+ $this->iquery,
746
+ $this->ifragment,
747
+ $return) = $cache[$iri];
748
+ return $return;
749
+ }
750
+
751
+ $parsed = $this->parse_iri($iri);
752
+
753
+ $return = $this->set_scheme($parsed['scheme'])
754
+ && $this->set_authority($parsed['authority'])
755
+ && $this->set_path($parsed['path'])
756
+ && $this->set_query($parsed['query'])
757
+ && $this->set_fragment($parsed['fragment']);
758
+
759
+ $cache[$iri] = array($this->scheme,
760
+ $this->iuserinfo,
761
+ $this->ihost,
762
+ $this->port,
763
+ $this->ipath,
764
+ $this->iquery,
765
+ $this->ifragment,
766
+ $return);
767
+ return $return;
768
+ }
769
+
770
+ /**
771
+ * Set the scheme. Returns true on success, false on failure (if there are
772
+ * any invalid characters).
773
+ *
774
+ * @param string $scheme
775
+ * @return bool
776
+ */
777
+ protected function set_scheme($scheme) {
778
+ if ($scheme === null) {
779
+ $this->scheme = null;
780
+ }
781
+ elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) {
782
+ $this->scheme = null;
783
+ return false;
784
+ }
785
+ else {
786
+ $this->scheme = strtolower($scheme);
787
+ }
788
+ return true;
789
+ }
790
+
791
+ /**
792
+ * Set the authority. Returns true on success, false on failure (if there are
793
+ * any invalid characters).
794
+ *
795
+ * @param string $authority
796
+ * @return bool
797
+ */
798
+ protected function set_authority($authority) {
799
+ static $cache;
800
+ if (!$cache) {
801
+ $cache = array();
802
+ }
803
+
804
+ if ($authority === null) {
805
+ $this->iuserinfo = null;
806
+ $this->ihost = null;
807
+ $this->port = null;
808
+ return true;
809
+ }
810
+ if (isset($cache[$authority])) {
811
+ list($this->iuserinfo,
812
+ $this->ihost,
813
+ $this->port,
814
+ $return) = $cache[$authority];
815
+
816
+ return $return;
817
+ }
818
+
819
+ $remaining = $authority;
820
+ if (($iuserinfo_end = strrpos($remaining, '@')) !== false) {
821
+ $iuserinfo = substr($remaining, 0, $iuserinfo_end);
822
+ $remaining = substr($remaining, $iuserinfo_end + 1);
823
+ }
824
+ else {
825
+ $iuserinfo = null;
826
+ }
827
+ if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) {
828
+ $port = substr($remaining, $port_start + 1);
829
+ if ($port === false || $port === '') {
830
+ $port = null;
831
+ }
832
+ $remaining = substr($remaining, 0, $port_start);
833
+ }
834
+ else {
835
+ $port = null;
836
+ }
837
+
838
+ $return = $this->set_userinfo($iuserinfo) &&
839
+ $this->set_host($remaining) &&
840
+ $this->set_port($port);
841
+
842
+ $cache[$authority] = array($this->iuserinfo,
843
+ $this->ihost,
844
+ $this->port,
845
+ $return);
846
+
847
+ return $return;
848
+ }
849
+
850
+ /**
851
+ * Set the iuserinfo.
852
+ *
853
+ * @param string $iuserinfo
854
+ * @return bool
855
+ */
856
+ protected function set_userinfo($iuserinfo) {
857
+ if ($iuserinfo === null) {
858
+ $this->iuserinfo = null;
859
+ }
860
+ else {
861
+ $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
862
+ $this->scheme_normalization();
863
+ }
864
+
865
+ return true;
866
+ }
867
+
868
+ /**
869
+ * Set the ihost. Returns true on success, false on failure (if there are
870
+ * any invalid characters).
871
+ *
872
+ * @param string $ihost
873
+ * @return bool
874
+ */
875
+ protected function set_host($ihost) {
876
+ if ($ihost === null) {
877
+ $this->ihost = null;
878
+ return true;
879
+ }
880
+ if (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') {
881
+ if (Ipv6::check_ipv6(substr($ihost, 1, -1))) {
882
+ $this->ihost = '[' . Ipv6::compress(substr($ihost, 1, -1)) . ']';
883
+ }
884
+ else {
885
+ $this->ihost = null;
886
+ return false;
887
+ }
888
+ }
889
+ else {
890
+ $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');
891
+
892
+ // Lowercase, but ignore pct-encoded sections (as they should
893
+ // remain uppercase). This must be done after the previous step
894
+ // as that can add unescaped characters.
895
+ $position = 0;
896
+ $strlen = strlen($ihost);
897
+ while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) {
898
+ if ($ihost[$position] === '%') {
899
+ $position += 3;
900
+ }
901
+ else {
902
+ $ihost[$position] = strtolower($ihost[$position]);
903
+ $position++;
904
+ }
905
+ }
906
+
907
+ $this->ihost = $ihost;
908
+ }
909
+
910
+ $this->scheme_normalization();
911
+
912
+ return true;
913
+ }
914
+
915
+ /**
916
+ * Set the port. Returns true on success, false on failure (if there are
917
+ * any invalid characters).
918
+ *
919
+ * @param string $port
920
+ * @return bool
921
+ */
922
+ protected function set_port($port) {
923
+ if ($port === null) {
924
+ $this->port = null;
925
+ return true;
926
+ }
927
+
928
+ if (strspn($port, '0123456789') === strlen($port)) {
929
+ $this->port = (int) $port;
930
+ $this->scheme_normalization();
931
+ return true;
932
+ }
933
+
934
+ $this->port = null;
935
+ return false;
936
+ }
937
+
938
+ /**
939
+ * Set the ipath.
940
+ *
941
+ * @param string $ipath
942
+ * @return bool
943
+ */
944
+ protected function set_path($ipath) {
945
+ static $cache;
946
+ if (!$cache) {
947
+ $cache = array();
948
+ }
949
+
950
+ $ipath = (string) $ipath;
951
+
952
+ if (isset($cache[$ipath])) {
953
+ $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
954
+ }
955
+ else {
956
+ $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
957
+ $removed = $this->remove_dot_segments($valid);
958
+
959
+ $cache[$ipath] = array($valid, $removed);
960
+ $this->ipath = ($this->scheme !== null) ? $removed : $valid;
961
+ }
962
+ $this->scheme_normalization();
963
+ return true;
964
+ }
965
+
966
+ /**
967
+ * Set the iquery.
968
+ *
969
+ * @param string $iquery
970
+ * @return bool
971
+ */
972
+ protected function set_query($iquery) {
973
+ if ($iquery === null) {
974
+ $this->iquery = null;
975
+ }
976
+ else {
977
+ $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
978
+ $this->scheme_normalization();
979
+ }
980
+ return true;
981
+ }
982
+
983
+ /**
984
+ * Set the ifragment.
985
+ *
986
+ * @param string $ifragment
987
+ * @return bool
988
+ */
989
+ protected function set_fragment($ifragment) {
990
+ if ($ifragment === null) {
991
+ $this->ifragment = null;
992
+ }
993
+ else {
994
+ $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
995
+ $this->scheme_normalization();
996
+ }
997
+ return true;
998
+ }
999
+
1000
+ /**
1001
+ * Convert an IRI to a URI (or parts thereof)
1002
+ *
1003
+ * @param string|bool $iri IRI to convert (or false from {@see \WpOrg\Requests\IRI::get_iri()})
1004
+ * @return string|false URI if IRI is valid, false otherwise.
1005
+ */
1006
+ protected function to_uri($iri) {
1007
+ if (!is_string($iri)) {
1008
+ return false;
1009
+ }
1010
+
1011
+ static $non_ascii;
1012
+ if (!$non_ascii) {
1013
+ $non_ascii = implode('', range("\x80", "\xFF"));
1014
+ }
1015
+
1016
+ $position = 0;
1017
+ $strlen = strlen($iri);
1018
+ while (($position += strcspn($iri, $non_ascii, $position)) < $strlen) {
1019
+ $iri = substr_replace($iri, sprintf('%%%02X', ord($iri[$position])), $position, 1);
1020
+ $position += 3;
1021
+ $strlen += 2;
1022
+ }
1023
+
1024
+ return $iri;
1025
+ }
1026
+
1027
+ /**
1028
+ * Get the complete IRI
1029
+ *
1030
+ * @return string|false
1031
+ */
1032
+ protected function get_iri() {
1033
+ if (!$this->is_valid()) {
1034
+ return false;
1035
+ }
1036
+
1037
+ $iri = '';
1038
+ if ($this->scheme !== null) {
1039
+ $iri .= $this->scheme . ':';
1040
+ }
1041
+ if (($iauthority = $this->get_iauthority()) !== null) {
1042
+ $iri .= '//' . $iauthority;
1043
+ }
1044
+ $iri .= $this->ipath;
1045
+ if ($this->iquery !== null) {
1046
+ $iri .= '?' . $this->iquery;
1047
+ }
1048
+ if ($this->ifragment !== null) {
1049
+ $iri .= '#' . $this->ifragment;
1050
+ }
1051
+
1052
+ return $iri;
1053
+ }
1054
+
1055
+ /**
1056
+ * Get the complete URI
1057
+ *
1058
+ * @return string
1059
+ */
1060
+ protected function get_uri() {
1061
+ return $this->to_uri($this->get_iri());
1062
+ }
1063
+
1064
+ /**
1065
+ * Get the complete iauthority
1066
+ *
1067
+ * @return string|null
1068
+ */
1069
+ protected function get_iauthority() {
1070
+ if ($this->iuserinfo === null && $this->ihost === null && $this->port === null) {
1071
+ return null;
1072
+ }
1073
+
1074
+ $iauthority = '';
1075
+ if ($this->iuserinfo !== null) {
1076
+ $iauthority .= $this->iuserinfo . '@';
1077
+ }
1078
+ if ($this->ihost !== null) {
1079
+ $iauthority .= $this->ihost;
1080
+ }
1081
+ if ($this->port !== null) {
1082
+ $iauthority .= ':' . $this->port;
1083
+ }
1084
+ return $iauthority;
1085
+ }
1086
+
1087
+ /**
1088
+ * Get the complete authority
1089
+ *
1090
+ * @return string
1091
+ */
1092
+ protected function get_authority() {
1093
+ $iauthority = $this->get_iauthority();
1094
+ if (is_string($iauthority)) {
1095
+ return $this->to_uri($iauthority);
1096
+ }
1097
+ else {
1098
+ return $iauthority;
1099
+ }
1100
+ }
1101
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Port.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Port utilities for Requests
4
+ *
5
+ * @package Requests\Utilities
6
+ * @since 2.0.0
7
+ */
8
+
9
+ namespace WpOrg\Requests;
10
+
11
+ use WpOrg\Requests\Exception;
12
+ use WpOrg\Requests\Exception\InvalidArgument;
13
+
14
+ /**
15
+ * Find the correct port depending on the Request type.
16
+ *
17
+ * @package Requests\Utilities
18
+ * @since 2.0.0
19
+ */
20
+ final class Port {
21
+
22
+ /**
23
+ * Port to use with Acap requests.
24
+ *
25
+ * @var int
26
+ */
27
+ const ACAP = 674;
28
+
29
+ /**
30
+ * Port to use with Dictionary requests.
31
+ *
32
+ * @var int
33
+ */
34
+ const DICT = 2628;
35
+
36
+ /**
37
+ * Port to use with HTTP requests.
38
+ *
39
+ * @var int
40
+ */
41
+ const HTTP = 80;
42
+
43
+ /**
44
+ * Port to use with HTTP over SSL requests.
45
+ *
46
+ * @var int
47
+ */
48
+ const HTTPS = 443;
49
+
50
+ /**
51
+ * Retrieve the port number to use.
52
+ *
53
+ * @param string $type Request type.
54
+ * The following requests types are supported:
55
+ * 'acap', 'dict', 'http' and 'https'.
56
+ *
57
+ * @return int
58
+ *
59
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When a non-string input has been passed.
60
+ * @throws \WpOrg\Requests\Exception When a non-supported port is requested ('portnotsupported').
61
+ */
62
+ public static function get($type) {
63
+ if (!is_string($type)) {
64
+ throw InvalidArgument::create(1, '$type', 'string', gettype($type));
65
+ }
66
+
67
+ $type = strtoupper($type);
68
+ if (!defined("self::{$type}")) {
69
+ $message = sprintf('Invalid port type (%s) passed', $type);
70
+ throw new Exception($message, 'portnotsupported');
71
+ }
72
+
73
+ return constant("self::{$type}");
74
+ }
75
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Proxy.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Proxy connection interface
4
+ *
5
+ * @package Requests\Proxy
6
+ * @since 1.6
7
+ */
8
+
9
+ namespace WpOrg\Requests;
10
+
11
+ use WpOrg\Requests\Hooks;
12
+
13
+ /**
14
+ * Proxy connection interface
15
+ *
16
+ * Implement this interface to handle proxy settings and authentication
17
+ *
18
+ * Parameters should be passed via the constructor where possible, as this
19
+ * makes it much easier for users to use your provider.
20
+ *
21
+ * @see \WpOrg\Requests\Hooks
22
+ *
23
+ * @package Requests\Proxy
24
+ * @since 1.6
25
+ */
26
+ interface Proxy {
27
+ /**
28
+ * Register hooks as needed
29
+ *
30
+ * This method is called in {@see \WpOrg\Requests\Requests::request()} when the user
31
+ * has set an instance as the 'auth' option. Use this callback to register all the
32
+ * hooks you'll need.
33
+ *
34
+ * @see \WpOrg\Requests\Hooks::register()
35
+ * @param \WpOrg\Requests\Hooks $hooks Hook system
36
+ */
37
+ public function register(Hooks $hooks);
38
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Proxy/Http.php ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * HTTP Proxy connection interface
4
+ *
5
+ * @package Requests\Proxy
6
+ * @since 1.6
7
+ */
8
+
9
+ namespace WpOrg\Requests\Proxy;
10
+
11
+ use WpOrg\Requests\Exception\ArgumentCount;
12
+ use WpOrg\Requests\Exception\InvalidArgument;
13
+ use WpOrg\Requests\Hooks;
14
+ use WpOrg\Requests\Proxy;
15
+
16
+ /**
17
+ * HTTP Proxy connection interface
18
+ *
19
+ * Provides a handler for connection via an HTTP proxy
20
+ *
21
+ * @package Requests\Proxy
22
+ * @since 1.6
23
+ */
24
+ final class Http implements Proxy {
25
+ /**
26
+ * Proxy host and port
27
+ *
28
+ * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
29
+ *
30
+ * @var string
31
+ */
32
+ public $proxy;
33
+
34
+ /**
35
+ * Username
36
+ *
37
+ * @var string
38
+ */
39
+ public $user;
40
+
41
+ /**
42
+ * Password
43
+ *
44
+ * @var string
45
+ */
46
+ public $pass;
47
+
48
+ /**
49
+ * Do we need to authenticate? (ie username & password have been provided)
50
+ *
51
+ * @var boolean
52
+ */
53
+ public $use_authentication;
54
+
55
+ /**
56
+ * Constructor
57
+ *
58
+ * @since 1.6
59
+ *
60
+ * @param array|string|null $args Proxy as a string or an array of proxy, user and password.
61
+ * When passed as an array, must have exactly one (proxy)
62
+ * or three elements (proxy, user, password).
63
+ *
64
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array, a string or null.
65
+ * @throws \WpOrg\Requests\Exception\ArgumentCount On incorrect number of arguments (`proxyhttpbadargs`)
66
+ */
67
+ public function __construct($args = null) {
68
+ if (is_string($args)) {
69
+ $this->proxy = $args;
70
+ }
71
+ elseif (is_array($args)) {
72
+ if (count($args) === 1) {
73
+ list($this->proxy) = $args;
74
+ }
75
+ elseif (count($args) === 3) {
76
+ list($this->proxy, $this->user, $this->pass) = $args;
77
+ $this->use_authentication = true;
78
+ }
79
+ else {
80
+ throw ArgumentCount::create(
81
+ 'an array with exactly one element or exactly three elements',
82
+ count($args),
83
+ 'proxyhttpbadargs'
84
+ );
85
+ }
86
+ } elseif ($args !== null) {
87
+ throw InvalidArgument::create(1, '$args', 'array|string|null', gettype($args));
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Register the necessary callbacks
93
+ *
94
+ * @since 1.6
95
+ * @see \WpOrg\Requests\Proxy\HTTP::curl_before_send()
96
+ * @see \WpOrg\Requests\Proxy\HTTP::fsockopen_remote_socket()
97
+ * @see \WpOrg\Requests\Proxy\HTTP::fsockopen_remote_host_path()
98
+ * @see \WpOrg\Requests\Proxy\HTTP::fsockopen_header()
99
+ * @param \WpOrg\Requests\Hooks $hooks Hook system
100
+ */
101
+ public function register(Hooks $hooks) {
102
+ $hooks->register('curl.before_send', [$this, 'curl_before_send']);
103
+
104
+ $hooks->register('fsockopen.remote_socket', [$this, 'fsockopen_remote_socket']);
105
+ $hooks->register('fsockopen.remote_host_path', [$this, 'fsockopen_remote_host_path']);
106
+ if ($this->use_authentication) {
107
+ $hooks->register('fsockopen.after_headers', [$this, 'fsockopen_header']);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Set cURL parameters before the data is sent
113
+ *
114
+ * @since 1.6
115
+ * @param resource|\CurlHandle $handle cURL handle
116
+ */
117
+ public function curl_before_send(&$handle) {
118
+ curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
119
+ curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
120
+
121
+ if ($this->use_authentication) {
122
+ curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
123
+ curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Alter remote socket information before opening socket connection
129
+ *
130
+ * @since 1.6
131
+ * @param string $remote_socket Socket connection string
132
+ */
133
+ public function fsockopen_remote_socket(&$remote_socket) {
134
+ $remote_socket = $this->proxy;
135
+ }
136
+
137
+ /**
138
+ * Alter remote path before getting stream data
139
+ *
140
+ * @since 1.6
141
+ * @param string $path Path to send in HTTP request string ("GET ...")
142
+ * @param string $url Full URL we're requesting
143
+ */
144
+ public function fsockopen_remote_host_path(&$path, $url) {
145
+ $path = $url;
146
+ }
147
+
148
+ /**
149
+ * Add extra headers to the request before sending
150
+ *
151
+ * @since 1.6
152
+ * @param string $out HTTP header string
153
+ */
154
+ public function fsockopen_header(&$out) {
155
+ $out .= sprintf("Proxy-Authorization: Basic %s\r\n", base64_encode($this->get_auth_string()));
156
+ }
157
+
158
+ /**
159
+ * Get the authentication string (user:pass)
160
+ *
161
+ * @since 1.6
162
+ * @return string
163
+ */
164
+ public function get_auth_string() {
165
+ return $this->user . ':' . $this->pass;
166
+ }
167
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Requests.php ADDED
@@ -0,0 +1,1079 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Requests for PHP
4
+ *
5
+ * Inspired by Requests for Python.
6
+ *
7
+ * Based on concepts from SimplePie_File, RequestCore and WP_Http.
8
+ *
9
+ * @package Requests
10
+ */
11
+
12
+ namespace WpOrg\Requests;
13
+
14
+ use WpOrg\Requests\Auth\Basic;
15
+ use WpOrg\Requests\Capability;
16
+ use WpOrg\Requests\Cookie\Jar;
17
+ use WpOrg\Requests\Exception;
18
+ use WpOrg\Requests\Exception\InvalidArgument;
19
+ use WpOrg\Requests\Hooks;
20
+ use WpOrg\Requests\IdnaEncoder;
21
+ use WpOrg\Requests\Iri;
22
+ use WpOrg\Requests\Proxy\Http;
23
+ use WpOrg\Requests\Response;
24
+ use WpOrg\Requests\Transport\Curl;
25
+ use WpOrg\Requests\Transport\Fsockopen;
26
+ use WpOrg\Requests\Utility\InputValidator;
27
+
28
+ /**
29
+ * Requests for PHP
30
+ *
31
+ * Inspired by Requests for Python.
32
+ *
33
+ * Based on concepts from SimplePie_File, RequestCore and WP_Http.
34
+ *
35
+ * @package Requests
36
+ */
37
+ class Requests {
38
+ /**
39
+ * POST method
40
+ *
41
+ * @var string
42
+ */
43
+ const POST = 'POST';
44
+
45
+ /**
46
+ * PUT method
47
+ *
48
+ * @var string
49
+ */
50
+ const PUT = 'PUT';
51
+
52
+ /**
53
+ * GET method
54
+ *
55
+ * @var string
56
+ */
57
+ const GET = 'GET';
58
+
59
+ /**
60
+ * HEAD method
61
+ *
62
+ * @var string
63
+ */
64
+ const HEAD = 'HEAD';
65
+
66
+ /**
67
+ * DELETE method
68
+ *
69
+ * @var string
70
+ */
71
+ const DELETE = 'DELETE';
72
+
73
+ /**
74
+ * OPTIONS method
75
+ *
76
+ * @var string
77
+ */
78
+ const OPTIONS = 'OPTIONS';
79
+
80
+ /**
81
+ * TRACE method
82
+ *
83
+ * @var string
84
+ */
85
+ const TRACE = 'TRACE';
86
+
87
+ /**
88
+ * PATCH method
89
+ *
90
+ * @link https://tools.ietf.org/html/rfc5789
91
+ * @var string
92
+ */
93
+ const PATCH = 'PATCH';
94
+
95
+ /**
96
+ * Default size of buffer size to read streams
97
+ *
98
+ * @var integer
99
+ */
100
+ const BUFFER_SIZE = 1160;
101
+
102
+ /**
103
+ * Option defaults.
104
+ *
105
+ * @see \WpOrg\Requests\Requests::get_default_options()
106
+ * @see \WpOrg\Requests\Requests::request() for values returned by this method
107
+ *
108
+ * @since 2.0.0
109
+ *
110
+ * @var array
111
+ */
112
+ const OPTION_DEFAULTS = [
113
+ 'timeout' => 10,
114
+ 'connect_timeout' => 10,
115
+ 'useragent' => 'php-requests/' . self::VERSION,
116
+ 'protocol_version' => 1.1,
117
+ 'redirected' => 0,
118
+ 'redirects' => 10,
119
+ 'follow_redirects' => true,
120
+ 'blocking' => true,
121
+ 'type' => self::GET,
122
+ 'filename' => false,
123
+ 'auth' => false,
124
+ 'proxy' => false,
125
+ 'cookies' => false,
126
+ 'max_bytes' => false,
127
+ 'idn' => true,
128
+ 'hooks' => null,
129
+ 'transport' => null,
130
+ 'verify' => null,
131
+ 'verifyname' => true,
132
+ ];
133
+
134
+ /**
135
+ * Default supported Transport classes.
136
+ *
137
+ * @since 2.0.0
138
+ *
139
+ * @var array
140
+ */
141
+ const DEFAULT_TRANSPORTS = [
142
+ Curl::class => Curl::class,
143
+ Fsockopen::class => Fsockopen::class,
144
+ ];
145
+
146
+ /**
147
+ * Current version of Requests
148
+ *
149
+ * @var string
150
+ */
151
+ const VERSION = '2.0.0';
152
+
153
+ /**
154
+ * Selected transport name
155
+ *
156
+ * Use {@see \WpOrg\Requests\Requests::get_transport()} instead
157
+ *
158
+ * @var array
159
+ */
160
+ public static $transport = [];
161
+
162
+ /**
163
+ * Registered transport classes
164
+ *
165
+ * @var array
166
+ */
167
+ protected static $transports = [];
168
+
169
+ /**
170
+ * Default certificate path.
171
+ *
172
+ * @see \WpOrg\Requests\Requests::get_certificate_path()
173
+ * @see \WpOrg\Requests\Requests::set_certificate_path()
174
+ *
175
+ * @var string
176
+ */
177
+ protected static $certificate_path = __DIR__ . '/../certificates/cacert.pem';
178
+
179
+ /**
180
+ * All (known) valid deflate, gzip header magic markers.
181
+ *
182
+ * These markers relate to different compression levels.
183
+ *
184
+ * @link https://stackoverflow.com/a/43170354/482864 Marker source.
185
+ *
186
+ * @since 2.0.0
187
+ *
188
+ * @var array
189
+ */
190
+ private static $magic_compression_headers = [
191
+ "\x1f\x8b" => true, // Gzip marker.
192
+ "\x78\x01" => true, // Zlib marker - level 1.
193
+ "\x78\x5e" => true, // Zlib marker - level 2 to 5.
194
+ "\x78\x9c" => true, // Zlib marker - level 6.
195
+ "\x78\xda" => true, // Zlib marker - level 7 to 9.
196
+ ];
197
+
198
+ /**
199
+ * This is a static class, do not instantiate it
200
+ *
201
+ * @codeCoverageIgnore
202
+ */
203
+ private function __construct() {}
204
+
205
+ /**
206
+ * Register a transport
207
+ *
208
+ * @param string $transport Transport class to add, must support the \WpOrg\Requests\Transport interface
209
+ */
210
+ public static function add_transport($transport) {
211
+ if (empty(self::$transports)) {
212
+ self::$transports = self::DEFAULT_TRANSPORTS;
213
+ }
214
+
215
+ self::$transports[$transport] = $transport;
216
+ }
217
+
218
+ /**
219
+ * Get the fully qualified class name (FQCN) for a working transport.
220
+ *
221
+ * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
222
+ * @return string FQCN of the transport to use, or an empty string if no transport was
223
+ * found which provided the requested capabilities.
224
+ */
225
+ protected static function get_transport_class(array $capabilities = []) {
226
+ // Caching code, don't bother testing coverage.
227
+ // @codeCoverageIgnoreStart
228
+ // Array of capabilities as a string to be used as an array key.
229
+ ksort($capabilities);
230
+ $cap_string = serialize($capabilities);
231
+
232
+ // Don't search for a transport if it's already been done for these $capabilities.
233
+ if (isset(self::$transport[$cap_string])) {
234
+ return self::$transport[$cap_string];
235
+ }
236
+
237
+ // Ensure we will not run this same check again later on.
238
+ self::$transport[$cap_string] = '';
239
+ // @codeCoverageIgnoreEnd
240
+
241
+ if (empty(self::$transports)) {
242
+ self::$transports = self::DEFAULT_TRANSPORTS;
243
+ }
244
+
245
+ // Find us a working transport.
246
+ foreach (self::$transports as $class) {
247
+ if (!class_exists($class)) {
248
+ continue;
249
+ }
250
+
251
+ $result = $class::test($capabilities);
252
+ if ($result === true) {
253
+ self::$transport[$cap_string] = $class;
254
+ break;
255
+ }
256
+ }
257
+
258
+ return self::$transport[$cap_string];
259
+ }
260
+
261
+ /**
262
+ * Get a working transport.
263
+ *
264
+ * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
265
+ * @return \WpOrg\Requests\Transport
266
+ * @throws \WpOrg\Requests\Exception If no valid transport is found (`notransport`).
267
+ */
268
+ protected static function get_transport(array $capabilities = []) {
269
+ $class = self::get_transport_class($capabilities);
270
+
271
+ if ($class === '') {
272
+ throw new Exception('No working transports found', 'notransport', self::$transports);
273
+ }
274
+
275
+ return new $class();
276
+ }
277
+
278
+ /**
279
+ * Checks to see if we have a transport for the capabilities requested.
280
+ *
281
+ * Supported capabilities can be found in the {@see \WpOrg\Requests\Capability}
282
+ * interface as constants.
283
+ *
284
+ * Example usage:
285
+ * `Requests::has_capabilities([Capability::SSL => true])`.
286
+ *
287
+ * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
288
+ * @return bool Whether the transport has the requested capabilities.
289
+ */
290
+ public static function has_capabilities(array $capabilities = []) {
291
+ return self::get_transport_class($capabilities) !== '';
292
+ }
293
+
294
+ /**#@+
295
+ * @see \WpOrg\Requests\Requests::request()
296
+ * @param string $url
297
+ * @param array $headers
298
+ * @param array $options
299
+ * @return \WpOrg\Requests\Response
300
+ */
301
+ /**
302
+ * Send a GET request
303
+ */
304
+ public static function get($url, $headers = [], $options = []) {
305
+ return self::request($url, $headers, null, self::GET, $options);
306
+ }
307
+
308
+ /**
309
+ * Send a HEAD request
310
+ */
311
+ public static function head($url, $headers = [], $options = []) {
312
+ return self::request($url, $headers, null, self::HEAD, $options);
313
+ }
314
+
315
+ /**
316
+ * Send a DELETE request
317
+ */
318
+ public static function delete($url, $headers = [], $options = []) {
319
+ return self::request($url, $headers, null, self::DELETE, $options);
320
+ }
321
+
322
+ /**
323
+ * Send a TRACE request
324
+ */
325
+ public static function trace($url, $headers = [], $options = []) {
326
+ return self::request($url, $headers, null, self::TRACE, $options);
327
+ }
328
+ /**#@-*/
329
+
330
+ /**#@+
331
+ * @see \WpOrg\Requests\Requests::request()
332
+ * @param string $url
333
+ * @param array $headers
334
+ * @param array $data
335
+ * @param array $options
336
+ * @return \WpOrg\Requests\Response
337
+ */
338
+ /**
339
+ * Send a POST request
340
+ */
341
+ public static function post($url, $headers = [], $data = [], $options = []) {
342
+ return self::request($url, $headers, $data, self::POST, $options);
343
+ }
344
+ /**
345
+ * Send a PUT request
346
+ */
347
+ public static function put($url, $headers = [], $data = [], $options = []) {
348
+ return self::request($url, $headers, $data, self::PUT, $options);
349
+ }
350
+
351
+ /**
352
+ * Send an OPTIONS request
353
+ */
354
+ public static function options($url, $headers = [], $data = [], $options = []) {
355
+ return self::request($url, $headers, $data, self::OPTIONS, $options);
356
+ }
357
+
358
+ /**
359
+ * Send a PATCH request
360
+ *
361
+ * Note: Unlike {@see \WpOrg\Requests\Requests::post()} and {@see \WpOrg\Requests\Requests::put()},
362
+ * `$headers` is required, as the specification recommends that should send an ETag
363
+ *
364
+ * @link https://tools.ietf.org/html/rfc5789
365
+ */
366
+ public static function patch($url, $headers, $data = [], $options = []) {
367
+ return self::request($url, $headers, $data, self::PATCH, $options);
368
+ }
369
+ /**#@-*/
370
+
371
+ /**
372
+ * Main interface for HTTP requests
373
+ *
374
+ * This method initiates a request and sends it via a transport before
375
+ * parsing.
376
+ *
377
+ * The `$options` parameter takes an associative array with the following
378
+ * options:
379
+ *
380
+ * - `timeout`: How long should we wait for a response?
381
+ * Note: for cURL, a minimum of 1 second applies, as DNS resolution
382
+ * operates at second-resolution only.
383
+ * (float, seconds with a millisecond precision, default: 10, example: 0.01)
384
+ * - `connect_timeout`: How long should we wait while trying to connect?
385
+ * (float, seconds with a millisecond precision, default: 10, example: 0.01)
386
+ * - `useragent`: Useragent to send to the server
387
+ * (string, default: php-requests/$version)
388
+ * - `follow_redirects`: Should we follow 3xx redirects?
389
+ * (boolean, default: true)
390
+ * - `redirects`: How many times should we redirect before erroring?
391
+ * (integer, default: 10)
392
+ * - `blocking`: Should we block processing on this request?
393
+ * (boolean, default: true)
394
+ * - `filename`: File to stream the body to instead.
395
+ * (string|boolean, default: false)
396
+ * - `auth`: Authentication handler or array of user/password details to use
397
+ * for Basic authentication
398
+ * (\WpOrg\Requests\Auth|array|boolean, default: false)
399
+ * - `proxy`: Proxy details to use for proxy by-passing and authentication
400
+ * (\WpOrg\Requests\Proxy|array|string|boolean, default: false)
401
+ * - `max_bytes`: Limit for the response body size.
402
+ * (integer|boolean, default: false)
403
+ * - `idn`: Enable IDN parsing
404
+ * (boolean, default: true)
405
+ * - `transport`: Custom transport. Either a class name, or a
406
+ * transport object. Defaults to the first working transport from
407
+ * {@see \WpOrg\Requests\Requests::getTransport()}
408
+ * (string|\WpOrg\Requests\Transport, default: {@see \WpOrg\Requests\Requests::getTransport()})
409
+ * - `hooks`: Hooks handler.
410
+ * (\WpOrg\Requests\HookManager, default: new WpOrg\Requests\Hooks())
411
+ * - `verify`: Should we verify SSL certificates? Allows passing in a custom
412
+ * certificate file as a string. (Using true uses the system-wide root
413
+ * certificate store instead, but this may have different behaviour
414
+ * across transports.)
415
+ * (string|boolean, default: certificates/cacert.pem)
416
+ * - `verifyname`: Should we verify the common name in the SSL certificate?
417
+ * (boolean, default: true)
418
+ * - `data_format`: How should we send the `$data` parameter?
419
+ * (string, one of 'query' or 'body', default: 'query' for
420
+ * HEAD/GET/DELETE, 'body' for POST/PUT/OPTIONS/PATCH)
421
+ *
422
+ * @param string|Stringable $url URL to request
423
+ * @param array $headers Extra headers to send with the request
424
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
425
+ * @param string $type HTTP request type (use Requests constants)
426
+ * @param array $options Options for the request (see description for more information)
427
+ * @return \WpOrg\Requests\Response
428
+ *
429
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string or Stringable.
430
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $type argument is not a string.
431
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
432
+ * @throws \WpOrg\Requests\Exception On invalid URLs (`nonhttp`)
433
+ */
434
+ public static function request($url, $headers = [], $data = [], $type = self::GET, $options = []) {
435
+ if (InputValidator::is_string_or_stringable($url) === false) {
436
+ throw InvalidArgument::create(1, '$url', 'string|Stringable', gettype($url));
437
+ }
438
+
439
+ if (is_string($type) === false) {
440
+ throw InvalidArgument::create(4, '$type', 'string', gettype($type));
441
+ }
442
+
443
+ if (is_array($options) === false) {
444
+ throw InvalidArgument::create(5, '$options', 'array', gettype($options));
445
+ }
446
+
447
+ if (empty($options['type'])) {
448
+ $options['type'] = $type;
449
+ }
450
+ $options = array_merge(self::get_default_options(), $options);
451
+
452
+ self::set_defaults($url, $headers, $data, $type, $options);
453
+
454
+ $options['hooks']->dispatch('requests.before_request', [&$url, &$headers, &$data, &$type, &$options]);
455
+
456
+ if (!empty($options['transport'])) {
457
+ $transport = $options['transport'];
458
+
459
+ if (is_string($options['transport'])) {
460
+ $transport = new $transport();
461
+ }
462
+ }
463
+ else {
464
+ $need_ssl = (stripos($url, 'https://') === 0);
465
+ $capabilities = [Capability::SSL => $need_ssl];
466
+ $transport = self::get_transport($capabilities);
467
+ }
468
+ $response = $transport->request($url, $headers, $data, $options);
469
+
470
+ $options['hooks']->dispatch('requests.before_parse', [&$response, $url, $headers, $data, $type, $options]);
471
+
472
+ return self::parse_response($response, $url, $headers, $data, $options);
473
+ }
474
+
475
+ /**
476
+ * Send multiple HTTP requests simultaneously
477
+ *
478
+ * The `$requests` parameter takes an associative or indexed array of
479
+ * request fields. The key of each request can be used to match up the
480
+ * request with the returned data, or with the request passed into your
481
+ * `multiple.request.complete` callback.
482
+ *
483
+ * The request fields value is an associative array with the following keys:
484
+ *
485
+ * - `url`: Request URL Same as the `$url` parameter to
486
+ * {@see \WpOrg\Requests\Requests::request()}
487
+ * (string, required)
488
+ * - `headers`: Associative array of header fields. Same as the `$headers`
489
+ * parameter to {@see \WpOrg\Requests\Requests::request()}
490
+ * (array, default: `array()`)
491
+ * - `data`: Associative array of data fields or a string. Same as the
492
+ * `$data` parameter to {@see \WpOrg\Requests\Requests::request()}
493
+ * (array|string, default: `array()`)
494
+ * - `type`: HTTP request type (use \WpOrg\Requests\Requests constants). Same as the `$type`
495
+ * parameter to {@see \WpOrg\Requests\Requests::request()}
496
+ * (string, default: `\WpOrg\Requests\Requests::GET`)
497
+ * - `cookies`: Associative array of cookie name to value, or cookie jar.
498
+ * (array|\WpOrg\Requests\Cookie\Jar)
499
+ *
500
+ * If the `$options` parameter is specified, individual requests will
501
+ * inherit options from it. This can be used to use a single hooking system,
502
+ * or set all the types to `\WpOrg\Requests\Requests::POST`, for example.
503
+ *
504
+ * In addition, the `$options` parameter takes the following global options:
505
+ *
506
+ * - `complete`: A callback for when a request is complete. Takes two
507
+ * parameters, a \WpOrg\Requests\Response/\WpOrg\Requests\Exception reference, and the
508
+ * ID from the request array (Note: this can also be overridden on a
509
+ * per-request basis, although that's a little silly)
510
+ * (callback)
511
+ *
512
+ * @param array $requests Requests data (see description for more information)
513
+ * @param array $options Global and default options (see {@see \WpOrg\Requests\Requests::request()})
514
+ * @return array Responses (either \WpOrg\Requests\Response or a \WpOrg\Requests\Exception object)
515
+ *
516
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
517
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
518
+ */
519
+ public static function request_multiple($requests, $options = []) {
520
+ if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
521
+ throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
522
+ }
523
+
524
+ if (is_array($options) === false) {
525
+ throw InvalidArgument::create(2, '$options', 'array', gettype($options));
526
+ }
527
+
528
+ $options = array_merge(self::get_default_options(true), $options);
529
+
530
+ if (!empty($options['hooks'])) {
531
+ $options['hooks']->register('transport.internal.parse_response', [static::class, 'parse_multiple']);
532
+ if (!empty($options['complete'])) {
533
+ $options['hooks']->register('multiple.request.complete', $options['complete']);
534
+ }
535
+ }
536
+
537
+ foreach ($requests as $id => &$request) {
538
+ if (!isset($request['headers'])) {
539
+ $request['headers'] = [];
540
+ }
541
+ if (!isset($request['data'])) {
542
+ $request['data'] = [];
543
+ }
544
+ if (!isset($request['type'])) {
545
+ $request['type'] = self::GET;
546
+ }
547
+ if (!isset($request['options'])) {
548
+ $request['options'] = $options;
549
+ $request['options']['type'] = $request['type'];
550
+ }
551
+ else {
552
+ if (empty($request['options']['type'])) {
553
+ $request['options']['type'] = $request['type'];
554
+ }
555
+ $request['options'] = array_merge($options, $request['options']);
556
+ }
557
+
558
+ self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']);
559
+
560
+ // Ensure we only hook in once
561
+ if ($request['options']['hooks'] !== $options['hooks']) {
562
+ $request['options']['hooks']->register('transport.internal.parse_response', [static::class, 'parse_multiple']);
563
+ if (!empty($request['options']['complete'])) {
564
+ $request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']);
565
+ }
566
+ }
567
+ }
568
+ unset($request);
569
+
570
+ if (!empty($options['transport'])) {
571
+ $transport = $options['transport'];
572
+
573
+ if (is_string($options['transport'])) {
574
+ $transport = new $transport();
575
+ }
576
+ }
577
+ else {
578
+ $transport = self::get_transport();
579
+ }
580
+ $responses = $transport->request_multiple($requests, $options);
581
+
582
+ foreach ($responses as $id => &$response) {
583
+ // If our hook got messed with somehow, ensure we end up with the
584
+ // correct response
585
+ if (is_string($response)) {
586
+ $request = $requests[$id];
587
+ self::parse_multiple($response, $request);
588
+ $request['options']['hooks']->dispatch('multiple.request.complete', [&$response, $id]);
589
+ }
590
+ }
591
+
592
+ return $responses;
593
+ }
594
+
595
+ /**
596
+ * Get the default options
597
+ *
598
+ * @see \WpOrg\Requests\Requests::request() for values returned by this method
599
+ * @param boolean $multirequest Is this a multirequest?
600
+ * @return array Default option values
601
+ */
602
+ protected static function get_default_options($multirequest = false) {
603
+ $defaults = static::OPTION_DEFAULTS;
604
+ $defaults['verify'] = self::$certificate_path;
605
+
606
+ if ($multirequest !== false) {
607
+ $defaults['complete'] = null;
608
+ }
609
+ return $defaults;
610
+ }
611
+
612
+ /**
613
+ * Get default certificate path.
614
+ *
615
+ * @return string Default certificate path.
616
+ */
617
+ public static function get_certificate_path() {
618
+ return self::$certificate_path;
619
+ }
620
+
621
+ /**
622
+ * Set default certificate path.
623
+ *
624
+ * @param string|Stringable|bool $path Certificate path, pointing to a PEM file.
625
+ *
626
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string, Stringable or boolean.
627
+ */
628
+ public static function set_certificate_path($path) {
629
+ if (InputValidator::is_string_or_stringable($path) === false && is_bool($path) === false) {
630
+ throw InvalidArgument::create(1, '$path', 'string|Stringable|bool', gettype($path));
631
+ }
632
+
633
+ self::$certificate_path = $path;
634
+ }
635
+
636
+ /**
637
+ * Set the default values
638
+ *
639
+ * @param string $url URL to request
640
+ * @param array $headers Extra headers to send with the request
641
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
642
+ * @param string $type HTTP request type
643
+ * @param array $options Options for the request
644
+ * @return void $options is updated with the results
645
+ *
646
+ * @throws \WpOrg\Requests\Exception When the $url is not an http(s) URL.
647
+ */
648
+ protected static function set_defaults(&$url, &$headers, &$data, &$type, &$options) {
649
+ if (!preg_match('/^http(s)?:\/\//i', $url, $matches)) {
650
+ throw new Exception('Only HTTP(S) requests are handled.', 'nonhttp', $url);
651
+ }
652
+
653
+ if (empty($options['hooks'])) {
654
+ $options['hooks'] = new Hooks();
655
+ }
656
+
657
+ if (is_array($options['auth'])) {
658
+ $options['auth'] = new Basic($options['auth']);
659
+ }
660
+ if ($options['auth'] !== false) {
661
+ $options['auth']->register($options['hooks']);
662
+ }
663
+
664
+ if (is_string($options['proxy']) || is_array($options['proxy'])) {
665
+ $options['proxy'] = new Http($options['proxy']);
666
+ }
667
+ if ($options['proxy'] !== false) {
668
+ $options['proxy']->register($options['hooks']);
669
+ }
670
+
671
+ if (is_array($options['cookies'])) {
672
+ $options['cookies'] = new Jar($options['cookies']);
673
+ }
674
+ elseif (empty($options['cookies'])) {
675
+ $options['cookies'] = new Jar();
676
+ }
677
+ if ($options['cookies'] !== false) {
678
+ $options['cookies']->register($options['hooks']);
679
+ }
680
+
681
+ if ($options['idn'] !== false) {
682
+ $iri = new Iri($url);
683
+ $iri->host = IdnaEncoder::encode($iri->ihost);
684
+ $url = $iri->uri;
685
+ }
686
+
687
+ // Massage the type to ensure we support it.
688
+ $type = strtoupper($type);
689
+
690
+ if (!isset($options['data_format'])) {
691
+ if (in_array($type, [self::HEAD, self::GET, self::DELETE], true)) {
692
+ $options['data_format'] = 'query';
693
+ }
694
+ else {
695
+ $options['data_format'] = 'body';
696
+ }
697
+ }
698
+ }
699
+
700
+ /**
701
+ * HTTP response parser
702
+ *
703
+ * @param string $headers Full response text including headers and body
704
+ * @param string $url Original request URL
705
+ * @param array $req_headers Original $headers array passed to {@link request()}, in case we need to follow redirects
706
+ * @param array $req_data Original $data array passed to {@link request()}, in case we need to follow redirects
707
+ * @param array $options Original $options array passed to {@link request()}, in case we need to follow redirects
708
+ * @return \WpOrg\Requests\Response
709
+ *
710
+ * @throws \WpOrg\Requests\Exception On missing head/body separator (`requests.no_crlf_separator`)
711
+ * @throws \WpOrg\Requests\Exception On missing head/body separator (`noversion`)
712
+ * @throws \WpOrg\Requests\Exception On missing head/body separator (`toomanyredirects`)
713
+ */
714
+ protected static function parse_response($headers, $url, $req_headers, $req_data, $options) {
715
+ $return = new Response();
716
+ if (!$options['blocking']) {
717
+ return $return;
718
+ }
719
+
720
+ $return->raw = $headers;
721
+ $return->url = (string) $url;
722
+ $return->body = '';
723
+
724
+ if (!$options['filename']) {
725
+ $pos = strpos($headers, "\r\n\r\n");
726
+ if ($pos === false) {
727
+ // Crap!
728
+ throw new Exception('Missing header/body separator', 'requests.no_crlf_separator');
729
+ }
730
+
731
+ $headers = substr($return->raw, 0, $pos);
732
+ // Headers will always be separated from the body by two new lines - `\n\r\n\r`.
733
+ $body = substr($return->raw, $pos + 4);
734
+ if (!empty($body)) {
735
+ $return->body = $body;
736
+ }
737
+ }
738
+ // Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
739
+ $headers = str_replace("\r\n", "\n", $headers);
740
+ // Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2)
741
+ $headers = preg_replace('/\n[ \t]/', ' ', $headers);
742
+ $headers = explode("\n", $headers);
743
+ preg_match('#^HTTP/(1\.\d)[ \t]+(\d+)#i', array_shift($headers), $matches);
744
+ if (empty($matches)) {
745
+ throw new Exception('Response could not be parsed', 'noversion', $headers);
746
+ }
747
+ $return->protocol_version = (float) $matches[1];
748
+ $return->status_code = (int) $matches[2];
749
+ if ($return->status_code >= 200 && $return->status_code < 300) {
750
+ $return->success = true;
751
+ }
752
+
753
+ foreach ($headers as $header) {
754
+ list($key, $value) = explode(':', $header, 2);
755
+ $value = trim($value);
756
+ preg_replace('#(\s+)#i', ' ', $value);
757
+ $return->headers[$key] = $value;
758
+ }
759
+ if (isset($return->headers['transfer-encoding'])) {
760
+ $return->body = self::decode_chunked($return->body);
761
+ unset($return->headers['transfer-encoding']);
762
+ }
763
+ if (isset($return->headers['content-encoding'])) {
764
+ $return->body = self::decompress($return->body);
765
+ }
766
+
767
+ //fsockopen and cURL compatibility
768
+ if (isset($return->headers['connection'])) {
769
+ unset($return->headers['connection']);
770
+ }
771
+
772
+ $options['hooks']->dispatch('requests.before_redirect_check', [&$return, $req_headers, $req_data, $options]);
773
+
774
+ if ($return->is_redirect() && $options['follow_redirects'] === true) {
775
+ if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) {
776
+ if ($return->status_code === 303) {
777
+ $options['type'] = self::GET;
778
+ }
779
+ $options['redirected']++;
780
+ $location = $return->headers['location'];
781
+ if (strpos($location, 'http://') !== 0 && strpos($location, 'https://') !== 0) {
782
+ // relative redirect, for compatibility make it absolute
783
+ $location = Iri::absolutize($url, $location);
784
+ $location = $location->uri;
785
+ }
786
+
787
+ $hook_args = [
788
+ &$location,
789
+ &$req_headers,
790
+ &$req_data,
791
+ &$options,
792
+ $return,
793
+ ];
794
+ $options['hooks']->dispatch('requests.before_redirect', $hook_args);
795
+ $redirected = self::request($location, $req_headers, $req_data, $options['type'], $options);
796
+ $redirected->history[] = $return;
797
+ return $redirected;
798
+ }
799
+ elseif ($options['redirected'] >= $options['redirects']) {
800
+ throw new Exception('Too many redirects', 'toomanyredirects', $return);
801
+ }
802
+ }
803
+
804
+ $return->redirects = $options['redirected'];
805
+
806
+ $options['hooks']->dispatch('requests.after_request', [&$return, $req_headers, $req_data, $options]);
807
+ return $return;
808
+ }
809
+
810
+ /**
811
+ * Callback for `transport.internal.parse_response`
812
+ *
813
+ * Internal use only. Converts a raw HTTP response to a \WpOrg\Requests\Response
814
+ * while still executing a multiple request.
815
+ *
816
+ * @param string $response Full response text including headers and body (will be overwritten with Response instance)
817
+ * @param array $request Request data as passed into {@see \WpOrg\Requests\Requests::request_multiple()}
818
+ * @return void `$response` is either set to a \WpOrg\Requests\Response instance, or a \WpOrg\Requests\Exception object
819
+ */
820
+ public static function parse_multiple(&$response, $request) {
821
+ try {
822
+ $url = $request['url'];
823
+ $headers = $request['headers'];
824
+ $data = $request['data'];
825
+ $options = $request['options'];
826
+ $response = self::parse_response($response, $url, $headers, $data, $options);
827
+ }
828
+ catch (Exception $e) {
829
+ $response = $e;
830
+ }
831
+ }
832
+
833
+ /**
834
+ * Decoded a chunked body as per RFC 2616
835
+ *
836
+ * @link https://tools.ietf.org/html/rfc2616#section-3.6.1
837
+ * @param string $data Chunked body
838
+ * @return string Decoded body
839
+ */
840
+ protected static function decode_chunked($data) {
841
+ if (!preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', trim($data))) {
842
+ return $data;
843
+ }
844
+
845
+ $decoded = '';
846
+ $encoded = $data;
847
+
848
+ while (true) {
849
+ $is_chunked = (bool) preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', $encoded, $matches);
850
+ if (!$is_chunked) {
851
+ // Looks like it's not chunked after all
852
+ return $data;
853
+ }
854
+
855
+ $length = hexdec(trim($matches[1]));
856
+ if ($length === 0) {
857
+ // Ignore trailer headers
858
+ return $decoded;
859
+ }
860
+
861
+ $chunk_length = strlen($matches[0]);
862
+ $decoded .= substr($encoded, $chunk_length, $length);
863
+ $encoded = substr($encoded, $chunk_length + $length + 2);
864
+
865
+ if (trim($encoded) === '0' || empty($encoded)) {
866
+ return $decoded;
867
+ }
868
+ }
869
+
870
+ // We'll never actually get down here
871
+ // @codeCoverageIgnoreStart
872
+ }
873
+ // @codeCoverageIgnoreEnd
874
+
875
+ /**
876
+ * Convert a key => value array to a 'key: value' array for headers
877
+ *
878
+ * @param iterable $dictionary Dictionary of header values
879
+ * @return array List of headers
880
+ *
881
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not iterable.
882
+ */
883
+ public static function flatten($dictionary) {
884
+ if (InputValidator::is_iterable($dictionary) === false) {
885
+ throw InvalidArgument::create(1, '$dictionary', 'iterable', gettype($dictionary));
886
+ }
887
+
888
+ $return = [];
889
+ foreach ($dictionary as $key => $value) {
890
+ $return[] = sprintf('%s: %s', $key, $value);
891
+ }
892
+ return $return;
893
+ }
894
+
895
+ /**
896
+ * Decompress an encoded body
897
+ *
898
+ * Implements gzip, compress and deflate. Guesses which it is by attempting
899
+ * to decode.
900
+ *
901
+ * @param string $data Compressed data in one of the above formats
902
+ * @return string Decompressed string
903
+ *
904
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string.
905
+ */
906
+ public static function decompress($data) {
907
+ if (is_string($data) === false) {
908
+ throw InvalidArgument::create(1, '$data', 'string', gettype($data));
909
+ }
910
+
911
+ if (trim($data) === '') {
912
+ // Empty body does not need further processing.
913
+ return $data;
914
+ }
915
+
916
+ $marker = substr($data, 0, 2);
917
+ if (!isset(self::$magic_compression_headers[$marker])) {
918
+ // Not actually compressed. Probably cURL ruining this for us.
919
+ return $data;
920
+ }
921
+
922
+ if (function_exists('gzdecode')) {
923
+ $decoded = @gzdecode($data);
924
+ if ($decoded !== false) {
925
+ return $decoded;
926
+ }
927
+ }
928
+
929
+ if (function_exists('gzinflate')) {
930
+ $decoded = @gzinflate($data);
931
+ if ($decoded !== false) {
932
+ return $decoded;
933
+ }
934
+ }
935
+
936
+ $decoded = self::compatible_gzinflate($data);
937
+ if ($decoded !== false) {
938
+ return $decoded;
939
+ }
940
+
941
+ if (function_exists('gzuncompress')) {
942
+ $decoded = @gzuncompress($data);
943
+ if ($decoded !== false) {
944
+ return $decoded;
945
+ }
946
+ }
947
+
948
+ return $data;
949
+ }
950
+
951
+ /**
952
+ * Decompression of deflated string while staying compatible with the majority of servers.
953
+ *
954
+ * Certain Servers will return deflated data with headers which PHP's gzinflate()
955
+ * function cannot handle out of the box. The following function has been created from
956
+ * various snippets on the gzinflate() PHP documentation.
957
+ *
958
+ * Warning: Magic numbers within. Due to the potential different formats that the compressed
959
+ * data may be returned in, some "magic offsets" are needed to ensure proper decompression
960
+ * takes place. For a simple progmatic way to determine the magic offset in use, see:
961
+ * https://core.trac.wordpress.org/ticket/18273
962
+ *
963
+ * @since 1.6.0
964
+ * @link https://core.trac.wordpress.org/ticket/18273
965
+ * @link https://www.php.net/gzinflate#70875
966
+ * @link https://www.php.net/gzinflate#77336
967
+ *
968
+ * @param string $gz_data String to decompress.
969
+ * @return string|bool False on failure.
970
+ *
971
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string.
972
+ */
973
+ public static function compatible_gzinflate($gz_data) {
974
+ if (is_string($gz_data) === false) {
975
+ throw InvalidArgument::create(1, '$gz_data', 'string', gettype($gz_data));
976
+ }
977
+
978
+ if (trim($gz_data) === '') {
979
+ return false;
980
+ }
981
+
982
+ // Compressed data might contain a full zlib header, if so strip it for
983
+ // gzinflate()
984
+ if (substr($gz_data, 0, 3) === "\x1f\x8b\x08") {
985
+ $i = 10;
986
+ $flg = ord(substr($gz_data, 3, 1));
987
+ if ($flg > 0) {
988
+ if ($flg & 4) {
989
+ list($xlen) = unpack('v', substr($gz_data, $i, 2));
990
+ $i += 2 + $xlen;
991
+ }
992
+ if ($flg & 8) {
993
+ $i = strpos($gz_data, "\0", $i) + 1;
994
+ }
995
+ if ($flg & 16) {
996
+ $i = strpos($gz_data, "\0", $i) + 1;
997
+ }
998
+ if ($flg & 2) {
999
+ $i += 2;
1000
+ }
1001
+ }
1002
+ $decompressed = self::compatible_gzinflate(substr($gz_data, $i));
1003
+ if ($decompressed !== false) {
1004
+ return $decompressed;
1005
+ }
1006
+ }
1007
+
1008
+ // If the data is Huffman Encoded, we must first strip the leading 2
1009
+ // byte Huffman marker for gzinflate()
1010
+ // The response is Huffman coded by many compressors such as
1011
+ // java.util.zip.Deflater, Ruby's Zlib::Deflate, and .NET's
1012
+ // System.IO.Compression.DeflateStream.
1013
+ //
1014
+ // See https://decompres.blogspot.com/ for a quick explanation of this
1015
+ // data type
1016
+ $huffman_encoded = false;
1017
+
1018
+ // low nibble of first byte should be 0x08
1019
+ list(, $first_nibble) = unpack('h', $gz_data);
1020
+
1021
+ // First 2 bytes should be divisible by 0x1F
1022
+ list(, $first_two_bytes) = unpack('n', $gz_data);
1023
+
1024
+ if ($first_nibble === 0x08 && ($first_two_bytes % 0x1F) === 0) {
1025
+ $huffman_encoded = true;
1026
+ }
1027
+
1028
+ if ($huffman_encoded) {
1029
+ $decompressed = @gzinflate(substr($gz_data, 2));
1030
+ if ($decompressed !== false) {
1031
+ return $decompressed;
1032
+ }
1033
+ }
1034
+
1035
+ if (substr($gz_data, 0, 4) === "\x50\x4b\x03\x04") {
1036
+ // ZIP file format header
1037
+ // Offset 6: 2 bytes, General-purpose field
1038
+ // Offset 26: 2 bytes, filename length
1039
+ // Offset 28: 2 bytes, optional field length
1040
+ // Offset 30: Filename field, followed by optional field, followed
1041
+ // immediately by data
1042
+ list(, $general_purpose_flag) = unpack('v', substr($gz_data, 6, 2));
1043
+
1044
+ // If the file has been compressed on the fly, 0x08 bit is set of
1045
+ // the general purpose field. We can use this to differentiate
1046
+ // between a compressed document, and a ZIP file
1047
+ $zip_compressed_on_the_fly = ((0x08 & $general_purpose_flag) === 0x08);
1048
+
1049
+ if (!$zip_compressed_on_the_fly) {
1050
+ // Don't attempt to decode a compressed zip file
1051
+ return $gz_data;
1052
+ }
1053
+
1054
+ // Determine the first byte of data, based on the above ZIP header
1055
+ // offsets:
1056
+ $first_file_start = array_sum(unpack('v2', substr($gz_data, 26, 4)));
1057
+ $decompressed = @gzinflate(substr($gz_data, 30 + $first_file_start));
1058
+ if ($decompressed !== false) {
1059
+ return $decompressed;
1060
+ }
1061
+ return false;
1062
+ }
1063
+
1064
+ // Finally fall back to straight gzinflate
1065
+ $decompressed = @gzinflate($gz_data);
1066
+ if ($decompressed !== false) {
1067
+ return $decompressed;
1068
+ }
1069
+
1070
+ // Fallback for all above failing, not expected, but included for
1071
+ // debugging and preventing regressions and to track stats
1072
+ $decompressed = @gzinflate(substr($gz_data, 2));
1073
+ if ($decompressed !== false) {
1074
+ return $decompressed;
1075
+ }
1076
+
1077
+ return false;
1078
+ }
1079
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Response.php ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * HTTP response class
4
+ *
5
+ * Contains a response from \WpOrg\Requests\Requests::request()
6
+ *
7
+ * @package Requests
8
+ */
9
+
10
+ namespace WpOrg\Requests;
11
+
12
+ use WpOrg\Requests\Cookie\Jar;
13
+ use WpOrg\Requests\Exception;
14
+ use WpOrg\Requests\Exception\Http;
15
+ use WpOrg\Requests\Response\Headers;
16
+
17
+ /**
18
+ * HTTP response class
19
+ *
20
+ * Contains a response from \WpOrg\Requests\Requests::request()
21
+ *
22
+ * @package Requests
23
+ */
24
+ class Response {
25
+
26
+ /**
27
+ * Response body
28
+ *
29
+ * @var string
30
+ */
31
+ public $body = '';
32
+
33
+ /**
34
+ * Raw HTTP data from the transport
35
+ *
36
+ * @var string
37
+ */
38
+ public $raw = '';
39
+
40
+ /**
41
+ * Headers, as an associative array
42
+ *
43
+ * @var \WpOrg\Requests\Response\Headers Array-like object representing headers
44
+ */
45
+ public $headers = [];
46
+
47
+ /**
48
+ * Status code, false if non-blocking
49
+ *
50
+ * @var integer|boolean
51
+ */
52
+ public $status_code = false;
53
+
54
+ /**
55
+ * Protocol version, false if non-blocking
56
+ *
57
+ * @var float|boolean
58
+ */
59
+ public $protocol_version = false;
60
+
61
+ /**
62
+ * Whether the request succeeded or not
63
+ *
64
+ * @var boolean
65
+ */
66
+ public $success = false;
67
+
68
+ /**
69
+ * Number of redirects the request used
70
+ *
71
+ * @var integer
72
+ */
73
+ public $redirects = 0;
74
+
75
+ /**
76
+ * URL requested
77
+ *
78
+ * @var string
79
+ */
80
+ public $url = '';
81
+
82
+ /**
83
+ * Previous requests (from redirects)
84
+ *
85
+ * @var array Array of \WpOrg\Requests\Response objects
86
+ */
87
+ public $history = [];
88
+
89
+ /**
90
+ * Cookies from the request
91
+ *
92
+ * @var \WpOrg\Requests\Cookie\Jar Array-like object representing a cookie jar
93
+ */
94
+ public $cookies = [];
95
+
96
+ /**
97
+ * Constructor
98
+ */
99
+ public function __construct() {
100
+ $this->headers = new Headers();
101
+ $this->cookies = new Jar();
102
+ }
103
+
104
+ /**
105
+ * Is the response a redirect?
106
+ *
107
+ * @return boolean True if redirect (3xx status), false if not.
108
+ */
109
+ public function is_redirect() {
110
+ $code = $this->status_code;
111
+ return in_array($code, [300, 301, 302, 303, 307], true) || $code > 307 && $code < 400;
112
+ }
113
+
114
+ /**
115
+ * Throws an exception if the request was not successful
116
+ *
117
+ * @param boolean $allow_redirects Set to false to throw on a 3xx as well
118
+ *
119
+ * @throws \WpOrg\Requests\Exception If `$allow_redirects` is false, and code is 3xx (`response.no_redirects`)
120
+ * @throws \WpOrg\Requests\Exception\Http On non-successful status code. Exception class corresponds to "Status" + code (e.g. {@see \WpOrg\Requests\Exception\Http\Status404})
121
+ */
122
+ public function throw_for_status($allow_redirects = true) {
123
+ if ($this->is_redirect()) {
124
+ if ($allow_redirects !== true) {
125
+ throw new Exception('Redirection not allowed', 'response.no_redirects', $this);
126
+ }
127
+ }
128
+ elseif (!$this->success) {
129
+ $exception = Http::get_class($this->status_code);
130
+ throw new $exception(null, $this);
131
+ }
132
+ }
133
+
134
+ /**
135
+ * JSON decode the response body.
136
+ *
137
+ * The method parameters are the same as those for the PHP native `json_decode()` function.
138
+ *
139
+ * @link https://php.net/json-decode
140
+ *
141
+ * @param ?bool $associative Optional. When `true`, JSON objects will be returned as associative arrays;
142
+ * When `false`, JSON objects will be returned as objects.
143
+ * When `null`, JSON objects will be returned as associative arrays
144
+ * or objects depending on whether `JSON_OBJECT_AS_ARRAY` is set in the flags.
145
+ * Defaults to `true` (in contrast to the PHP native default of `null`).
146
+ * @param int $depth Optional. Maximum nesting depth of the structure being decoded.
147
+ * Defaults to `512`.
148
+ * @param int $options Optional. Bitmask of JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE,
149
+ * JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR.
150
+ * Defaults to `0` (no options set).
151
+ *
152
+ * @return array
153
+ *
154
+ * @throws \WpOrg\Requests\Exception If `$this->body` is not valid json.
155
+ */
156
+ public function decode_body($associative = true, $depth = 512, $options = 0) {
157
+ $data = json_decode($this->body, $associative, $depth, $options);
158
+
159
+ if (json_last_error() !== JSON_ERROR_NONE) {
160
+ $last_error = json_last_error_msg();
161
+ throw new Exception('Unable to parse JSON data: ' . $last_error, 'response.invalid', $this);
162
+ }
163
+
164
+ return $data;
165
+ }
166
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Response/Headers.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Case-insensitive dictionary, suitable for HTTP headers
4
+ *
5
+ * @package Requests
6
+ */
7
+
8
+ namespace WpOrg\Requests\Response;
9
+
10
+ use WpOrg\Requests\Exception;
11
+ use WpOrg\Requests\Exception\InvalidArgument;
12
+ use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
13
+ use WpOrg\Requests\Utility\FilteredIterator;
14
+
15
+ /**
16
+ * Case-insensitive dictionary, suitable for HTTP headers
17
+ *
18
+ * @package Requests
19
+ */
20
+ class Headers extends CaseInsensitiveDictionary {
21
+ /**
22
+ * Get the given header
23
+ *
24
+ * Unlike {@see \WpOrg\Requests\Response\Headers::getValues()}, this returns a string. If there are
25
+ * multiple values, it concatenates them with a comma as per RFC2616.
26
+ *
27
+ * Avoid using this where commas may be used unquoted in values, such as
28
+ * Set-Cookie headers.
29
+ *
30
+ * @param string $offset
31
+ * @return string|null Header value
32
+ */
33
+ public function offsetGet($offset) {
34
+ if (is_string($offset)) {
35
+ $offset = strtolower($offset);
36
+ }
37
+
38
+ if (!isset($this->data[$offset])) {
39
+ return null;
40
+ }
41
+
42
+ return $this->flatten($this->data[$offset]);
43
+ }
44
+
45
+ /**
46
+ * Set the given item
47
+ *
48
+ * @param string $offset Item name
49
+ * @param string $value Item value
50
+ *
51
+ * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
52
+ */
53
+ public function offsetSet($offset, $value) {
54
+ if ($offset === null) {
55
+ throw new Exception('Object is a dictionary, not a list', 'invalidset');
56
+ }
57
+
58
+ if (is_string($offset)) {
59
+ $offset = strtolower($offset);
60
+ }
61
+
62
+ if (!isset($this->data[$offset])) {
63
+ $this->data[$offset] = [];
64
+ }
65
+
66
+ $this->data[$offset][] = $value;
67
+ }
68
+
69
+ /**
70
+ * Get all values for a given header
71
+ *
72
+ * @param string $offset
73
+ * @return array|null Header values
74
+ *
75
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not valid as an array key.
76
+ */
77
+ public function getValues($offset) {
78
+ if (!is_string($offset) && !is_int($offset)) {
79
+ throw InvalidArgument::create(1, '$offset', 'string|int', gettype($offset));
80
+ }
81
+
82
+ $offset = strtolower($offset);
83
+ if (!isset($this->data[$offset])) {
84
+ return null;
85
+ }
86
+
87
+ return $this->data[$offset];
88
+ }
89
+
90
+ /**
91
+ * Flattens a value into a string
92
+ *
93
+ * Converts an array into a string by imploding values with a comma, as per
94
+ * RFC2616's rules for folding headers.
95
+ *
96
+ * @param string|array $value Value to flatten
97
+ * @return string Flattened value
98
+ *
99
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or an array.
100
+ */
101
+ public function flatten($value) {
102
+ if (is_string($value)) {
103
+ return $value;
104
+ }
105
+
106
+ if (is_array($value)) {
107
+ return implode(',', $value);
108
+ }
109
+
110
+ throw InvalidArgument::create(1, '$value', 'string|array', gettype($value));
111
+ }
112
+
113
+ /**
114
+ * Get an iterator for the data
115
+ *
116
+ * Converts the internally stored values to a comma-separated string if there is more
117
+ * than one value for a key.
118
+ *
119
+ * @return \ArrayIterator
120
+ */
121
+ public function getIterator() {
122
+ return new FilteredIterator($this->data, [$this, 'flatten']);
123
+ }
124
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Session.php ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Session handler for persistent requests and default parameters
4
+ *
5
+ * @package Requests\SessionHandler
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use WpOrg\Requests\Cookie\Jar;
11
+ use WpOrg\Requests\Exception\InvalidArgument;
12
+ use WpOrg\Requests\Iri;
13
+ use WpOrg\Requests\Requests;
14
+ use WpOrg\Requests\Utility\InputValidator;
15
+
16
+ /**
17
+ * Session handler for persistent requests and default parameters
18
+ *
19
+ * Allows various options to be set as default values, and merges both the
20
+ * options and URL properties together. A base URL can be set for all requests,
21
+ * with all subrequests resolved from this. Base options can be set (including
22
+ * a shared cookie jar), then overridden for individual requests.
23
+ *
24
+ * @package Requests\SessionHandler
25
+ */
26
+ class Session {
27
+ /**
28
+ * Base URL for requests
29
+ *
30
+ * URLs will be made absolute using this as the base
31
+ *
32
+ * @var string|null
33
+ */
34
+ public $url = null;
35
+
36
+ /**
37
+ * Base headers for requests
38
+ *
39
+ * @var array
40
+ */
41
+ public $headers = [];
42
+
43
+ /**
44
+ * Base data for requests
45
+ *
46
+ * If both the base data and the per-request data are arrays, the data will
47
+ * be merged before sending the request.
48
+ *
49
+ * @var array
50
+ */
51
+ public $data = [];
52
+
53
+ /**
54
+ * Base options for requests
55
+ *
56
+ * The base options are merged with the per-request data for each request.
57
+ * The only default option is a shared cookie jar between requests.
58
+ *
59
+ * Values here can also be set directly via properties on the Session
60
+ * object, e.g. `$session->useragent = 'X';`
61
+ *
62
+ * @var array
63
+ */
64
+ public $options = [];
65
+
66
+ /**
67
+ * Create a new session
68
+ *
69
+ * @param string|Stringable|null $url Base URL for requests
70
+ * @param array $headers Default headers for requests
71
+ * @param array $data Default data for requests
72
+ * @param array $options Default options for requests
73
+ *
74
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string, Stringable or null.
75
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $headers argument is not an array.
76
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data argument is not an array.
77
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
78
+ */
79
+ public function __construct($url = null, $headers = [], $data = [], $options = []) {
80
+ if ($url !== null && InputValidator::is_string_or_stringable($url) === false) {
81
+ throw InvalidArgument::create(1, '$url', 'string|Stringable|null', gettype($url));
82
+ }
83
+
84
+ if (is_array($headers) === false) {
85
+ throw InvalidArgument::create(2, '$headers', 'array', gettype($headers));
86
+ }
87
+
88
+ if (is_array($data) === false) {
89
+ throw InvalidArgument::create(3, '$data', 'array', gettype($data));
90
+ }
91
+
92
+ if (is_array($options) === false) {
93
+ throw InvalidArgument::create(4, '$options', 'array', gettype($options));
94
+ }
95
+
96
+ $this->url = $url;
97
+ $this->headers = $headers;
98
+ $this->data = $data;
99
+ $this->options = $options;
100
+
101
+ if (empty($this->options['cookies'])) {
102
+ $this->options['cookies'] = new Jar();
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Get a property's value
108
+ *
109
+ * @param string $name Property name.
110
+ * @return mixed|null Property value, null if none found
111
+ */
112
+ public function __get($name) {
113
+ if (isset($this->options[$name])) {
114
+ return $this->options[$name];
115
+ }
116
+
117
+ return null;
118
+ }
119
+
120
+ /**
121
+ * Set a property's value
122
+ *
123
+ * @param string $name Property name.
124
+ * @param mixed $value Property value
125
+ */
126
+ public function __set($name, $value) {
127
+ $this->options[$name] = $value;
128
+ }
129
+
130
+ /**
131
+ * Remove a property's value
132
+ *
133
+ * @param string $name Property name.
134
+ */
135
+ public function __isset($name) {
136
+ return isset($this->options[$name]);
137
+ }
138
+
139
+ /**
140
+ * Remove a property's value
141
+ *
142
+ * @param string $name Property name.
143
+ */
144
+ public function __unset($name) {
145
+ unset($this->options[$name]);
146
+ }
147
+
148
+ /**#@+
149
+ * @see \WpOrg\Requests\Session::request()
150
+ * @param string $url
151
+ * @param array $headers
152
+ * @param array $options
153
+ * @return \WpOrg\Requests\Response
154
+ */
155
+ /**
156
+ * Send a GET request
157
+ */
158
+ public function get($url, $headers = [], $options = []) {
159
+ return $this->request($url, $headers, null, Requests::GET, $options);
160
+ }
161
+
162
+ /**
163
+ * Send a HEAD request
164
+ */
165
+ public function head($url, $headers = [], $options = []) {
166
+ return $this->request($url, $headers, null, Requests::HEAD, $options);
167
+ }
168
+
169
+ /**
170
+ * Send a DELETE request
171
+ */
172
+ public function delete($url, $headers = [], $options = []) {
173
+ return $this->request($url, $headers, null, Requests::DELETE, $options);
174
+ }
175
+ /**#@-*/
176
+
177
+ /**#@+
178
+ * @see \WpOrg\Requests\Session::request()
179
+ * @param string $url
180
+ * @param array $headers
181
+ * @param array $data
182
+ * @param array $options
183
+ * @return \WpOrg\Requests\Response
184
+ */
185
+ /**
186
+ * Send a POST request
187
+ */
188
+ public function post($url, $headers = [], $data = [], $options = []) {
189
+ return $this->request($url, $headers, $data, Requests::POST, $options);
190
+ }
191
+
192
+ /**
193
+ * Send a PUT request
194
+ */
195
+ public function put($url, $headers = [], $data = [], $options = []) {
196
+ return $this->request($url, $headers, $data, Requests::PUT, $options);
197
+ }
198
+
199
+ /**
200
+ * Send a PATCH request
201
+ *
202
+ * Note: Unlike {@see \WpOrg\Requests\Session::post()} and {@see \WpOrg\Requests\Session::put()},
203
+ * `$headers` is required, as the specification recommends that should send an ETag
204
+ *
205
+ * @link https://tools.ietf.org/html/rfc5789
206
+ */
207
+ public function patch($url, $headers, $data = [], $options = []) {
208
+ return $this->request($url, $headers, $data, Requests::PATCH, $options);
209
+ }
210
+ /**#@-*/
211
+
212
+ /**
213
+ * Main interface for HTTP requests
214
+ *
215
+ * This method initiates a request and sends it via a transport before
216
+ * parsing.
217
+ *
218
+ * @see \WpOrg\Requests\Requests::request()
219
+ *
220
+ * @param string $url URL to request
221
+ * @param array $headers Extra headers to send with the request
222
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
223
+ * @param string $type HTTP request type (use \WpOrg\Requests\Requests constants)
224
+ * @param array $options Options for the request (see {@see \WpOrg\Requests\Requests::request()})
225
+ * @return \WpOrg\Requests\Response
226
+ *
227
+ * @throws \WpOrg\Requests\Exception On invalid URLs (`nonhttp`)
228
+ */
229
+ public function request($url, $headers = [], $data = [], $type = Requests::GET, $options = []) {
230
+ $request = $this->merge_request(compact('url', 'headers', 'data', 'options'));
231
+
232
+ return Requests::request($request['url'], $request['headers'], $request['data'], $type, $request['options']);
233
+ }
234
+
235
+ /**
236
+ * Send multiple HTTP requests simultaneously
237
+ *
238
+ * @see \WpOrg\Requests\Requests::request_multiple()
239
+ *
240
+ * @param array $requests Requests data (see {@see \WpOrg\Requests\Requests::request_multiple()})
241
+ * @param array $options Global and default options (see {@see \WpOrg\Requests\Requests::request()})
242
+ * @return array Responses (either \WpOrg\Requests\Response or a \WpOrg\Requests\Exception object)
243
+ *
244
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
245
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
246
+ */
247
+ public function request_multiple($requests, $options = []) {
248
+ if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
249
+ throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
250
+ }
251
+
252
+ if (is_array($options) === false) {
253
+ throw InvalidArgument::create(2, '$options', 'array', gettype($options));
254
+ }
255
+
256
+ foreach ($requests as $key => $request) {
257
+ $requests[$key] = $this->merge_request($request, false);
258
+ }
259
+
260
+ $options = array_merge($this->options, $options);
261
+
262
+ // Disallow forcing the type, as that's a per request setting
263
+ unset($options['type']);
264
+
265
+ return Requests::request_multiple($requests, $options);
266
+ }
267
+
268
+ /**
269
+ * Merge a request's data with the default data
270
+ *
271
+ * @param array $request Request data (same form as {@see \WpOrg\Requests\Session::request_multiple()})
272
+ * @param boolean $merge_options Should we merge options as well?
273
+ * @return array Request data
274
+ */
275
+ protected function merge_request($request, $merge_options = true) {
276
+ if ($this->url !== null) {
277
+ $request['url'] = Iri::absolutize($this->url, $request['url']);
278
+ $request['url'] = $request['url']->uri;
279
+ }
280
+
281
+ if (empty($request['headers'])) {
282
+ $request['headers'] = [];
283
+ }
284
+ $request['headers'] = array_merge($this->headers, $request['headers']);
285
+
286
+ if (empty($request['data'])) {
287
+ if (is_array($this->data)) {
288
+ $request['data'] = $this->data;
289
+ }
290
+ }
291
+ elseif (is_array($request['data']) && is_array($this->data)) {
292
+ $request['data'] = array_merge($this->data, $request['data']);
293
+ }
294
+
295
+ if ($merge_options === true) {
296
+ $request['options'] = array_merge($this->options, $request['options']);
297
+
298
+ // Disallow forcing the type, as that's a per request setting
299
+ unset($request['options']['type']);
300
+ }
301
+
302
+ return $request;
303
+ }
304
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Ssl.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * SSL utilities for Requests
4
+ *
5
+ * @package Requests\Utilities
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ use WpOrg\Requests\Exception\InvalidArgument;
11
+ use WpOrg\Requests\Utility\InputValidator;
12
+
13
+ /**
14
+ * SSL utilities for Requests
15
+ *
16
+ * Collection of utilities for working with and verifying SSL certificates.
17
+ *
18
+ * @package Requests\Utilities
19
+ */
20
+ final class Ssl {
21
+ /**
22
+ * Verify the certificate against common name and subject alternative names
23
+ *
24
+ * Unfortunately, PHP doesn't check the certificate against the alternative
25
+ * names, leading things like 'https://www.github.com/' to be invalid.
26
+ *
27
+ * @link https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
28
+ *
29
+ * @param string|Stringable $host Host name to verify against
30
+ * @param array $cert Certificate data from openssl_x509_parse()
31
+ * @return bool
32
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $host argument is not a string or a stringable object.
33
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $cert argument is not an array or array accessible.
34
+ */
35
+ public static function verify_certificate($host, $cert) {
36
+ if (InputValidator::is_string_or_stringable($host) === false) {
37
+ throw InvalidArgument::create(1, '$host', 'string|Stringable', gettype($host));
38
+ }
39
+
40
+ if (InputValidator::has_array_access($cert) === false) {
41
+ throw InvalidArgument::create(2, '$cert', 'array|ArrayAccess', gettype($cert));
42
+ }
43
+
44
+ $has_dns_alt = false;
45
+
46
+ // Check the subjectAltName
47
+ if (!empty($cert['extensions']['subjectAltName'])) {
48
+ $altnames = explode(',', $cert['extensions']['subjectAltName']);
49
+ foreach ($altnames as $altname) {
50
+ $altname = trim($altname);
51
+ if (strpos($altname, 'DNS:') !== 0) {
52
+ continue;
53
+ }
54
+
55
+ $has_dns_alt = true;
56
+
57
+ // Strip the 'DNS:' prefix and trim whitespace
58
+ $altname = trim(substr($altname, 4));
59
+
60
+ // Check for a match
61
+ if (self::match_domain($host, $altname) === true) {
62
+ return true;
63
+ }
64
+ }
65
+
66
+ if ($has_dns_alt === true) {
67
+ return false;
68
+ }
69
+ }
70
+
71
+ // Fall back to checking the common name if we didn't get any dNSName
72
+ // alt names, as per RFC2818
73
+ if (!empty($cert['subject']['CN'])) {
74
+ // Check for a match
75
+ return (self::match_domain($host, $cert['subject']['CN']) === true);
76
+ }
77
+
78
+ return false;
79
+ }
80
+
81
+ /**
82
+ * Verify that a reference name is valid
83
+ *
84
+ * Verifies a dNSName for HTTPS usage, (almost) as per Firefox's rules:
85
+ * - Wildcards can only occur in a name with more than 3 components
86
+ * - Wildcards can only occur as the last character in the first
87
+ * component
88
+ * - Wildcards may be preceded by additional characters
89
+ *
90
+ * We modify these rules to be a bit stricter and only allow the wildcard
91
+ * character to be the full first component; that is, with the exclusion of
92
+ * the third rule.
93
+ *
94
+ * @param string|Stringable $reference Reference dNSName
95
+ * @return boolean Is the name valid?
96
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or a stringable object.
97
+ */
98
+ public static function verify_reference_name($reference) {
99
+ if (InputValidator::is_string_or_stringable($reference) === false) {
100
+ throw InvalidArgument::create(1, '$reference', 'string|Stringable', gettype($reference));
101
+ }
102
+
103
+ if ($reference === '') {
104
+ return false;
105
+ }
106
+
107
+ if (preg_match('`\s`', $reference) > 0) {
108
+ // Whitespace detected. This can never be a dNSName.
109
+ return false;
110
+ }
111
+
112
+ $parts = explode('.', $reference);
113
+ if ($parts !== array_filter($parts)) {
114
+ // DNSName cannot contain two dots next to each other.
115
+ return false;
116
+ }
117
+
118
+ // Check the first part of the name
119
+ $first = array_shift($parts);
120
+
121
+ if (strpos($first, '*') !== false) {
122
+ // Check that the wildcard is the full part
123
+ if ($first !== '*') {
124
+ return false;
125
+ }
126
+
127
+ // Check that we have at least 3 components (including first)
128
+ if (count($parts) < 2) {
129
+ return false;
130
+ }
131
+ }
132
+
133
+ // Check the remaining parts
134
+ foreach ($parts as $part) {
135
+ if (strpos($part, '*') !== false) {
136
+ return false;
137
+ }
138
+ }
139
+
140
+ // Nothing found, verified!
141
+ return true;
142
+ }
143
+
144
+ /**
145
+ * Match a hostname against a dNSName reference
146
+ *
147
+ * @param string|Stringable $host Requested host
148
+ * @param string|Stringable $reference dNSName to match against
149
+ * @return boolean Does the domain match?
150
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When either of the passed arguments is not a string or a stringable object.
151
+ */
152
+ public static function match_domain($host, $reference) {
153
+ if (InputValidator::is_string_or_stringable($host) === false) {
154
+ throw InvalidArgument::create(1, '$host', 'string|Stringable', gettype($host));
155
+ }
156
+
157
+ // Check if the reference is blocklisted first
158
+ if (self::verify_reference_name($reference) !== true) {
159
+ return false;
160
+ }
161
+
162
+ // Check for a direct match
163
+ if ((string) $host === (string) $reference) {
164
+ return true;
165
+ }
166
+
167
+ // Calculate the valid wildcard match if the host is not an IP address
168
+ // Also validates that the host has 3 parts or more, as per Firefox's ruleset,
169
+ // as a wildcard reference is only allowed with 3 parts or more, so the
170
+ // comparison will never match if host doesn't contain 3 parts or more as well.
171
+ if (ip2long($host) === false) {
172
+ $parts = explode('.', $host);
173
+ $parts[0] = '*';
174
+ $wildcard = implode('.', $parts);
175
+ if ($wildcard === (string) $reference) {
176
+ return true;
177
+ }
178
+ }
179
+
180
+ return false;
181
+ }
182
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Transport.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Base HTTP transport
4
+ *
5
+ * @package Requests\Transport
6
+ */
7
+
8
+ namespace WpOrg\Requests;
9
+
10
+ /**
11
+ * Base HTTP transport
12
+ *
13
+ * @package Requests\Transport
14
+ */
15
+ interface Transport {
16
+ /**
17
+ * Perform a request
18
+ *
19
+ * @param string $url URL to request
20
+ * @param array $headers Associative array of request headers
21
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
22
+ * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
23
+ * @return string Raw HTTP result
24
+ */
25
+ public function request($url, $headers = [], $data = [], $options = []);
26
+
27
+ /**
28
+ * Send multiple requests simultaneously
29
+ *
30
+ * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see \WpOrg\Requests\Transport::request()}
31
+ * @param array $options Global options, see {@see \WpOrg\Requests\Requests::response()} for documentation
32
+ * @return array Array of \WpOrg\Requests\Response objects (may contain \WpOrg\Requests\Exception or string responses as well)
33
+ */
34
+ public function request_multiple($requests, $options);
35
+
36
+ /**
37
+ * Self-test whether the transport can be used.
38
+ *
39
+ * The available capabilities to test for can be found in {@see \WpOrg\Requests\Capability}.
40
+ *
41
+ * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
42
+ * @return bool Whether the transport can be used.
43
+ */
44
+ public static function test($capabilities = []);
45
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Transport/Curl.php ADDED
@@ -0,0 +1,641 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * cURL HTTP transport
4
+ *
5
+ * @package Requests\Transport
6
+ */
7
+
8
+ namespace WpOrg\Requests\Transport;
9
+
10
+ use RecursiveArrayIterator;
11
+ use RecursiveIteratorIterator;
12
+ use WpOrg\Requests\Capability;
13
+ use WpOrg\Requests\Exception;
14
+ use WpOrg\Requests\Exception\InvalidArgument;
15
+ use WpOrg\Requests\Exception\Transport\Curl as CurlException;
16
+ use WpOrg\Requests\Requests;
17
+ use WpOrg\Requests\Transport;
18
+ use WpOrg\Requests\Utility\InputValidator;
19
+
20
+ /**
21
+ * cURL HTTP transport
22
+ *
23
+ * @package Requests\Transport
24
+ */
25
+ final class Curl implements Transport {
26
+ const CURL_7_10_5 = 0x070A05;
27
+ const CURL_7_16_2 = 0x071002;
28
+
29
+ /**
30
+ * Raw HTTP data
31
+ *
32
+ * @var string
33
+ */
34
+ public $headers = '';
35
+
36
+ /**
37
+ * Raw body data
38
+ *
39
+ * @var string
40
+ */
41
+ public $response_data = '';
42
+
43
+ /**
44
+ * Information on the current request
45
+ *
46
+ * @var array cURL information array, see {@link https://www.php.net/curl_getinfo}
47
+ */
48
+ public $info;
49
+
50
+ /**
51
+ * cURL version number
52
+ *
53
+ * @var int
54
+ */
55
+ public $version;
56
+
57
+ /**
58
+ * cURL handle
59
+ *
60
+ * @var resource|\CurlHandle Resource in PHP < 8.0, Instance of CurlHandle in PHP >= 8.0.
61
+ */
62
+ private $handle;
63
+
64
+ /**
65
+ * Hook dispatcher instance
66
+ *
67
+ * @var \WpOrg\Requests\Hooks
68
+ */
69
+ private $hooks;
70
+
71
+ /**
72
+ * Have we finished the headers yet?
73
+ *
74
+ * @var boolean
75
+ */
76
+ private $done_headers = false;
77
+
78
+ /**
79
+ * If streaming to a file, keep the file pointer
80
+ *
81
+ * @var resource
82
+ */
83
+ private $stream_handle;
84
+
85
+ /**
86
+ * How many bytes are in the response body?
87
+ *
88
+ * @var int
89
+ */
90
+ private $response_bytes;
91
+
92
+ /**
93
+ * What's the maximum number of bytes we should keep?
94
+ *
95
+ * @var int|bool Byte count, or false if no limit.
96
+ */
97
+ private $response_byte_limit;
98
+
99
+ /**
100
+ * Constructor
101
+ */
102
+ public function __construct() {
103
+ $curl = curl_version();
104
+ $this->version = $curl['version_number'];
105
+ $this->handle = curl_init();
106
+
107
+ curl_setopt($this->handle, CURLOPT_HEADER, false);
108
+ curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1);
109
+ if ($this->version >= self::CURL_7_10_5) {
110
+ curl_setopt($this->handle, CURLOPT_ENCODING, '');
111
+ }
112
+ if (defined('CURLOPT_PROTOCOLS')) {
113
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_protocolsFound
114
+ curl_setopt($this->handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
115
+ }
116
+ if (defined('CURLOPT_REDIR_PROTOCOLS')) {
117
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_redir_protocolsFound
118
+ curl_setopt($this->handle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Destructor
124
+ */
125
+ public function __destruct() {
126
+ if (is_resource($this->handle)) {
127
+ curl_close($this->handle);
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Perform a request
133
+ *
134
+ * @param string|Stringable $url URL to request
135
+ * @param array $headers Associative array of request headers
136
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
137
+ * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
138
+ * @return string Raw HTTP result
139
+ *
140
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string or Stringable.
141
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $headers argument is not an array.
142
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data parameter is not an array or string.
143
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
144
+ * @throws \WpOrg\Requests\Exception On a cURL error (`curlerror`)
145
+ */
146
+ public function request($url, $headers = [], $data = [], $options = []) {
147
+ if (InputValidator::is_string_or_stringable($url) === false) {
148
+ throw InvalidArgument::create(1, '$url', 'string|Stringable', gettype($url));
149
+ }
150
+
151
+ if (is_array($headers) === false) {
152
+ throw InvalidArgument::create(2, '$headers', 'array', gettype($headers));
153
+ }
154
+
155
+ if (!is_array($data) && !is_string($data)) {
156
+ if ($data === null) {
157
+ $data = '';
158
+ } else {
159
+ throw InvalidArgument::create(3, '$data', 'array|string', gettype($data));
160
+ }
161
+ }
162
+
163
+ if (is_array($options) === false) {
164
+ throw InvalidArgument::create(4, '$options', 'array', gettype($options));
165
+ }
166
+
167
+ $this->hooks = $options['hooks'];
168
+
169
+ $this->setup_handle($url, $headers, $data, $options);
170
+
171
+ $options['hooks']->dispatch('curl.before_send', [&$this->handle]);
172
+
173
+ if ($options['filename'] !== false) {
174
+ // phpcs:ignore WordPress.PHP.NoSilencedErrors -- Silenced the PHP native warning in favour of throwing an exception.
175
+ $this->stream_handle = @fopen($options['filename'], 'wb');
176
+ if ($this->stream_handle === false) {
177
+ $error = error_get_last();
178
+ throw new Exception($error['message'], 'fopen');
179
+ }
180
+ }
181
+
182
+ $this->response_data = '';
183
+ $this->response_bytes = 0;
184
+ $this->response_byte_limit = false;
185
+ if ($options['max_bytes'] !== false) {
186
+ $this->response_byte_limit = $options['max_bytes'];
187
+ }
188
+
189
+ if (isset($options['verify'])) {
190
+ if ($options['verify'] === false) {
191
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
192
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYPEER, 0);
193
+ }
194
+ elseif (is_string($options['verify'])) {
195
+ curl_setopt($this->handle, CURLOPT_CAINFO, $options['verify']);
196
+ }
197
+ }
198
+
199
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
200
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
201
+ }
202
+
203
+ curl_exec($this->handle);
204
+ $response = $this->response_data;
205
+
206
+ $options['hooks']->dispatch('curl.after_send', []);
207
+
208
+ if (curl_errno($this->handle) === CURLE_WRITE_ERROR || curl_errno($this->handle) === CURLE_BAD_CONTENT_ENCODING) {
209
+ // Reset encoding and try again
210
+ curl_setopt($this->handle, CURLOPT_ENCODING, 'none');
211
+
212
+ $this->response_data = '';
213
+ $this->response_bytes = 0;
214
+ curl_exec($this->handle);
215
+ $response = $this->response_data;
216
+ }
217
+
218
+ $this->process_response($response, $options);
219
+
220
+ // Need to remove the $this reference from the curl handle.
221
+ // Otherwise \WpOrg\Requests\Transport\Curl won't be garbage collected and the curl_close() will never be called.
222
+ curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, null);
223
+ curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, null);
224
+
225
+ return $this->headers;
226
+ }
227
+
228
+ /**
229
+ * Send multiple requests simultaneously
230
+ *
231
+ * @param array $requests Request data
232
+ * @param array $options Global options
233
+ * @return array Array of \WpOrg\Requests\Response objects (may contain \WpOrg\Requests\Exception or string responses as well)
234
+ *
235
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
236
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
237
+ */
238
+ public function request_multiple($requests, $options) {
239
+ // If you're not requesting, we can't get any responses ¯\_(ツ)_/¯
240
+ if (empty($requests)) {
241
+ return [];
242
+ }
243
+
244
+ if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
245
+ throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
246
+ }
247
+
248
+ if (is_array($options) === false) {
249
+ throw InvalidArgument::create(2, '$options', 'array', gettype($options));
250
+ }
251
+
252
+ $multihandle = curl_multi_init();
253
+ $subrequests = [];
254
+ $subhandles = [];
255
+
256
+ $class = get_class($this);
257
+ foreach ($requests as $id => $request) {
258
+ $subrequests[$id] = new $class();
259
+ $subhandles[$id] = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
260
+ $request['options']['hooks']->dispatch('curl.before_multi_add', [&$subhandles[$id]]);
261
+ curl_multi_add_handle($multihandle, $subhandles[$id]);
262
+ }
263
+
264
+ $completed = 0;
265
+ $responses = [];
266
+ $subrequestcount = count($subrequests);
267
+
268
+ $request['options']['hooks']->dispatch('curl.before_multi_exec', [&$multihandle]);
269
+
270
+ do {
271
+ $active = 0;
272
+
273
+ do {
274
+ $status = curl_multi_exec($multihandle, $active);
275
+ }
276
+ while ($status === CURLM_CALL_MULTI_PERFORM);
277
+
278
+ $to_process = [];
279
+
280
+ // Read the information as needed
281
+ while ($done = curl_multi_info_read($multihandle)) {
282
+ $key = array_search($done['handle'], $subhandles, true);
283
+ if (!isset($to_process[$key])) {
284
+ $to_process[$key] = $done;
285
+ }
286
+ }
287
+
288
+ // Parse the finished requests before we start getting the new ones
289
+ foreach ($to_process as $key => $done) {
290
+ $options = $requests[$key]['options'];
291
+ if ($done['result'] !== CURLE_OK) {
292
+ //get error string for handle.
293
+ $reason = curl_error($done['handle']);
294
+ $exception = new CurlException(
295
+ $reason,
296
+ CurlException::EASY,
297
+ $done['handle'],
298
+ $done['result']
299
+ );
300
+ $responses[$key] = $exception;
301
+ $options['hooks']->dispatch('transport.internal.parse_error', [&$responses[$key], $requests[$key]]);
302
+ }
303
+ else {
304
+ $responses[$key] = $subrequests[$key]->process_response($subrequests[$key]->response_data, $options);
305
+
306
+ $options['hooks']->dispatch('transport.internal.parse_response', [&$responses[$key], $requests[$key]]);
307
+ }
308
+
309
+ curl_multi_remove_handle($multihandle, $done['handle']);
310
+ curl_close($done['handle']);
311
+
312
+ if (!is_string($responses[$key])) {
313
+ $options['hooks']->dispatch('multiple.request.complete', [&$responses[$key], $key]);
314
+ }
315
+ $completed++;
316
+ }
317
+ }
318
+ while ($active || $completed < $subrequestcount);
319
+
320
+ $request['options']['hooks']->dispatch('curl.after_multi_exec', [&$multihandle]);
321
+
322
+ curl_multi_close($multihandle);
323
+
324
+ return $responses;
325
+ }
326
+
327
+ /**
328
+ * Get the cURL handle for use in a multi-request
329
+ *
330
+ * @param string $url URL to request
331
+ * @param array $headers Associative array of request headers
332
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
333
+ * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
334
+ * @return resource|\CurlHandle Subrequest's cURL handle
335
+ */
336
+ public function &get_subrequest_handle($url, $headers, $data, $options) {
337
+ $this->setup_handle($url, $headers, $data, $options);
338
+
339
+ if ($options['filename'] !== false) {
340
+ $this->stream_handle = fopen($options['filename'], 'wb');
341
+ }
342
+
343
+ $this->response_data = '';
344
+ $this->response_bytes = 0;
345
+ $this->response_byte_limit = false;
346
+ if ($options['max_bytes'] !== false) {
347
+ $this->response_byte_limit = $options['max_bytes'];
348
+ }
349
+ $this->hooks = $options['hooks'];
350
+
351
+ return $this->handle;
352
+ }
353
+
354
+ /**
355
+ * Setup the cURL handle for the given data
356
+ *
357
+ * @param string $url URL to request
358
+ * @param array $headers Associative array of request headers
359
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
360
+ * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
361
+ */
362
+ private function setup_handle($url, $headers, $data, $options) {
363
+ $options['hooks']->dispatch('curl.before_request', [&$this->handle]);
364
+
365
+ // Force closing the connection for old versions of cURL (<7.22).
366
+ if (!isset($headers['Connection'])) {
367
+ $headers['Connection'] = 'close';
368
+ }
369
+
370
+ /**
371
+ * Add "Expect" header.
372
+ *
373
+ * By default, cURL adds a "Expect: 100-Continue" to most requests. This header can
374
+ * add as much as a second to the time it takes for cURL to perform a request. To
375
+ * prevent this, we need to set an empty "Expect" header. To match the behaviour of
376
+ * Guzzle, we'll add the empty header to requests that are smaller than 1 MB and use
377
+ * HTTP/1.1.
378
+ *
379
+ * https://curl.se/mail/lib-2017-07/0013.html
380
+ */
381
+ if (!isset($headers['Expect']) && $options['protocol_version'] === 1.1) {
382
+ $headers['Expect'] = $this->get_expect_header($data);
383
+ }
384
+
385
+ $headers = Requests::flatten($headers);
386
+
387
+ if (!empty($data)) {
388
+ $data_format = $options['data_format'];
389
+
390
+ if ($data_format === 'query') {
391
+ $url = self::format_get($url, $data);
392
+ $data = '';
393
+ }
394
+ elseif (!is_string($data)) {
395
+ $data = http_build_query($data, '', '&');
396
+ }
397
+ }
398
+
399
+ switch ($options['type']) {
400
+ case Requests::POST:
401
+ curl_setopt($this->handle, CURLOPT_POST, true);
402
+ curl_setopt($this->handle, CURLOPT_POSTFIELDS, $data);
403
+ break;
404
+ case Requests::HEAD:
405
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
406
+ curl_setopt($this->handle, CURLOPT_NOBODY, true);
407
+ break;
408
+ case Requests::TRACE:
409
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
410
+ break;
411
+ case Requests::PATCH:
412
+ case Requests::PUT:
413
+ case Requests::DELETE:
414
+ case Requests::OPTIONS:
415
+ default:
416
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
417
+ if (!empty($data)) {
418
+ curl_setopt($this->handle, CURLOPT_POSTFIELDS, $data);
419
+ }
420
+ }
421
+
422
+ // cURL requires a minimum timeout of 1 second when using the system
423
+ // DNS resolver, as it uses `alarm()`, which is second resolution only.
424
+ // There's no way to detect which DNS resolver is being used from our
425
+ // end, so we need to round up regardless of the supplied timeout.
426
+ //
427
+ // https://github.com/curl/curl/blob/4f45240bc84a9aa648c8f7243be7b79e9f9323a5/lib/hostip.c#L606-L609
428
+ $timeout = max($options['timeout'], 1);
429
+
430
+ if (is_int($timeout) || $this->version < self::CURL_7_16_2) {
431
+ curl_setopt($this->handle, CURLOPT_TIMEOUT, ceil($timeout));
432
+ }
433
+ else {
434
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_timeout_msFound
435
+ curl_setopt($this->handle, CURLOPT_TIMEOUT_MS, round($timeout * 1000));
436
+ }
437
+
438
+ if (is_int($options['connect_timeout']) || $this->version < self::CURL_7_16_2) {
439
+ curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, ceil($options['connect_timeout']));
440
+ }
441
+ else {
442
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_connecttimeout_msFound
443
+ curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT_MS, round($options['connect_timeout'] * 1000));
444
+ }
445
+ curl_setopt($this->handle, CURLOPT_URL, $url);
446
+ curl_setopt($this->handle, CURLOPT_USERAGENT, $options['useragent']);
447
+ if (!empty($headers)) {
448
+ curl_setopt($this->handle, CURLOPT_HTTPHEADER, $headers);
449
+ }
450
+ if ($options['protocol_version'] === 1.1) {
451
+ curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
452
+ }
453
+ else {
454
+ curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
455
+ }
456
+
457
+ if ($options['blocking'] === true) {
458
+ curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, [$this, 'stream_headers']);
459
+ curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, [$this, 'stream_body']);
460
+ curl_setopt($this->handle, CURLOPT_BUFFERSIZE, Requests::BUFFER_SIZE);
461
+ }
462
+ }
463
+
464
+ /**
465
+ * Process a response
466
+ *
467
+ * @param string $response Response data from the body
468
+ * @param array $options Request options
469
+ * @return string|false HTTP response data including headers. False if non-blocking.
470
+ * @throws \WpOrg\Requests\Exception
471
+ */
472
+ public function process_response($response, $options) {
473
+ if ($options['blocking'] === false) {
474
+ $fake_headers = '';
475
+ $options['hooks']->dispatch('curl.after_request', [&$fake_headers]);
476
+ return false;
477
+ }
478
+ if ($options['filename'] !== false && $this->stream_handle) {
479
+ fclose($this->stream_handle);
480
+ $this->headers = trim($this->headers);
481
+ }
482
+ else {
483
+ $this->headers .= $response;
484
+ }
485
+
486
+ if (curl_errno($this->handle)) {
487
+ $error = sprintf(
488
+ 'cURL error %s: %s',
489
+ curl_errno($this->handle),
490
+ curl_error($this->handle)
491
+ );
492
+ throw new Exception($error, 'curlerror', $this->handle);
493
+ }
494
+ $this->info = curl_getinfo($this->handle);
495
+
496
+ $options['hooks']->dispatch('curl.after_request', [&$this->headers, &$this->info]);
497
+ return $this->headers;
498
+ }
499
+
500
+ /**
501
+ * Collect the headers as they are received
502
+ *
503
+ * @param resource|\CurlHandle $handle cURL handle
504
+ * @param string $headers Header string
505
+ * @return integer Length of provided header
506
+ */
507
+ public function stream_headers($handle, $headers) {
508
+ // Why do we do this? cURL will send both the final response and any
509
+ // interim responses, such as a 100 Continue. We don't need that.
510
+ // (We may want to keep this somewhere just in case)
511
+ if ($this->done_headers) {
512
+ $this->headers = '';
513
+ $this->done_headers = false;
514
+ }
515
+ $this->headers .= $headers;
516
+
517
+ if ($headers === "\r\n") {
518
+ $this->done_headers = true;
519
+ }
520
+ return strlen($headers);
521
+ }
522
+
523
+ /**
524
+ * Collect data as it's received
525
+ *
526
+ * @since 1.6.1
527
+ *
528
+ * @param resource|\CurlHandle $handle cURL handle
529
+ * @param string $data Body data
530
+ * @return integer Length of provided data
531
+ */
532
+ public function stream_body($handle, $data) {
533
+ $this->hooks->dispatch('request.progress', [$data, $this->response_bytes, $this->response_byte_limit]);
534
+ $data_length = strlen($data);
535
+
536
+ // Are we limiting the response size?
537
+ if ($this->response_byte_limit) {
538
+ if ($this->response_bytes === $this->response_byte_limit) {
539
+ // Already at maximum, move on
540
+ return $data_length;
541
+ }
542
+
543
+ if (($this->response_bytes + $data_length) > $this->response_byte_limit) {
544
+ // Limit the length
545
+ $limited_length = ($this->response_byte_limit - $this->response_bytes);
546
+ $data = substr($data, 0, $limited_length);
547
+ }
548
+ }
549
+
550
+ if ($this->stream_handle) {
551
+ fwrite($this->stream_handle, $data);
552
+ }
553
+ else {
554
+ $this->response_data .= $data;
555
+ }
556
+
557
+ $this->response_bytes += strlen($data);
558
+ return $data_length;
559
+ }
560
+
561
+ /**
562
+ * Format a URL given GET data
563
+ *
564
+ * @param string $url
565
+ * @param array|object $data Data to build query using, see {@link https://www.php.net/http_build_query}
566
+ * @return string URL with data
567
+ */
568
+ private static function format_get($url, $data) {
569
+ if (!empty($data)) {
570
+ $query = '';
571
+ $url_parts = parse_url($url);
572
+ if (empty($url_parts['query'])) {
573
+ $url_parts['query'] = '';
574
+ }
575
+ else {
576
+ $query = $url_parts['query'];
577
+ }
578
+
579
+ $query .= '&' . http_build_query($data, '', '&');
580
+ $query = trim($query, '&');
581
+
582
+ if (empty($url_parts['query'])) {
583
+ $url .= '?' . $query;
584
+ }
585
+ else {
586
+ $url = str_replace($url_parts['query'], $query, $url);
587
+ }
588
+ }
589
+ return $url;
590
+ }
591
+
592
+ /**
593
+ * Self-test whether the transport can be used.
594
+ *
595
+ * The available capabilities to test for can be found in {@see \WpOrg\Requests\Capability}.
596
+ *
597
+ * @codeCoverageIgnore
598
+ * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
599
+ * @return bool Whether the transport can be used.
600
+ */
601
+ public static function test($capabilities = []) {
602
+ if (!function_exists('curl_init') || !function_exists('curl_exec')) {
603
+ return false;
604
+ }
605
+
606
+ // If needed, check that our installed curl version supports SSL
607
+ if (isset($capabilities[Capability::SSL]) && $capabilities[Capability::SSL]) {
608
+ $curl_version = curl_version();
609
+ if (!(CURL_VERSION_SSL & $curl_version['features'])) {
610
+ return false;
611
+ }
612
+ }
613
+
614
+ return true;
615
+ }
616
+
617
+ /**
618
+ * Get the correct "Expect" header for the given request data.
619
+ *
620
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD.
621
+ * @return string The "Expect" header.
622
+ */
623
+ private function get_expect_header($data) {
624
+ if (!is_array($data)) {
625
+ return strlen((string) $data) >= 1048576 ? '100-Continue' : '';
626
+ }
627
+
628
+ $bytesize = 0;
629
+ $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
630
+
631
+ foreach ($iterator as $datum) {
632
+ $bytesize += strlen((string) $datum);
633
+
634
+ if ($bytesize >= 1048576) {
635
+ return '100-Continue';
636
+ }
637
+ }
638
+
639
+ return '';
640
+ }
641
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Transport/Fsockopen.php ADDED
@@ -0,0 +1,506 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * fsockopen HTTP transport
4
+ *
5
+ * @package Requests\Transport
6
+ */
7
+
8
+ namespace WpOrg\Requests\Transport;
9
+
10
+ use WpOrg\Requests\Capability;
11
+ use WpOrg\Requests\Exception;
12
+ use WpOrg\Requests\Exception\InvalidArgument;
13
+ use WpOrg\Requests\Port;
14
+ use WpOrg\Requests\Requests;
15
+ use WpOrg\Requests\Ssl;
16
+ use WpOrg\Requests\Transport;
17
+ use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
18
+ use WpOrg\Requests\Utility\InputValidator;
19
+
20
+ /**
21
+ * fsockopen HTTP transport
22
+ *
23
+ * @package Requests\Transport
24
+ */
25
+ final class Fsockopen implements Transport {
26
+ /**
27
+ * Second to microsecond conversion
28
+ *
29
+ * @var integer
30
+ */
31
+ const SECOND_IN_MICROSECONDS = 1000000;
32
+
33
+ /**
34
+ * Raw HTTP data
35
+ *
36
+ * @var string
37
+ */
38
+ public $headers = '';
39
+
40
+ /**
41
+ * Stream metadata
42
+ *
43
+ * @var array Associative array of properties, see {@link https://www.php.net/stream_get_meta_data}
44
+ */
45
+ public $info;
46
+
47
+ /**
48
+ * What's the maximum number of bytes we should keep?
49
+ *
50
+ * @var int|bool Byte count, or false if no limit.
51
+ */
52
+ private $max_bytes = false;
53
+
54
+ private $connect_error = '';
55
+
56
+ /**
57
+ * Perform a request
58
+ *
59
+ * @param string|Stringable $url URL to request
60
+ * @param array $headers Associative array of request headers
61
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
62
+ * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
63
+ * @return string Raw HTTP result
64
+ *
65
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string or Stringable.
66
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $headers argument is not an array.
67
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data parameter is not an array or string.
68
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
69
+ * @throws \WpOrg\Requests\Exception On failure to connect to socket (`fsockopenerror`)
70
+ * @throws \WpOrg\Requests\Exception On socket timeout (`timeout`)
71
+ */
72
+ public function request($url, $headers = [], $data = [], $options = []) {
73
+ if (InputValidator::is_string_or_stringable($url) === false) {
74
+ throw InvalidArgument::create(1, '$url', 'string|Stringable', gettype($url));
75
+ }
76
+
77
+ if (is_array($headers) === false) {
78
+ throw InvalidArgument::create(2, '$headers', 'array', gettype($headers));
79
+ }
80
+
81
+ if (!is_array($data) && !is_string($data)) {
82
+ if ($data === null) {
83
+ $data = '';
84
+ } else {
85
+ throw InvalidArgument::create(3, '$data', 'array|string', gettype($data));
86
+ }
87
+ }
88
+
89
+ if (is_array($options) === false) {
90
+ throw InvalidArgument::create(4, '$options', 'array', gettype($options));
91
+ }
92
+
93
+ $options['hooks']->dispatch('fsockopen.before_request');
94
+
95
+ $url_parts = parse_url($url);
96
+ if (empty($url_parts)) {
97
+ throw new Exception('Invalid URL.', 'invalidurl', $url);
98
+ }
99
+ $host = $url_parts['host'];
100
+ $context = stream_context_create();
101
+ $verifyname = false;
102
+ $case_insensitive_headers = new CaseInsensitiveDictionary($headers);
103
+
104
+ // HTTPS support
105
+ if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
106
+ $remote_socket = 'ssl://' . $host;
107
+ if (!isset($url_parts['port'])) {
108
+ $url_parts['port'] = Port::HTTPS;
109
+ }
110
+
111
+ $context_options = [
112
+ 'verify_peer' => true,
113
+ 'capture_peer_cert' => true,
114
+ ];
115
+ $verifyname = true;
116
+
117
+ // SNI, if enabled (OpenSSL >=0.9.8j)
118
+ // phpcs:ignore PHPCompatibility.Constants.NewConstants.openssl_tlsext_server_nameFound
119
+ if (defined('OPENSSL_TLSEXT_SERVER_NAME') && OPENSSL_TLSEXT_SERVER_NAME) {
120
+ $context_options['SNI_enabled'] = true;
121
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
122
+ $context_options['SNI_enabled'] = false;
123
+ }
124
+ }
125
+
126
+ if (isset($options['verify'])) {
127
+ if ($options['verify'] === false) {
128
+ $context_options['verify_peer'] = false;
129
+ $context_options['verify_peer_name'] = false;
130
+ $verifyname = false;
131
+ }
132
+ elseif (is_string($options['verify'])) {
133
+ $context_options['cafile'] = $options['verify'];
134
+ }
135
+ }
136
+
137
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
138
+ $context_options['verify_peer_name'] = false;
139
+ $verifyname = false;
140
+ }
141
+
142
+ stream_context_set_option($context, ['ssl' => $context_options]);
143
+ }
144
+ else {
145
+ $remote_socket = 'tcp://' . $host;
146
+ }
147
+
148
+ $this->max_bytes = $options['max_bytes'];
149
+
150
+ if (!isset($url_parts['port'])) {
151
+ $url_parts['port'] = Port::HTTP;
152
+ }
153
+ $remote_socket .= ':' . $url_parts['port'];
154
+
155
+ // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
156
+ set_error_handler([$this, 'connect_error_handler'], E_WARNING | E_NOTICE);
157
+
158
+ $options['hooks']->dispatch('fsockopen.remote_socket', [&$remote_socket]);
159
+
160
+ $socket = stream_socket_client($remote_socket, $errno, $errstr, ceil($options['connect_timeout']), STREAM_CLIENT_CONNECT, $context);
161
+
162
+ restore_error_handler();
163
+
164
+ if ($verifyname && !$this->verify_certificate_from_context($host, $context)) {
165
+ throw new Exception('SSL certificate did not match the requested domain name', 'ssl.no_match');
166
+ }
167
+
168
+ if (!$socket) {
169
+ if ($errno === 0) {
170
+ // Connection issue
171
+ throw new Exception(rtrim($this->connect_error), 'fsockopen.connect_error');
172
+ }
173
+
174
+ throw new Exception($errstr, 'fsockopenerror', null, $errno);
175
+ }
176
+
177
+ $data_format = $options['data_format'];
178
+
179
+ if ($data_format === 'query') {
180
+ $path = self::format_get($url_parts, $data);
181
+ $data = '';
182
+ }
183
+ else {
184
+ $path = self::format_get($url_parts, []);
185
+ }
186
+
187
+ $options['hooks']->dispatch('fsockopen.remote_host_path', [&$path, $url]);
188
+
189
+ $request_body = '';
190
+ $out = sprintf("%s %s HTTP/%.1F\r\n", $options['type'], $path, $options['protocol_version']);
191
+
192
+ if ($options['type'] !== Requests::TRACE) {
193
+ if (is_array($data)) {
194
+ $request_body = http_build_query($data, '', '&');
195
+ }
196
+ else {
197
+ $request_body = $data;
198
+ }
199
+
200
+ // Always include Content-length on POST requests to prevent
201
+ // 411 errors from some servers when the body is empty.
202
+ if (!empty($data) || $options['type'] === Requests::POST) {
203
+ if (!isset($case_insensitive_headers['Content-Length'])) {
204
+ $headers['Content-Length'] = strlen($request_body);
205
+ }
206
+
207
+ if (!isset($case_insensitive_headers['Content-Type'])) {
208
+ $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
209
+ }
210
+ }
211
+ }
212
+
213
+ if (!isset($case_insensitive_headers['Host'])) {
214
+ $out .= sprintf('Host: %s', $url_parts['host']);
215
+ $scheme_lower = strtolower($url_parts['scheme']);
216
+
217
+ if (($scheme_lower === 'http' && $url_parts['port'] !== Port::HTTP) || ($scheme_lower === 'https' && $url_parts['port'] !== Port::HTTPS)) {
218
+ $out .= ':' . $url_parts['port'];
219
+ }
220
+ $out .= "\r\n";
221
+ }
222
+
223
+ if (!isset($case_insensitive_headers['User-Agent'])) {
224
+ $out .= sprintf("User-Agent: %s\r\n", $options['useragent']);
225
+ }
226
+
227
+ $accept_encoding = $this->accept_encoding();
228
+ if (!isset($case_insensitive_headers['Accept-Encoding']) && !empty($accept_encoding)) {
229
+ $out .= sprintf("Accept-Encoding: %s\r\n", $accept_encoding);
230
+ }
231
+
232
+ $headers = Requests::flatten($headers);
233
+
234
+ if (!empty($headers)) {
235
+ $out .= implode("\r\n", $headers) . "\r\n";
236
+ }
237
+
238
+ $options['hooks']->dispatch('fsockopen.after_headers', [&$out]);
239
+
240
+ if (substr($out, -2) !== "\r\n") {
241
+ $out .= "\r\n";
242
+ }
243
+
244
+ if (!isset($case_insensitive_headers['Connection'])) {
245
+ $out .= "Connection: Close\r\n";
246
+ }
247
+
248
+ $out .= "\r\n" . $request_body;
249
+
250
+ $options['hooks']->dispatch('fsockopen.before_send', [&$out]);
251
+
252
+ fwrite($socket, $out);
253
+ $options['hooks']->dispatch('fsockopen.after_send', [$out]);
254
+
255
+ if (!$options['blocking']) {
256
+ fclose($socket);
257
+ $fake_headers = '';
258
+ $options['hooks']->dispatch('fsockopen.after_request', [&$fake_headers]);
259
+ return '';
260
+ }
261
+
262
+ $timeout_sec = (int) floor($options['timeout']);
263
+ if ($timeout_sec === $options['timeout']) {
264
+ $timeout_msec = 0;
265
+ }
266
+ else {
267
+ $timeout_msec = self::SECOND_IN_MICROSECONDS * $options['timeout'] % self::SECOND_IN_MICROSECONDS;
268
+ }
269
+ stream_set_timeout($socket, $timeout_sec, $timeout_msec);
270
+
271
+ $response = '';
272
+ $body = '';
273
+ $headers = '';
274
+ $this->info = stream_get_meta_data($socket);
275
+ $size = 0;
276
+ $doingbody = false;
277
+ $download = false;
278
+ if ($options['filename']) {
279
+ // phpcs:ignore WordPress.PHP.NoSilencedErrors -- Silenced the PHP native warning in favour of throwing an exception.
280
+ $download = @fopen($options['filename'], 'wb');
281
+ if ($download === false) {
282
+ $error = error_get_last();
283
+ throw new Exception($error['message'], 'fopen');
284
+ }
285
+ }
286
+
287
+ while (!feof($socket)) {
288
+ $this->info = stream_get_meta_data($socket);
289
+ if ($this->info['timed_out']) {
290
+ throw new Exception('fsocket timed out', 'timeout');
291
+ }
292
+
293
+ $block = fread($socket, Requests::BUFFER_SIZE);
294
+ if (!$doingbody) {
295
+ $response .= $block;
296
+ if (strpos($response, "\r\n\r\n")) {
297
+ list($headers, $block) = explode("\r\n\r\n", $response, 2);
298
+ $doingbody = true;
299
+ }
300
+ }
301
+
302
+ // Are we in body mode now?
303
+ if ($doingbody) {
304
+ $options['hooks']->dispatch('request.progress', [$block, $size, $this->max_bytes]);
305
+ $data_length = strlen($block);
306
+ if ($this->max_bytes) {
307
+ // Have we already hit a limit?
308
+ if ($size === $this->max_bytes) {
309
+ continue;
310
+ }
311
+ if (($size + $data_length) > $this->max_bytes) {
312
+ // Limit the length
313
+ $limited_length = ($this->max_bytes - $size);
314
+ $block = substr($block, 0, $limited_length);
315
+ }
316
+ }
317
+
318
+ $size += strlen($block);
319
+ if ($download) {
320
+ fwrite($download, $block);
321
+ }
322
+ else {
323
+ $body .= $block;
324
+ }
325
+ }
326
+ }
327
+ $this->headers = $headers;
328
+
329
+ if ($download) {
330
+ fclose($download);
331
+ }
332
+ else {
333
+ $this->headers .= "\r\n\r\n" . $body;
334
+ }
335
+ fclose($socket);
336
+
337
+ $options['hooks']->dispatch('fsockopen.after_request', [&$this->headers, &$this->info]);
338
+ return $this->headers;
339
+ }
340
+
341
+ /**
342
+ * Send multiple requests simultaneously
343
+ *
344
+ * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see \WpOrg\Requests\Transport::request()}
345
+ * @param array $options Global options, see {@see \WpOrg\Requests\Requests::response()} for documentation
346
+ * @return array Array of \WpOrg\Requests\Response objects (may contain \WpOrg\Requests\Exception or string responses as well)
347
+ *
348
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
349
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
350
+ */
351
+ public function request_multiple($requests, $options) {
352
+ // If you're not requesting, we can't get any responses ¯\_(ツ)_/¯
353
+ if (empty($requests)) {
354
+ return [];
355
+ }
356
+
357
+ if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
358
+ throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
359
+ }
360
+
361
+ if (is_array($options) === false) {
362
+ throw InvalidArgument::create(2, '$options', 'array', gettype($options));
363
+ }
364
+
365
+ $responses = [];
366
+ $class = get_class($this);
367
+ foreach ($requests as $id => $request) {
368
+ try {
369
+ $handler = new $class();
370
+ $responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
371
+
372
+ $request['options']['hooks']->dispatch('transport.internal.parse_response', [&$responses[$id], $request]);
373
+ }
374
+ catch (Exception $e) {
375
+ $responses[$id] = $e;
376
+ }
377
+
378
+ if (!is_string($responses[$id])) {
379
+ $request['options']['hooks']->dispatch('multiple.request.complete', [&$responses[$id], $id]);
380
+ }
381
+ }
382
+
383
+ return $responses;
384
+ }
385
+
386
+ /**
387
+ * Retrieve the encodings we can accept
388
+ *
389
+ * @return string Accept-Encoding header value
390
+ */
391
+ private static function accept_encoding() {
392
+ $type = [];
393
+ if (function_exists('gzinflate')) {
394
+ $type[] = 'deflate;q=1.0';
395
+ }
396
+
397
+ if (function_exists('gzuncompress')) {
398
+ $type[] = 'compress;q=0.5';
399
+ }
400
+
401
+ $type[] = 'gzip;q=0.5';
402
+
403
+ return implode(', ', $type);
404
+ }
405
+
406
+ /**
407
+ * Format a URL given GET data
408
+ *
409
+ * @param array $url_parts
410
+ * @param array|object $data Data to build query using, see {@link https://www.php.net/http_build_query}
411
+ * @return string URL with data
412
+ */
413
+ private static function format_get($url_parts, $data) {
414
+ if (!empty($data)) {
415
+ if (empty($url_parts['query'])) {
416
+ $url_parts['query'] = '';
417
+ }
418
+
419
+ $url_parts['query'] .= '&' . http_build_query($data, '', '&');
420
+ $url_parts['query'] = trim($url_parts['query'], '&');
421
+ }
422
+ if (isset($url_parts['path'])) {
423
+ if (isset($url_parts['query'])) {
424
+ $get = $url_parts['path'] . '?' . $url_parts['query'];
425
+ }
426
+ else {
427
+ $get = $url_parts['path'];
428
+ }
429
+ }
430
+ else {
431
+ $get = '/';
432
+ }
433
+ return $get;
434
+ }
435
+
436
+ /**
437
+ * Error handler for stream_socket_client()
438
+ *
439
+ * @param int $errno Error number (e.g. E_WARNING)
440
+ * @param string $errstr Error message
441
+ */
442
+ public function connect_error_handler($errno, $errstr) {
443
+ // Double-check we can handle it
444
+ if (($errno & E_WARNING) === 0 && ($errno & E_NOTICE) === 0) {
445
+ // Return false to indicate the default error handler should engage
446
+ return false;
447
+ }
448
+
449
+ $this->connect_error .= $errstr . "\n";
450
+ return true;
451
+ }
452
+
453
+ /**
454
+ * Verify the certificate against common name and subject alternative names
455
+ *
456
+ * Unfortunately, PHP doesn't check the certificate against the alternative
457
+ * names, leading things like 'https://www.github.com/' to be invalid.
458
+ * Instead
459
+ *
460
+ * @link https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
461
+ *
462
+ * @param string $host Host name to verify against
463
+ * @param resource $context Stream context
464
+ * @return bool
465
+ *
466
+ * @throws \WpOrg\Requests\Exception On failure to connect via TLS (`fsockopen.ssl.connect_error`)
467
+ * @throws \WpOrg\Requests\Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
468
+ */
469
+ public function verify_certificate_from_context($host, $context) {
470
+ $meta = stream_context_get_options($context);
471
+
472
+ // If we don't have SSL options, then we couldn't make the connection at
473
+ // all
474
+ if (empty($meta) || empty($meta['ssl']) || empty($meta['ssl']['peer_certificate'])) {
475
+ throw new Exception(rtrim($this->connect_error), 'ssl.connect_error');
476
+ }
477
+
478
+ $cert = openssl_x509_parse($meta['ssl']['peer_certificate']);
479
+
480
+ return Ssl::verify_certificate($host, $cert);
481
+ }
482
+
483
+ /**
484
+ * Self-test whether the transport can be used.
485
+ *
486
+ * The available capabilities to test for can be found in {@see \WpOrg\Requests\Capability}.
487
+ *
488
+ * @codeCoverageIgnore
489
+ * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
490
+ * @return bool Whether the transport can be used.
491
+ */
492
+ public static function test($capabilities = []) {
493
+ if (!function_exists('fsockopen')) {
494
+ return false;
495
+ }
496
+
497
+ // If needed, check that streams support SSL
498
+ if (isset($capabilities[Capability::SSL]) && $capabilities[Capability::SSL]) {
499
+ if (!extension_loaded('openssl') || !function_exists('openssl_x509_parse')) {
500
+ return false;
501
+ }
502
+ }
503
+
504
+ return true;
505
+ }
506
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Utility/CaseInsensitiveDictionary.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Case-insensitive dictionary, suitable for HTTP headers
4
+ *
5
+ * @package Requests\Utilities
6
+ */
7
+
8
+ namespace WpOrg\Requests\Utility;
9
+
10
+ use ArrayAccess;
11
+ use ArrayIterator;
12
+ use IteratorAggregate;
13
+ use ReturnTypeWillChange;
14
+ use WpOrg\Requests\Exception;
15
+
16
+ /**
17
+ * Case-insensitive dictionary, suitable for HTTP headers
18
+ *
19
+ * @package Requests\Utilities
20
+ */
21
+ class CaseInsensitiveDictionary implements ArrayAccess, IteratorAggregate {
22
+ /**
23
+ * Actual item data
24
+ *
25
+ * @var array
26
+ */
27
+ protected $data = [];
28
+
29
+ /**
30
+ * Creates a case insensitive dictionary.
31
+ *
32
+ * @param array $data Dictionary/map to convert to case-insensitive
33
+ */
34
+ public function __construct(array $data = []) {
35
+ foreach ($data as $offset => $value) {
36
+ $this->offsetSet($offset, $value);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Check if the given item exists
42
+ *
43
+ * @param string $offset Item key
44
+ * @return boolean Does the item exist?
45
+ */
46
+ #[ReturnTypeWillChange]
47
+ public function offsetExists($offset) {
48
+ if (is_string($offset)) {
49
+ $offset = strtolower($offset);
50
+ }
51
+
52
+ return isset($this->data[$offset]);
53
+ }
54
+
55
+ /**
56
+ * Get the value for the item
57
+ *
58
+ * @param string $offset Item key
59
+ * @return string|null Item value (null if the item key doesn't exist)
60
+ */
61
+ #[ReturnTypeWillChange]
62
+ public function offsetGet($offset) {
63
+ if (is_string($offset)) {
64
+ $offset = strtolower($offset);
65
+ }
66
+
67
+ if (!isset($this->data[$offset])) {
68
+ return null;
69
+ }
70
+
71
+ return $this->data[$offset];
72
+ }
73
+
74
+ /**
75
+ * Set the given item
76
+ *
77
+ * @param string $offset Item name
78
+ * @param string $value Item value
79
+ *
80
+ * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
81
+ */
82
+ #[ReturnTypeWillChange]
83
+ public function offsetSet($offset, $value) {
84
+ if ($offset === null) {
85
+ throw new Exception('Object is a dictionary, not a list', 'invalidset');
86
+ }
87
+
88
+ if (is_string($offset)) {
89
+ $offset = strtolower($offset);
90
+ }
91
+
92
+ $this->data[$offset] = $value;
93
+ }
94
+
95
+ /**
96
+ * Unset the given header
97
+ *
98
+ * @param string $offset
99
+ */
100
+ #[ReturnTypeWillChange]
101
+ public function offsetUnset($offset) {
102
+ if (is_string($offset)) {
103
+ $offset = strtolower($offset);
104
+ }
105
+
106
+ unset($this->data[$offset]);
107
+ }
108
+
109
+ /**
110
+ * Get an iterator for the data
111
+ *
112
+ * @return \ArrayIterator
113
+ */
114
+ #[ReturnTypeWillChange]
115
+ public function getIterator() {
116
+ return new ArrayIterator($this->data);
117
+ }
118
+
119
+ /**
120
+ * Get the headers as an array
121
+ *
122
+ * @return array Header data
123
+ */
124
+ public function getAll() {
125
+ return $this->data;
126
+ }
127
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Utility/FilteredIterator.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Iterator for arrays requiring filtered values
4
+ *
5
+ * @package Requests\Utilities
6
+ */
7
+
8
+ namespace WpOrg\Requests\Utility;
9
+
10
+ use ArrayIterator;
11
+ use ReturnTypeWillChange;
12
+ use WpOrg\Requests\Exception\InvalidArgument;
13
+ use WpOrg\Requests\Utility\InputValidator;
14
+
15
+ /**
16
+ * Iterator for arrays requiring filtered values
17
+ *
18
+ * @package Requests\Utilities
19
+ */
20
+ final class FilteredIterator extends ArrayIterator {
21
+ /**
22
+ * Callback to run as a filter
23
+ *
24
+ * @var callable
25
+ */
26
+ private $callback;
27
+
28
+ /**
29
+ * Create a new iterator
30
+ *
31
+ * @param array $data
32
+ * @param callable $callback Callback to be called on each value
33
+ *
34
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data argument is not iterable.
35
+ */
36
+ public function __construct($data, $callback) {
37
+ if (InputValidator::is_iterable($data) === false) {
38
+ throw InvalidArgument::create(1, '$data', 'iterable', gettype($data));
39
+ }
40
+
41
+ parent::__construct($data);
42
+
43
+ if (is_callable($callback)) {
44
+ $this->callback = $callback;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * @inheritdoc
50
+ *
51
+ * @phpcs:disable PHPCompatibility.FunctionNameRestrictions.NewMagicMethods.__unserializeFound
52
+ */
53
+ #[ReturnTypeWillChange]
54
+ public function __unserialize($data) {}
55
+ // phpcs:enable
56
+
57
+ public function __wakeup() {
58
+ unset($this->callback);
59
+ }
60
+
61
+ /**
62
+ * Get the current item's value after filtering
63
+ *
64
+ * @return string
65
+ */
66
+ #[ReturnTypeWillChange]
67
+ public function current() {
68
+ $value = parent::current();
69
+
70
+ if (is_callable($this->callback)) {
71
+ $value = call_user_func($this->callback, $value);
72
+ }
73
+
74
+ return $value;
75
+ }
76
+
77
+ /**
78
+ * @inheritdoc
79
+ */
80
+ #[ReturnTypeWillChange]
81
+ public function unserialize($data) {}
82
+ }
razorpay-sdk/libs/Requests-2.0.0/src/Utility/InputValidator.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Input validation utilities.
4
+ *
5
+ * @package Requests\Utilities
6
+ */
7
+
8
+ namespace WpOrg\Requests\Utility;
9
+
10
+ use ArrayAccess;
11
+ use CurlHandle;
12
+ use Traversable;
13
+
14
+ /**
15
+ * Input validation utilities.
16
+ *
17
+ * @package Requests\Utilities
18
+ */
19
+ final class InputValidator {
20
+
21
+ /**
22
+ * Verify that a received input parameter is of type string or is "stringable".
23
+ *
24
+ * @param mixed $input Input parameter to verify.
25
+ *
26
+ * @return bool
27
+ */
28
+ public static function is_string_or_stringable($input) {
29
+ return is_string($input) || self::is_stringable_object($input);
30
+ }
31
+
32
+ /**
33
+ * Verify whether a received input parameter is usable as an integer array key.
34
+ *
35
+ * @param mixed $input Input parameter to verify.
36
+ *
37
+ * @return bool
38
+ */
39
+ public static function is_numeric_array_key($input) {
40
+ if (is_int($input)) {
41
+ return true;
42
+ }
43
+
44
+ if (!is_string($input)) {
45
+ return false;
46
+ }
47
+
48
+ return (bool) preg_match('`^-?[0-9]+$`', $input);
49
+ }
50
+
51
+ /**
52
+ * Verify whether a received input parameter is "stringable".
53
+ *
54
+ * @param mixed $input Input parameter to verify.
55
+ *
56
+ * @return bool
57
+ */
58
+ public static function is_stringable_object($input) {
59
+ return is_object($input) && method_exists($input, '__toString');
60
+ }
61
+
62
+ /**
63
+ * Verify whether a received input parameter is _accessible as if it were an array_.
64
+ *
65
+ * @param mixed $input Input parameter to verify.
66
+ *
67
+ * @return bool
68
+ */
69
+ public static function has_array_access($input) {
70
+ return is_array($input) || $input instanceof ArrayAccess;
71
+ }
72
+
73
+ /**
74
+ * Verify whether a received input parameter is "iterable".
75
+ *
76
+ * @internal The PHP native `is_iterable()` function was only introduced in PHP 7.1
77
+ * and this library still supports PHP 5.6.
78
+ *
79
+ * @param mixed $input Input parameter to verify.
80
+ *
81
+ * @return bool
82
+ */
83
+ public static function is_iterable($input) {
84
+ return is_array($input) || $input instanceof Traversable;
85
+ }
86
+
87
+ /**
88
+ * Verify whether a received input parameter is a Curl handle.
89
+ *
90
+ * The PHP Curl extension worked with resources prior to PHP 8.0 and with
91
+ * an instance of the `CurlHandle` class since PHP 8.0.
92
+ * {@link https://www.php.net/manual/en/migration80.incompatible.php#migration80.incompatible.resource2object}
93
+ *
94
+ * @param mixed $input Input parameter to verify.
95
+ *
96
+ * @return bool
97
+ */
98
+ public static function is_curl_handle($input) {
99
+ if (is_resource($input)) {
100
+ return get_resource_type($input) === 'curl';
101
+ }
102
+
103
+ if (is_object($input)) {
104
+ return $input instanceof CurlHandle;
105
+ }
106
+
107
+ return false;
108
+ }
109
+ }
razorpay-sdk/src/Api.php CHANGED
@@ -16,7 +16,7 @@ class Api
16
  */
17
  public static $appsDetails = array();
18
 
19
- const VERSION = '2.8.1';
20
 
21
  /**
22
  * @param string $key
16
  */
17
  public static $appsDetails = array();
18
 
19
+ const VERSION = '2.8.3';
20
 
21
  /**
22
  * @param string $key
razorpay-sdk/src/Collection.php CHANGED
@@ -6,7 +6,7 @@ use Countable;
6
 
7
  class Collection extends Entity implements Countable
8
  {
9
- public function count()
10
  {
11
  $count = 0;
12
 
6
 
7
  class Collection extends Entity implements Countable
8
  {
9
+ public function count():int
10
  {
11
  $count = 0;
12
 
razorpay-sdk/src/Resource.php CHANGED
@@ -9,28 +9,33 @@ use IteratorAggregate;
9
  class Resource implements ArrayAccess, IteratorAggregate
10
  {
11
  protected $attributes = array();
12
-
 
13
  public function getIterator()
14
  {
15
  return new ArrayIterator($this->attributes);
16
  }
 
17
 
18
- public function offsetExists($offset)
19
  {
20
  return (isset($this->attributes[$offset]));
21
  }
 
22
 
23
- public function offsetSet($offset, $value)
24
  {
25
  $this->attributes[$offset] = $value;
26
  }
27
 
 
28
  public function offsetGet($offset)
29
  {
30
  return $this->attributes[$offset];
31
  }
 
32
 
33
- public function offsetUnset($offset)
34
  {
35
  unset($this->attributes[$offset]);
36
  }
9
  class Resource implements ArrayAccess, IteratorAggregate
10
  {
11
  protected $attributes = array();
12
+
13
+ #[\ReturnTypeWillChange]
14
  public function getIterator()
15
  {
16
  return new ArrayIterator($this->attributes);
17
  }
18
+
19
 
20
+ public function offsetExists($offset): bool
21
  {
22
  return (isset($this->attributes[$offset]));
23
  }
24
+
25
 
26
+ public function offsetSet($offset, $value): void
27
  {
28
  $this->attributes[$offset] = $value;
29
  }
30
 
31
+ #[\ReturnTypeWillChange]
32
  public function offsetGet($offset)
33
  {
34
  return $this->attributes[$offset];
35
  }
36
+
37
 
38
+ public function offsetUnset($offset): void
39
  {
40
  unset($this->attributes[$offset]);
41
  }
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: razorpay
3
  Tags: razorpay, payments, india, woocommerce, ecommerce
4
  Requires at least: 3.9.2
5
  Tested up to: 5.9
6
- Stable tag: 3.4.0
7
  Requires PHP: 5.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -41,6 +41,11 @@ This is compatible with WooCommerce>=2.4, including the new 3.0 release. It has
41
 
42
  == Changelog ==
43
 
 
 
 
 
 
44
  = 3.4.0 =
45
  * Bug fix for magic checkout blank orders.
46
 
3
  Tags: razorpay, payments, india, woocommerce, ecommerce
4
  Requires at least: 3.9.2
5
  Tested up to: 5.9
6
+ Stable tag: 3.4.1
7
  Requires PHP: 5.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
41
 
42
  == Changelog ==
43
 
44
+ = 3.4.1 =
45
+ * Bug fix in webhook.
46
+ * Updated Razorpay SDK.
47
+ * Tested up to Woocommerce 6.4.1
48
+
49
  = 3.4.0 =
50
  * Bug fix for magic checkout blank orders.
51
 
woo-razorpay.php CHANGED
@@ -3,8 +3,8 @@
3
  * Plugin Name: Razorpay for WooCommerce
4
  * Plugin URI: https://razorpay.com
5
  * Description: Razorpay Payment Gateway Integration for WooCommerce
6
- * Version: 3.4.0
7
- * Stable tag: 3.4.0
8
  * Author: Team Razorpay
9
  * WC tested up to: 6.2.2
10
  * Author URI: https://razorpay.com
3
  * Plugin Name: Razorpay for WooCommerce
4
  * Plugin URI: https://razorpay.com
5
  * Description: Razorpay Payment Gateway Integration for WooCommerce
6
+ * Version: 3.4.1
7
+ * Stable tag: 3.4.1
8
  * Author: Team Razorpay
9
  * WC tested up to: 6.2.2
10
  * Author URI: https://razorpay.com