rubygems-update 3.0.0 → 3.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.travis.yml +2 -0
  4. data/CODE_OF_CONDUCT.md +10 -8
  5. data/CONTRIBUTING.md +7 -0
  6. data/History.txt +180 -0
  7. data/Manifest.txt +5 -3
  8. data/README.md +6 -0
  9. data/Rakefile +33 -7
  10. data/bundler/CHANGELOG.md +11 -0
  11. data/bundler/lib/bundler/build_metadata.rb +2 -2
  12. data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
  13. data/bundler/lib/bundler/source/metadata.rb +2 -3
  14. data/bundler/lib/bundler/version.rb +1 -1
  15. data/bundler/man/bundle.ronn +3 -0
  16. data/lib/rubygems/command_manager.rb +12 -4
  17. data/lib/rubygems/commands/build_command.rb +28 -13
  18. data/lib/rubygems/commands/owner_command.rb +6 -1
  19. data/lib/rubygems/commands/push_command.rb +2 -0
  20. data/lib/rubygems/commands/setup_command.rb +14 -16
  21. data/lib/rubygems/commands/uninstall_command.rb +16 -6
  22. data/lib/rubygems/commands/which_command.rb +1 -3
  23. data/lib/rubygems/defaults.rb +1 -8
  24. data/lib/rubygems/dependency.rb +1 -1
  25. data/lib/rubygems/dependency_installer.rb +1 -2
  26. data/lib/rubygems/dependency_list.rb +1 -1
  27. data/lib/rubygems/exceptions.rb +0 -4
  28. data/lib/rubygems/gemcutter_utilities.rb +14 -7
  29. data/lib/rubygems/install_update_options.rb +1 -1
  30. data/lib/rubygems/installer.rb +37 -15
  31. data/lib/rubygems/installer_test_case.rb +2 -2
  32. data/lib/rubygems/package/old.rb +1 -1
  33. data/lib/rubygems/package/tar_header.rb +11 -2
  34. data/lib/rubygems/package.rb +12 -2
  35. data/lib/rubygems/rdoc.rb +2 -2
  36. data/lib/rubygems/remote_fetcher.rb +15 -54
  37. data/lib/rubygems/request.rb +1 -1
  38. data/lib/rubygems/request_set/gem_dependency_api.rb +11 -10
  39. data/lib/rubygems/requirement.rb +16 -5
  40. data/lib/rubygems/resolver.rb +4 -1
  41. data/lib/rubygems/s3_uri_signer.rb +183 -0
  42. data/lib/rubygems/security_option.rb +0 -1
  43. data/lib/rubygems/specification.rb +21 -23
  44. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  45. data/lib/rubygems/stub_specification.rb +1 -2
  46. data/lib/rubygems/test_case.rb +23 -12
  47. data/lib/rubygems/uninstaller.rb +1 -1
  48. data/lib/rubygems/user_interaction.rb +4 -1
  49. data/lib/rubygems/util.rb +13 -1
  50. data/lib/rubygems.rb +8 -13
  51. data/rubygems-update.gemspec +1 -1
  52. data/test/rubygems/ca_cert.pem +74 -65
  53. data/test/rubygems/client.pem +103 -45
  54. data/test/rubygems/ssl_cert.pem +78 -17
  55. data/test/rubygems/ssl_key.pem +25 -13
  56. data/test/rubygems/test_bundled_ca.rb +8 -5
  57. data/test/rubygems/test_gem.rb +55 -13
  58. data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
  59. data/test/rubygems/test_gem_command_manager.rb +10 -0
  60. data/test/rubygems/test_gem_commands_build_command.rb +1 -0
  61. data/test/rubygems/test_gem_commands_push_command.rb +15 -0
  62. data/test/rubygems/test_gem_commands_setup_command.rb +11 -7
  63. data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -1
  64. data/test/rubygems/test_gem_ext_cmake_builder.rb +1 -1
  65. data/test/rubygems/test_gem_indexer.rb +15 -8
  66. data/test/rubygems/test_gem_installer.rb +191 -22
  67. data/test/rubygems/test_gem_package.rb +37 -0
  68. data/test/rubygems/test_gem_package_tar_header.rb +41 -0
  69. data/test/rubygems/test_gem_package_tar_writer.rb +3 -0
  70. data/test/rubygems/test_gem_rdoc.rb +1 -135
  71. data/test/rubygems/test_gem_remote_fetcher.rb +133 -14
  72. data/test/rubygems/test_gem_request.rb +4 -4
  73. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +80 -57
  74. data/test/rubygems/test_gem_requirement.rb +6 -0
  75. data/test/rubygems/test_gem_security_policy.rb +1 -1
  76. data/test/rubygems/test_gem_specification.rb +32 -0
  77. data/test/rubygems/test_gem_stream_ui.rb +2 -2
  78. data/test/rubygems/test_gem_text.rb +5 -0
  79. data/test/rubygems/test_gem_uninstaller.rb +21 -2
  80. data/test/rubygems/test_gem_util.rb +25 -0
  81. data/util/ci +6 -1
  82. data/util/cops/deprecations.rb +52 -0
  83. data/util/create_certs.sh +27 -0
  84. data/util/create_encrypted_key.rb +4 -4
  85. data/util/update_bundled_ca_certificates.rb +1 -3
  86. metadata +12 -10
  87. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  88. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  89. /data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
