password_list_generator 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14ec229ec1b4d16718129820ccfb099e31f902f4
4
- data.tar.gz: fa5fe3f5e8b9be74f2c6fbc0518e043daf6f2dcd
3
+ metadata.gz: 9bdd1cef551224b9ebf74dec8a0821d389944a07
4
+ data.tar.gz: 40baf3adb4abbce4ffcab230ca45d7dee295ce2c
5
5
  SHA512:
6
- metadata.gz: b6341b42a9d6e4cd2e23444265e2e2bfac502e065f4171bf4decf154c2bdfa7fcaaf9539d17d7aa57295c84af6e464914f0874b3d761c8029b0e786bebe2bdca
7
- data.tar.gz: ac0133d4ad4b8007336ba30f7d427f0c879460aeb3a07c2c08143fea72fde33ba6b95a774c4dd49eb1a725780dfec60a9a8d771ff66c21eb5bccb787e8c3e9c4
6
+ metadata.gz: 09525abe4be43b69596b119a294e388ad262a2dac5777bbd7667365803795fb9488566f5ca6fda1e331ced6e534e02854e3c7d88833c84d142157699105242c9
7
+ data.tar.gz: a7837d70e510f2a5772534759ada21100efd9d9bcda39a8a4c0774e306d2551abfced25b1d959319db8a3461456d03002be08ce396ce3531b7fb21843a04274d
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ /.DS_Store
1
2
  /password_list_generator*.gem
2
3
  /password.txt
3
4
  /coverage/
data/Guardfile CHANGED
@@ -9,8 +9,8 @@ guard :minitest do
9
9
 
10
10
  # with Minitest::Spec
11
11
  watch(%r{^spec/(.*)_spec\.rb})