@@ -89,4 +89,9 @@ Without the wrapping, the text might not look good in the RSS feed.
89
89
  s = "ab" * 500_001
90
90
  assert_equal "Truncating desc to 1,000,000 characters:\n#{s[0, 1_000_000]}", truncate_text(s, "desc", 1_000_000)
91
91
  end
92
+
93
+ def test_clean_text
94
+ assert_equal ".]2;nyan.", clean_text("\e]2;nyan\a")
95
+ end
96
+
92
97
  end
@@ -22,9 +22,10 @@ class TestGemUninstaller < Gem::InstallerTestCase
22
22
  end
23
23
 
24
24
  def test_initialize_expand_path
25
- uninstaller = Gem::Uninstaller.new nil, :install_dir => '/foo//bar'
25
+ FileUtils.mkdir_p 'foo/bar'
26
+ uninstaller = Gem::Uninstaller.new nil, :install_dir => 'foo//bar'
26
27
 
27
- assert_match %r|/foo/bar$|, uninstaller.instance_variable_get(:@gem_home)
28
+ assert_match %r|foo/bar$|, uninstaller.instance_variable_get(:@gem_home)
28
29
  end
29
30
 
30
31
  def test_ask_if_ok
@@ -133,6 +134,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
133
134
  end
134
135
 
135
136
  def test_remove_not_in_home
137
+ Dir.mkdir "#{@gemhome}2"
136
138
  uninstaller = Gem::Uninstaller.new nil, :install_dir => "#{@gemhome}2"
137
139
 
138
140
  e = assert_raises Gem::GemNotInHomeException do
@@ -149,6 +151,22 @@ class TestGemUninstaller < Gem::InstallerTestCase
149
151
  assert_path_exists @spec.gem_dir
150
152
  end
151
153
 
154
+ def test_remove_symlinked_gem_home
155
+ Dir.mktmpdir("gem_home") do |dir|
156
+ symlinked_gem_home = "#{dir}/#{File.basename(@gemhome)}"
157
+
158
+ FileUtils.ln_s(@gemhome, dir)
159
+
160
+ uninstaller = Gem::Uninstaller.new nil, :install_dir => symlinked_gem_home
161
+
162
+ use_ui ui do
163
+ uninstaller.remove @spec
164
+ end
165
+
166
+ refute_path_exists @spec.gem_dir
167
+ end
168
+ end
169
+
152
170
  def test_path_ok_eh
153
171
  uninstaller = Gem::Uninstaller.new nil
154
172
 
@@ -313,6 +331,7 @@ create_makefile '#{@spec.name}'
313
331
  end
314
332
 
315
333
  def test_uninstall_wrong_repo
334
+ Dir.mkdir "#{@gemhome}2"
316
335
  Gem.use_paths "#{@gemhome}2", [@gemhome]
317
336
 
318
337
  uninstaller = Gem::Uninstaller.new @spec.name, :executables => true
@@ -58,4 +58,29 @@ class TestGemUtil < Gem::TestCase
58
58
  assert_equal 4, list.find { |x| x == 4 }
59
59
  end
60
60
 
61
+ def test_glob_files_in_dir
62
+ FileUtils.mkdir_p 'g'
63
+ FileUtils.touch File.join('g', 'h.rb')
64
+ FileUtils.touch File.join('g', 'i.rb')
65
+
66
+ expected_paths = [
67
+ File.join(@tempdir, 'g/h.rb'),
68
+ File.join(@tempdir, 'g/i.rb'),
69
+ ]
70
+
71
+ files_with_absolute_base = Gem::Util.glob_files_in_dir('*.rb', File.join(@tempdir, 'g'))
72
+ assert_equal expected_paths.to_set, files_with_absolute_base.to_set
73
+
74
+ files_with_relative_base = Gem::Util.glob_files_in_dir('*.rb', 'g')
75
+ assert_equal expected_paths.to_set, files_with_relative_base.to_set
76
+ end
77
+
78
+ def test_correct_for_windows_path
79
+ path = "/C:/WINDOWS/Temp/gems"
80
+ assert_equal "C:/WINDOWS/Temp/gems", Gem::Util.correct_for_windows_path(path)
81
+
82
+ path = "/home/skillet"
83
+ assert_equal "/home/skillet", Gem::Util.correct_for_windows_path(path)
84
+ end
85
+
61
86
  end
data/util/ci CHANGED
@@ -47,7 +47,7 @@ end
47
47
  case ARGV
48
48
  when %w(before_script)
49
49
  if TOOL.rubygems?
50
- run('gem', %W(uninstall executable-hooks gem-wrappers bundler-unload -x --force -i #{`gem env home`.strip}@global))
50
+ run('ruby', %W(-I lib bin/gem uninstall executable-hooks gem-wrappers bundler-unload -x --force -i #{`gem env home`.strip}@global))
51
51
 
52
52
  if RUBY_VERSION >= "2.6.0"
53
53
  run('gem', %w(install minitest -v 5.4.3))
@@ -61,6 +61,11 @@ when %w(before_script)
61
61
  run('gem', %w(list --details))
62
62
  run('gem', %w(env))
63
63
  else
64
+ # Fix incorrect default gem specifications on ruby 2.6.1. Can be removed
65
+ # when 2.6.2 is released and we start testing against it. See
66
+ # https://bugs.ruby-lang.org/issues/15582 for more information
67
+ run('gem', %w(install etc:1.0.1 --default)) if RUBY_VERSION == "2.6.1"
68
+
64
69
  with_retries { run('rake', %w(spec:travis:deps)) }
65
70
  end
66
71
  when %w(rubocop)
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rubygems
6
+ # This cop enforces that no outdated deprecations are present on RubyGems
7
+ # code base.
8
+ #
9
+ # @example
10
+ #
11
+ # As of March, 2019
12
+ #
13
+ # # bad
14
+ # deprecate :safdfa, nil, 2018, 12
15
+ # deprecate :safdfa, nil, 2019, 03
16
+ #
17
+ # # good
18
+ # deprecate :safdfa, nil, 2019, 04
19
+ #
20
+ class Deprecations < Cop
21
+
22
+ MSG = "Remove `deprecate` calls with dates in the past, along with " \
23
+ "the methods they deprecate, or expand the deprecation horizons to " \
24
+ "a future date"
25
+
26
+ def on_send(node)
27
+ _receiver, method_name, *args = *node
28
+ return unless method_name == :deprecate
29
+
30
+ scheduled_year = args[2].children.last
31
+ scheduled_month = args[3].children.last
32
+
33
+ current_time = Time.now
34
+
35
+ current_year = current_time.year
36
+ current_month = current_time.month
37
+
38
+ if current_year >= scheduled_year || (current_year == scheduled_year && current_month >= scheduled_month)
39
+ add_offense(node)
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def message(node)
46
+ format(MSG, method: node.method_name)
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,27 @@
1
+ #!/bin/sh
2
+
3
+ # cp /etc/ssl/openssl.cnf . # copied from OpenSSL 1.1.1b source
4
+
5
+ rm -rf demoCA/ server/ client/
6
+
7
+ mkdir demoCA demoCA/private demoCA/newcerts
8
+ touch demoCA/index.txt
9
+ echo 00 > demoCA/serial
10
+ openssl genrsa -out demoCA/private/cakey.pem 2048
11
+ openssl req -new -key demoCA/private/cakey.pem -out demoCA/careq.pem -subj "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=CA"
12
+ openssl ca -batch -config openssl.cnf -extensions v3_ca -out demoCA/cacert.pem -startdate 090101000000Z -enddate 491231235959Z -batch -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pem
13
+
14
+ mkdir server
15
+ openssl genrsa -out server/server.key 2048
16
+ openssl req -new -key server/server.key -out server/csr.pem -subj "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=localhost"
17
+ openssl ca -batch -config openssl.cnf -startdate 090101000000Z -enddate 491231235959Z -in server/csr.pem -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -out server/cert.pem
18
+
19
+ mkdir client
20
+ openssl genrsa -out client/client.key 2048
21
+ openssl req -config openssl.cnf -new -key client/client.key -out client/csr.pem -subj "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=client"
22
+ openssl ca -batch -config openssl.cnf -startdate 090101000000Z -enddate 491231235959Z -in client/csr.pem -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -out client/cert.pem
23
+
24
+ cp demoCA/cacert.pem $(git rev-parse --show-toplevel)/test/rubygems/ca_cert.pem
25
+ cp server/cert.pem $(git rev-parse --show-toplevel)/test/rubygems/ssl_cert.pem
26
+ cp server/server.key $(git rev-parse --show-toplevel)/test/rubygems/ssl_key.pem
27
+ cat client/cert.pem client/client.key > $(git rev-parse --show-toplevel)/test/rubygems/client.pem
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
  require 'openssl'
3
3
 
4
- private_key_path = '../../test/rubygems/private_key.pem'
5
- private_key_path = File.expand_path private_key_path, __FILE__
4
+ test_path = File.expand_path('../../test/rubygems', __FILE__)
5
+
6
+ private_key_path = "#{test_path}/private_key.pem"
6
7
 
7
8
  key = OpenSSL::PKey::RSA.new File.read private_key_path
8
9
 
9
10
  cipher = OpenSSL::Cipher.new 'DES-CBC'
10
11
 
11
- encrypted_key_path = '../../test/rubygems/encrypted_private_key.pem'
12
- encrypted_key_path = File.expand_path encrypted_key_path, __FILE__
12
+ encrypted_key_path = "#{test_path}/encrypted_private_key.pem"
13
13
 
14
14
  open encrypted_key_path, 'w' do |io|
15
15
  io.write key.to_pem cipher, 'Foo bar'
@@ -5,14 +5,12 @@ require 'fileutils'
5
5
 
6
6
  URIS = [
7
7
  URI('https://rubygems.org'),
8
+ URI('https://www.rubygems.org'),
8
9
  URI('https://index.rubygems.org'),
9
10
  URI('https://staging.rubygems.org'),
10
- URI('https://fastly.rubygems.org'),
11
- URI('https://rubygems.global.ssl.fastly.net'),
12
11
  ].freeze
13
12
 
14
13
  HOSTNAMES_TO_MAP = [
15
- 'rubygems.global.ssl.fastly.net',
16
14
  'rubygems.org',
17
15
  'index.rubygems.org'
18
16
  ].freeze
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubygems-update
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Weirich
@@ -13,10 +13,10 @@ authors:
13
13
  - André Arko
14
14
  - Evan Phoenix
15
15
  - Hiroshi SHIBATA
16
- autorequire:
16
+ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2018-12-19 00:00:00.000000000 Z
19
+ date: 2020-12-09 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: builder
@@ -555,6 +555,7 @@ files:
555
555
  - lib/rubygems/resolver/stats.rb
556
556
  - lib/rubygems/resolver/vendor_set.rb
557
557
  - lib/rubygems/resolver/vendor_specification.rb
558
+ - lib/rubygems/s3_uri_signer.rb
558
559
  - lib/rubygems/safe_yaml.rb
559
560
  - lib/rubygems/security.rb
560
561
  - lib/rubygems/security/policies.rb
@@ -577,9 +578,8 @@ files:
577
578
  - lib/rubygems/specification.rb
578
579
  - lib/rubygems/specification_policy.rb
579
580
  - lib/rubygems/ssl_certs/.document
580
- - lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem
581
- - lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem
582
- - lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem
581
+ - lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem
582
+ - lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem
583
583
  - lib/rubygems/stub_specification.rb
584
584
  - lib/rubygems/syck_hack.rb
585
585
  - lib/rubygems/test_case.rb
@@ -781,7 +781,9 @@ files:
781
781
  - test/rubygems/wrong_key_cert_32.pem
782
782
  - util/CL2notes
783
783
  - util/ci
784
+ - util/cops/deprecations.rb
784
785
  - util/create_certs.rb
786
+ - util/create_certs.sh
785
787
  - util/create_encrypted_key.rb
786
788
  - util/generate_spdx_license_list.rb
787
789
  - util/patch_with_prs.rb
@@ -793,7 +795,7 @@ licenses:
793
795
  - Ruby
794
796
  - MIT
795
797
  metadata: {}
796
- post_install_message:
798
+ post_install_message:
797
799
  rdoc_options:
798
800
  - "--main"
799
801
  - README.md
@@ -811,9 +813,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
811
813
  - !ruby/object:Gem::Version
812
814
  version: '0'
813
815
  requirements: []
814
- rubyforge_project:
815
- rubygems_version: 2.7.6
816
- signing_key:
816
+ rubyforge_project:
817
+ rubygems_version: 2.7.6.2
818
+ signing_key:
817
819
  specification_version: 4
818
820
  summary: RubyGems is a package management framework for Ruby.
819
821
  test_files: []
@@ -1,23 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
3
- MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4
- d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
5
- ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
6
- MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
7
- LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
8
- RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
9
- +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
10
- PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
11
- xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
12
- Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
13
- hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
14
- EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
15
- MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
16
- FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
17
- nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
18
- eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
19
- hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
20
- Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
21
- vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
22
- +OkuE6N36B9K
23
- -----END CERTIFICATE-----
@@ -1,25 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
3
- MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
4
- IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
5
- MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
6
- FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
7
- bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
8
- dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
9
- H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
10
- uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
11
- mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
12
- a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
13
- E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
14
- WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
15
- VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
16
- Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
17
- cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
18
- IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
19
- AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
20
- YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
21
- 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
22
- Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
23
- c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
24
- mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
25
- -----END CERTIFICATE-----