12
+ watch(%r{^lib/password_list_generator/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
12
13
  watch(%r{^lib/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
13
- watch(%r{^lib/password_generator/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
14
14
  watch(%r{^bin/pwgen}) { |m| "spec/lib/pwgen_spec.rb" }
15
15
  watch(%r{^spec/spec_helper\.rb}) { 'spec' }
16
16
  end
data/README.md CHANGED
@@ -9,22 +9,29 @@ PasswordListGenerator
9
9
 
10
10
  ## Description
11
11
 
12
- Generate a list of passwords from the command line
12
+ Generate a list of passwords from the command line. The complexity of the password can be passed in through the CLI.
13
13
 
14
14
  ## Installation
15
15
 
16
- gem install password_list_generator
16
+ PasswordListGenerator is cryptographically signed. To be sure the gem you install hasn't been tampered with:
17
+
18
+ Add my public key (if you haven't already) as a trusted certificate gem
19
+
20
+ > gem cert --add <(curl -Ls https://raw.github.com/stephaneliu/password_generator/master/certs/stephaneliu_gem.pem)
21
+ > gem install password_list_generator -P HighSecurity.
22
+
23
+ Warning: This may cause installation to fail if non-signed depenedent gems are also being installed.
17
24
 
18
25
  ## Usage
19
26
 
20
- > pwgen
21
- > pwgen -h --> see more options
27
+ > pwgen
28
+ > pwgen -h # see more options
22
29
 
23
30
  ## Contributing
24
31
 
25
32
  1. Fork it
26
33
  2. Create your feature branch (`git checkout -b my-awesomie-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some awesome feature'`)
34
+ 3. Commit your changes (`git commit -am 'My some awesome feature'`)
28
35
  4. Push to branch (`git push origin my-awesome-feature`)
29
36
  5. Create a new Pull Request
30
37
 
data/bin/pwgen CHANGED
@@ -91,17 +91,23 @@ end
91
91
 
92
92
  opts.parse!
93
93
 
94
- passwords = PasswordListGenerator::Generator.new(options).generate
95
- file = options.output_file
96
-
97
- system "echo ' ' > #{file} \n\n"
98
- system "echo 'Generated passwords meet the following requirements: ' >> #{file}"
99
- system "echo 'Must have at least one lower case alphabetic character (a - z)' >> #{file}"
100
- system "echo 'Must have at least one special character (!@#\$\%^&*())' >> #{file}" if options.symbol
101
- system "echo 'Must have at least one numeric character (0 -9)' >> #{file}" if options.numeric
102
- system "echo 'Must have at least one upper case alphabetic character (A - Z)' >> #{file}" if options.uppercase
103
- system "echo 'Must have at least #{options.min} characters' >> #{file}"
104
- system "echo 'Must have no more than #{options.max} characters' >> #{file}"
105
- system "echo ' ' >> #{file}"
106
- system "echo '" + passwords.map(&:to_s).join("\n\n") + "' >> #{file}"
107
- puts "#{options.count} random passwords were generated into #{file}"
94
+ begin
95
+ passwords = PasswordListGenerator::Generator.new(options).generate
96
+
97
+ file = options.output_file
98
+
99
+ system "echo ' ' > #{file} \n\n"
100
+ system "echo 'Generated passwords meet the following requirements: ' >> #{file}"
101
+ system "echo 'Must have at least one lower case alphabetic character (a - z)' >> #{file}"
102
+ system "echo 'Must have at least one special character (!@#\$\%^&*())' >> #{file}" if options.symbol
103
+ system "echo 'Must have at least one numeric character (0 -9)' >> #{file}" if options.numeric
104
+ system "echo 'Must have at least one upper case alphabetic character (A - Z)' >> #{file}" if options.uppercase
105
+ system "echo 'Must have at least #{options.min} characters' >> #{file}"
106
+ system "echo 'Must have no more than #{options.max} characters' >> #{file}"
107
+ system "echo ' ' >> #{file}"
108
+ system "echo '" + passwords.map(&:to_s).join("\n\n") + "' >> #{file}"
109
+ puts "#{options.count} random passwords were generated into #{file}"
110
+ rescue Exception => e
111
+ puts e
112
+ puts "Try viewing options with pwgen -h"
113
+ end
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDYDCCAkigAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQ0wCwYDVQQDDARzbGl1
3
+ MRUwEwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcN
4
+ MTQwMzAzMjEzMjU3WhcNMTUwMzAzMjEzMjU3WjA7MQ0wCwYDVQQDDARzbGl1MRUw
5
+ EwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0G
6
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDETtQzkz09Tm54FFE1ECRs8VQsEJPE
7
+ 3p5x9K43lDOWv/QObMkwGAoRJc2iAJ59OUOeM59vz8806BjeAqZ4pivtGViaZVYM
8
+ bvHUEALC9xwwSpAMAd6GpW1OMYHHYV0XeoqYKpOc9mCMqmI5PyewQIS1mxq4HlOz
9
+ iR+e2ABFa5Ugp3LbDbIDsuImhEdjjvVX72GRRYTQhHsluJZD/fcBK++2PDJE/zEy
10
+ ejqpmIMRaseISuUdIMl/2Y7ehO+oWhYXDRevJzU4GZVwpltInBSKNahaGIjmC1oY
11
+ dYtOy2EAdtl2kfRErNMOLKuayAcFDmm9ACGi4sD1cjKM6CPyATzaoheBAgMBAAGj
12
+ bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRu4/jxuld5bmHt
13
+ e5EtflKmkP5mkjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
14
+ gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAvGnJ2PRHBBJZ3eL2
15
+ J7YTL2CY2/tZCAZ160ljdv8wvzSbbW574KpBwEoAUN6NT06+sWt9Pz/dwrRHy5Np
16
+ 76/Gu27IsybQyzvvie8z+4DGeCpuK30KmtgS4KNffwt16iCU3I8iTNzAXJgSGIsG
17
+ 7PZhAmnHSo4QibVAaw7FWuRdk5CsaSz8yQJW74a7XO7c1aV1pjl7nKD7akT4auov
18
+ qFZM2+znLjNqWRtiu1wx/fTPEos6bi310efPBwbAOk1kALR5pY/mqPhx3wG51jfD
19
+ AjoDi8ANvA6BEjpDaK8BkRlQjTOYplmgVlohNURSqxIVo2tnsZyvW+Rl7RWIUVGt
20
+ ZaPiXQ==
21
+ -----END CERTIFICATE-----
@@ -9,28 +9,37 @@ module PasswordListGenerator
9
9
 
10
10
  def generate
11
11
  passwords = []
12
-
13
- 1.upto(config.count) do
14
- valid = false
15
-
16
- until valid
17
- random_size = (config.min..config.max).to_a.shuffle.first
18
- password = Password.new(random_string, config)
19
-
20
- if password.valid?
21
- passwords << password
22
- valid = true
23
- end
24
- end
25
- end
12
+ tries = 0
13
+
14
+ catch :no_valid_passwords do
15
+ 1.upto(config.count) do
16
+ tries = 0
17
+ valid = false
18
+
19
+ until valid
20
+ random_size = (config.min..config.max).to_a.shuffle.first
21
+ password = Password.new(random_string(random_size), config)
22
+
23
+ if password.valid?
24
+ passwords << password
25
+ valid = true
26
+ else
27
+ tries += 1
28
+ throw :no_valid_passwords if tries > 10
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ raise "There was a problem creating valid passwords." if tries > 10
26
35
 
27
36
  passwords
28
37
  end
29
38
 
30
39
  private
31
40
 
32
- def random_string
33
- (1..random_size).map {characters_set[random_number]}.join
41
+ def random_string(size)
42
+ (1..size).map {characters_set[random_number]}.join
34
43
  end
35
44
 
36
45
  def random_number
@@ -1,3 +1,3 @@
1
1
  module PasswordListGenerator
2
- VERSION="0.4.4"
2
+ VERSION="0.4.5"
3
3
  end
@@ -12,12 +12,11 @@ Gem::Specification.new do |gem|
12
12
  gem.homepage = 'https://github.com/stephaneliu/password_generator'
13
13
  # gem s.date = '2013-10-24'
14
14
  gem.files = `git ls-files`.split($/)
15
- puts "exe: #{gem.files.grep(%r{^bin/}).map {|f| File.basename(f)}}"
16
15
  gem.executables = gem.files.grep(%r{^bin/}).map {|f| File.basename(f)}
17
16
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
17
  gem.require_paths = ['lib']
19
- gem.cert_chain = ['certs/stephaneliu.pem']
20
- gem.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
18
+ gem.cert_chain = ['certs/stephaneliu_gem.pem']
19
+ gem.signing_key = File.expand_path("~/.ssh/stephaneliu_private_gem.pem") if $0 =~ /gem\z/
21
20
 
22
21
  gem.add_development_dependency 'simplecov', '>= 0.7'
23
22
  gem.add_development_dependency 'coveralls', '>= 0.7.0'
@@ -0,0 +1,86 @@
1
+ require_relative 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe PasswordListGenerator::Generator do
5
+
6
+ describe 'initialization' do
7
+ it 'should build_characters_set' do
8
+ config = OpenStruct.new
9
+ generator = PasswordListGenerator::Generator.new(config)
10
+ generator.characters_set.wont_equal nil
11
+ end
12
+
13
+ it 'character_set should have uppercase' do
14
+ config = OpenStruct.new(uppercase: true)
15
+ generator = PasswordListGenerator::Generator.new(config)
16
+ generator.characters_set.find {|char| /[A-Z]/ === char}.nil?.must_equal false
17
+
18
+ config = OpenStruct.new(uppercase: false)
19
+ generator = PasswordListGenerator::Generator.new(config)
20
+ generator.characters_set.find {|char| /[A-Z]/ === char}.nil?.must_equal true
21
+ end
22
+
23
+ it 'character_set should have numeric' do
24
+ config = OpenStruct.new(numeric: true)
25
+ generator = PasswordListGenerator::Generator.new(config)
26
+ generator.characters_set.find {|char| /\d/ === char}.nil?.must_equal false
27
+
28
+ config = OpenStruct.new(numeric: false)
29
+ generator = PasswordListGenerator::Generator.new(config)
30
+ generator.characters_set.find {|char| /\d/ === char}.nil?.must_equal true
31
+ end
32
+
33
+ it 'character_set should have symbol when configured' do
34
+ config = OpenStruct.new(symbol: true)
35
+ generator = PasswordListGenerator::Generator.new(config)
36
+ generator.characters_set.find {|char| /\W/ === char}.nil?.must_equal false
37
+
38
+ config = OpenStruct.new(symbol: false)
39
+ generator = PasswordListGenerator::Generator.new(config)
40
+ generator.characters_set.find {|char| /\W/ === char}.nil?.must_equal true
41
+ end
42
+
43
+ it 'should not include ambiguous characters' do
44
+ config = OpenStruct.new(uppercase: true, numeric: true)
45
+ generator = PasswordListGenerator::Generator.new(config)
46
+ ambiguous = %w(i o 0 1 l 0 I)
47
+
48
+ generator.characters_set.any? {|char| ambiguous.include? char}.must_equal false
49
+ end
50
+ end
51
+
52
+ describe '.generate' do
53
+ it "should generate the correct number of passwords" do
54
+ count = 10
55
+ config = OpenStruct.new(count: count, min: 5, max: 10)
56
+ generator = PasswordListGenerator::Generator.new(config)
57
+
58
+ generator.generate.size.must_equal count
59
+ end
60
+
61
+ it "should be random" do
62
+ config = OpenStruct.new(count: 100, min: 5, max: 10)
63
+ invalid_password = PasswordListGenerator::Password.new("a", config)
64
+ generator = PasswordListGenerator::Generator.new(config)
65
+ passwords = generator.generate
66
+
67
+ passwords.each do |password|
68
+ passwords.select {|pw| pw == password}.size.must_equal 1
69
+ end
70
+ end
71
+
72
+ it "should be deterministic" do
73
+ config = OpenStruct.new(count: 2, min: 5, max: 10)
74
+ invalid_password = PasswordListGenerator::Password.new("a", config)
75
+ generator = PasswordListGenerator::Generator.new(config)
76
+
77
+ PasswordListGenerator::Password.stub :new, invalid_password do
78
+ begin
79
+ passwords = generator.generate
80
+ rescue Exception => e
81
+ passwords.must_equal nil
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: password_list_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephane Liu
@@ -12,25 +12,25 @@ cert_chain:
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIDYDCCAkigAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQ0wCwYDVQQDDARzbGl1
14
14
  MRUwEwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcN
15
- MTMxMTIxMDgyMjMwWhcNMTQxMTIxMDgyMjMwWjA7MQ0wCwYDVQQDDARzbGl1MRUw
15
+ MTQwMzAzMjEzMjU3WhcNMTUwMzAzMjEzMjU3WjA7MQ0wCwYDVQQDDARzbGl1MRUw
16
16
  EwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0G
17
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1PHip2Oa8Pf42ovmPUgAZ2Gv1hTOi
18
- 4ZJBdq/6PUNBAmFTHhBvToRW++y5fvBzOTg1YkDHF51l7vcGbqpuKDBleY7COiPD
19
- nR+KUQQ+rRD26XRdtlOacGo3ZjRBJ0aDBV6PITMRda7HQijXZ3rVS2j7gb+YoQDw
20
- 5I68sZEsjX9/a6C3Ac0Ax4MBZL172KSLzaKCTjdvrftdQm4lWQ1hpouKYjXNtNIO
21
- +JSVMszCbZFXVq9O21cer/AHaB49eCQ0Pyd10vhGRs70I0usdrPtN4XbIeOK1lgi
22
- JIjQ/4nHXjo2KCwW0+dt1YwJUI/7AT75v94O5aCbb24ENZPko/gn7PbLAgMBAAGj
23
- bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBT/tqKs2lU2i9D1
24
- RjjQsbYTk0DAmjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
25
- gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEALD94EwV7vOWz3tq0
26
- KITiDYO/0U7e9MW80gR7QBH+20sBmY4ONEmk1IuY490LePQAneHuvMyQRxK4i81b
27
- +v0HUVLvCxtyZIUeluQaSPt76USpyQzrxV+WCisT4Ckw0yi/04h+UKDyc7Zf4mok
28
- 0tmihH5qdrq9+tHI/QC981zw2cZeWfr74Wek3mUzHZm9Z+Jou38kyd/hDSUaRJpn
29
- aC0qBC/AkPKtDcdl1OF4l5sjq5/aTCRVW7uXJ2G7YRWrGdqgiKEC5YmEFuxT/wVK
30
- u4D3Um/AnYRhXT9ydJk2pcbzNsb30/ojfrqf3rTrJRfXv1/JYpDOfqFBOrMYkuw1
31
- nE3D5g==
17
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDETtQzkz09Tm54FFE1ECRs8VQsEJPE
18
+ 3p5x9K43lDOWv/QObMkwGAoRJc2iAJ59OUOeM59vz8806BjeAqZ4pivtGViaZVYM
19
+ bvHUEALC9xwwSpAMAd6GpW1OMYHHYV0XeoqYKpOc9mCMqmI5PyewQIS1mxq4HlOz
20
+ iR+e2ABFa5Ugp3LbDbIDsuImhEdjjvVX72GRRYTQhHsluJZD/fcBK++2PDJE/zEy
21
+ ejqpmIMRaseISuUdIMl/2Y7ehO+oWhYXDRevJzU4GZVwpltInBSKNahaGIjmC1oY
22
+ dYtOy2EAdtl2kfRErNMOLKuayAcFDmm9ACGi4sD1cjKM6CPyATzaoheBAgMBAAGj
23
+ bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRu4/jxuld5bmHt
24
+ e5EtflKmkP5mkjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
25
+ gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAvGnJ2PRHBBJZ3eL2
26
+ J7YTL2CY2/tZCAZ160ljdv8wvzSbbW574KpBwEoAUN6NT06+sWt9Pz/dwrRHy5Np
27
+ 76/Gu27IsybQyzvvie8z+4DGeCpuK30KmtgS4KNffwt16iCU3I8iTNzAXJgSGIsG
28
+ 7PZhAmnHSo4QibVAaw7FWuRdk5CsaSz8yQJW74a7XO7c1aV1pjl7nKD7akT4auov
29
+ qFZM2+znLjNqWRtiu1wx/fTPEos6bi310efPBwbAOk1kALR5pY/mqPhx3wG51jfD
30
+ AjoDi8ANvA6BEjpDaK8BkRlQjTOYplmgVlohNURSqxIVo2tnsZyvW+Rl7RWIUVGt
31
+ ZaPiXQ==
32
32
  -----END CERTIFICATE-----
33
- date: 2013-11-21 00:00:00.000000000 Z
33
+ date: 2014-03-03 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: simplecov
@@ -78,12 +78,13 @@ files:
78
78
  - README.md
79
79
  - Rakefile
80
80
  - bin/pwgen
81
- - certs/stephaneliu.pem
81
+ - certs/stephaneliu_gem.pem
82
82
  - lib/password_list_generator.rb
83
83
  - lib/password_list_generator/generator.rb
84
84
  - lib/password_list_generator/password.rb
85
85
  - lib/password_list_generator/version.rb
86
86
  - password_list_generator.gemspec
87
+ - spec/generator_spec.rb
87
88
  - spec/password_spec.rb
88
89
  - spec/spec_helper.rb
89
90
  homepage: https://github.com/stephaneliu/password_generator
@@ -106,10 +107,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
107
  version: '0'
107
108
  requirements: []
108
109
  rubyforge_project:
109
- rubygems_version: 2.1.10
110
+ rubygems_version: 2.1.11
110
111
  signing_key:
111
112
  specification_version: 4
112
113
  summary: Generate list of passwords easily from command line
113
114
  test_files:
115
+ - spec/generator_spec.rb
114
116
  - spec/password_spec.rb
115
117
  - spec/spec_helper.rb
metadata.gz.sig CHANGED
Binary file
@@ -1,21 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDYDCCAkigAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQ0wCwYDVQQDDARzbGl1
3
- MRUwEwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcN
4
- MTMxMTIxMDgyMjMwWhcNMTQxMTIxMDgyMjMwWjA7MQ0wCwYDVQQDDARzbGl1MRUw
5
- EwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0G
6
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1PHip2Oa8Pf42ovmPUgAZ2Gv1hTOi
7
- 4ZJBdq/6PUNBAmFTHhBvToRW++y5fvBzOTg1YkDHF51l7vcGbqpuKDBleY7COiPD
8
- nR+KUQQ+rRD26XRdtlOacGo3ZjRBJ0aDBV6PITMRda7HQijXZ3rVS2j7gb+YoQDw
9
- 5I68sZEsjX9/a6C3Ac0Ax4MBZL172KSLzaKCTjdvrftdQm4lWQ1hpouKYjXNtNIO
10
- +JSVMszCbZFXVq9O21cer/AHaB49eCQ0Pyd10vhGRs70I0usdrPtN4XbIeOK1lgi
11
- JIjQ/4nHXjo2KCwW0+dt1YwJUI/7AT75v94O5aCbb24ENZPko/gn7PbLAgMBAAGj
12
- bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBT/tqKs2lU2i9D1
13
- RjjQsbYTk0DAmjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
14
- gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEALD94EwV7vOWz3tq0
15
- KITiDYO/0U7e9MW80gR7QBH+20sBmY4ONEmk1IuY490LePQAneHuvMyQRxK4i81b
16
- +v0HUVLvCxtyZIUeluQaSPt76USpyQzrxV+WCisT4Ckw0yi/04h+UKDyc7Zf4mok
17
- 0tmihH5qdrq9+tHI/QC981zw2cZeWfr74Wek3mUzHZm9Z+Jou38kyd/hDSUaRJpn
18
- aC0qBC/AkPKtDcdl1OF4l5sjq5/aTCRVW7uXJ2G7YRWrGdqgiKEC5YmEFuxT/wVK
19
- u4D3Um/AnYRhXT9ydJk2pcbzNsb30/ojfrqf3rTrJRfXv1/JYpDOfqFBOrMYkuw1
20
- nE3D5g==
21
- -----END CERTIFICATE-----