Commit 422b350a10a5ae5748847e960178b74d03a2af0e

Authored by Braulio Bhavamitra
1 parent 193d5352

rails4: rename contacts, gdata and ezcrypto to theis gems names

Showing 235 changed files with 10909 additions and 10914 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 235 files displayed.

lib/contacts
... ... @@ -1 +0,0 @@
1   -../vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts
2 0 \ No newline at end of file
lib/contacts.rb
... ... @@ -1 +0,0 @@
1   -../vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts.rb
2 0 \ No newline at end of file
lib/ezcrypto.rb
... ... @@ -1 +0,0 @@
1   -../vendor/ezcrypto-0.7.2/lib/ezcrypto.rb
2 0 \ No newline at end of file
lib/gdata
... ... @@ -1 +0,0 @@
1   -../vendor/gdata-1.1.1/lib/gdata
2 0 \ No newline at end of file
lib/gdata.rb
... ... @@ -1 +0,0 @@
1   -../vendor/gdata-1.1.1/lib/gdata.rb
2 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/LICENSE
... ... @@ -1,10 +0,0 @@
1   -Copyright (c) 2006, Lucas Carlson, MOG
2   -All rights reserved.
3   -
4   -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5   -
6   -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7   -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8   -Neither the name of the Lucas Carlson nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9   -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
10   -
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/README
... ... @@ -1,47 +0,0 @@
1   -== Welcome to Contacts
2   -
3   -Contacts is a universal interface to grab contact list information from various providers including Hotmail, AOL, Gmail and Yahoo.
4   -
5   -== Download
6   -
7   -* gem install contacts
8   -* http://github.com/cardmagic/contacts
9   -* git clone git://github.com/cardmagic/contacts.git
10   -
11   -== Background
12   -
13   -For a long time, the only way to get a list of contacts from your free online email accounts was with proprietary PHP scripts that would cost you $50. The act of grabbing that list is a simple matter of screen scrapping and this library gives you all the functionality you need. Thanks to the generosity of the highly popular Rails website MOG (http://mog.com) for allowing this library to be released open-source to the world. It is easy to extend this library to add new free email providers, so please contact the author if you would like to help.
14   -
15   -== Usage
16   -
17   - Contacts::Hotmail.new(login, password).contacts # => [["name", "foo@bar.com"], ["another name", "bow@wow.com"]]
18   - Contacts::Yahoo.new(login, password).contacts
19   - Contacts::Gmail.new(login, password).contacts
20   -
21   - Contacts.new(:gmail, login, password).contacts
22   - Contacts.new(:hotmail, login, password).contacts
23   - Contacts.new(:yahoo, login, password).contacts
24   -
25   - Contacts.guess(login, password).contacts
26   -
27   -Notice there are three ways to use this library so that you can limit the use as much as you would like in your particular application. The Contacts.guess method will automatically concatenate all the address book contacts from each of the successful logins in the case that a username password works across multiple services.
28   -
29   -== Examples
30   -
31   -See the examples/ directory.
32   -
33   -== Authors
34   -
35   -* Lucas Carlson from MOG (mailto:lucas@rufy.com) - http://mog.com
36   -
37   -== Contributors
38   -
39   -* Britt Selvitelle from Twitter (mailto:anotherbritt@gmail.com) - http://twitter.com
40   -* Tony Targonski from GigPark (mailto:tony@gigpark.com) - http://gigpark.com
41   -* Waheed Barghouthi from Watwet (mailto:waheed.barghouthi@gmail.com) - http://watwet.com
42   -* Glenn Sidney from Glenn Fu (mailto:glenn@glennfu.com) - http://glennfu.com
43   -* Brian McQuay from Onomojo (mailto:brian@onomojo.com) - http://onomojo.com
44   -* Adam Hunter (mailto:adamhunter@me.com) - http://adamhunter.me/
45   -
46   -This library is released under the terms of the BSD.
47   -
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/Rakefile
... ... @@ -1,91 +0,0 @@
1   -require 'rubygems'
2   -require 'rake'
3   -require 'rake/testtask'
4   -require 'rake/rdoctask'
5   -require 'rake/gempackagetask'
6   -require 'rake/contrib/rubyforgepublisher'
7   -require 'lib/contacts'
8   -
9   -PKG_VERSION = Contacts::VERSION
10   -
11   -PKG_FILES = FileList[
12   - "lib/**/*", "bin/*", "test/**/*", "[A-Z]*", "Rakefile", "doc/**/*", "examples/**/*"
13   -] - ["test/accounts.yml"]
14   -
15   -desc "Default Task"
16   -task :default => [ :test ]
17   -
18   -# Run the unit tests
19   -desc "Run all unit tests"
20   -Rake::TestTask.new("test") { |t|
21   - t.libs << "lib"
22   - t.pattern = 'test/*/*_test.rb'
23   - t.verbose = true
24   -}
25   -
26   -# Make a console, useful when working on tests
27   -desc "Generate a test console"
28   -task :console do
29   - verbose( false ) { sh "irb -I lib/ -r 'contacts'" }
30   -end
31   -
32   -# Genereate the RDoc documentation
33   -desc "Create documentation"
34   -Rake::RDocTask.new("doc") { |rdoc|
35   - rdoc.title = "Contact List - ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail"
36   - rdoc.rdoc_dir = 'doc'
37   - rdoc.rdoc_files.include('README')
38   - rdoc.rdoc_files.include('lib/**/*.rb')
39   -}
40   -
41   -# Genereate the package
42   -spec = Gem::Specification.new do |s|
43   -
44   - #### Basic information.
45   -
46   - s.name = 'adamhunter-contacts'
47   - s.version = PKG_VERSION
48   - s.summary = <<-EOF
49   - Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail
50   - EOF
51   - s.description = <<-EOF
52   - Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail
53   - EOF
54   -
55   - #### Which files are to be included in this gem? Everything! (Except CVS directories.)
56   -
57   - s.files = PKG_FILES
58   -
59   - #### Load-time details: library and application (you will need one or both).
60   -
61   - s.require_path = 'lib'
62   - s.autorequire = 'contacts'
63   -
64   - s.add_dependency('json', '>= 0.4.1')
65   - s.add_dependency('gdata', '= 1.1.1')
66   - s.requirements << "A json parser, the gdata ruby gem"
67   -
68   - #### Documentation and testing.
69   -
70   - s.has_rdoc = true
71   -
72   - #### Author and project details.
73   -
74   - s.author = "Lucas Carlson"
75   - s.email = "lucas@rufy.com"
76   - s.homepage = "http://rubyforge.org/projects/contacts"
77   -end
78   -
79   -Rake::GemPackageTask.new(spec) do |pkg|
80   - pkg.need_zip = true
81   - pkg.need_tar = true
82   -end
83   -
84   -desc "Report code statistics (KLOCs, etc) from the application"
85   -task :stats do
86   - require 'code_statistics'
87   - CodeStatistics.new(
88   - ["Library", "lib"],
89   - ["Units", "test"]
90   - ).to_s
91   -end
92 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/contacts.gemspec
... ... @@ -1,14 +0,0 @@
1   -Gem::Specification.new do |s|
2   - s.name = "contacts"
3   - s.version = "1.2.0"
4   - s.date = "2009-05-06"
5   - s.summary = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo."
6   - s.email = "lucas@rufy.com"
7   - s.homepage = "http://github.com/cardmagic/contacts"
8   - s.description = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo."
9   - s.has_rdoc = false
10   - s.authors = ["Lucas Carlson"]
11   - s.files = ["LICENSE", "Rakefile", "README", "examples/grab_contacts.rb", "lib/contacts.rb", "lib/contacts/base.rb", "lib/contacts/json_picker.rb", "lib/contacts/gmail.rb", "lib/contacts/aol.rb", "lib/contacts/hotmail.rb", "lib/contacts/plaxo.rb", "lib/contacts/yahoo.rb"]
12   - s.add_dependency("json", ">= 1.1.1")
13   - s.add_dependency('gdata', '>= 1.1.1')
14   -end
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/cruise_config.rb
... ... @@ -1,22 +0,0 @@
1   -# Project-specific configuration for CruiseControl.rb
2   -
3   -Project.configure do |project|
4   -
5   - # Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody)
6   - # if building this on your own CI box, please remove!
7   - project.email_notifier.emails = ['opensource@pivotallabs.com']
8   -
9   - # Set email 'from' field to john@doe.com:
10   - # project.email_notifier.from = 'john@doe.com'
11   -
12   - # Build the project by invoking rake task 'custom'
13   - # project.rake_task = 'custom'
14   -
15   - # Build the project by invoking shell script "build_my_app.sh". Keep in mind that when the script is invoked, current working directory is
16   - # [cruise]/projects/your_project/work, so if you do not keep build_my_app.sh in version control, it should be '../build_my_app.sh' instead
17   - # project.build_command = 'build_my_app.sh'
18   -
19   - # Ping Subversion for new revisions every 5 minutes (default: 30 seconds)
20   - # project.scheduler.polling_interval = 5.minutes
21   -
22   -end
23 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/examples/grab_contacts.rb
... ... @@ -1,12 +0,0 @@
1   -require File.dirname(__FILE__)+"/../lib/contacts"
2   -
3   -login = ARGV[0]
4   -password = ARGV[1]
5   -
6   -Contacts::Gmail.new(login, password).contacts
7   -
8   -Contacts.new(:gmail, login, password).contacts
9   -
10   -Contacts.new("gmail", login, password).contacts
11   -
12   -Contacts.guess(login, password).contacts
13 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/geminstaller.yml
... ... @@ -1,8 +0,0 @@
1   ----
2   -defaults:
3   - install_options: --no-ri --no-rdoc
4   -gems:
5   - - name: json
6   - version: >= 1.1.1
7   - - name: gdata
8   - version: >= 1.1.1
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts.rb
... ... @@ -1,11 +0,0 @@
1   -$:.unshift(File.dirname(__FILE__)+"/contacts/")
2   -
3   -require 'rubygems'
4   -
5   -require 'base'
6   -require 'gmail'
7   -require 'hotmail'
8   -require 'yahoo'
9   -require 'plaxo'
10   -require 'aol'
11   -require 'json_picker'
12 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/aol.rb
... ... @@ -1,147 +0,0 @@
1   -class Hash
2   - def to_query_string
3   - u = ERB::Util.method(:u)
4   - map { |k, v|
5   - u.call(k) + "=" + u.call(v)
6   - }.join("&")
7   - end
8   -end
9   -
10   -class Contacts
11   - class Aol < Base
12   - URL = "http://www.aol.com/"
13   - LOGIN_URL = "https://my.screenname.aol.com/_cqr/login/login.psp"
14   - LOGIN_REFERER_URL = "http://webmail.aol.com/"
15   - LOGIN_REFERER_PATH = "sitedomain=sns.webmail.aol.com&lang=en&locale=us&authLev=0&uitype=mini&loginId=&redirType=js&xchk=false"
16   - AOL_NUM = "29970-343" # this seems to change each time they change the protocol
17   -
18   - CONTACT_LIST_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ContactList.aspx?folder=Inbox&showUserFolders=False"
19   - CONTACT_LIST_CSV_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ABExport.aspx?command=all"
20   - PROTOCOL_ERROR = "AOL has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts"
21   -
22   - def real_connect
23   -
24   - postdata = {
25   - "loginId" => login,
26   - "password" => password,
27   - "rememberMe" => "on",
28   - "_sns_fg_color_" => "",
29   - "_sns_err_color_" => "",
30   - "_sns_link_color_" => "",
31   - "_sns_width_" => "",
32   - "_sns_height_" => "",
33   - "offerId" => "mail-second-en-us",
34   - "_sns_bg_color_" => "",
35   - "sitedomain" => "sns.webmail.aol.com",
36   - "regPromoCode" => "",
37   - "mcState" => "initialized",
38   - "uitype" => "std",
39   - "siteId" => "",
40   - "lang" => "en",
41   - "locale" => "us",
42   - "authLev" => "0",
43   - "siteState" => "",
44   - "isSiteStateEncoded" => "false",
45   - "use_aam" => "0",
46   - "seamless" => "novl",
47   - "aolsubmit" => CGI.escape("Sign In"),
48   - "idType" => "SN",
49   - "usrd" => "",
50   - "doSSL" => "",
51   - "redirType" => "",
52   - "xchk" => "false"
53   - }
54   -
55   - # Get this cookie and stick it in the form to confirm to Aol that your cookies work
56   - data, resp, cookies, forward = get(URL)
57   - postdata["stips"] = cookie_hash_from_string(cookies)["stips"]
58   - postdata["tst"] = cookie_hash_from_string(cookies)["tst"]
59   -
60   - data, resp, cookies, forward, old_url = get(LOGIN_REFERER_URL, cookies) + [URL]
61   - until forward.nil?
62   - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
63   - end
64   -
65   - data, resp, cookies, forward, old_url = get("#{LOGIN_URL}?#{LOGIN_REFERER_PATH}", cookies) + [LOGIN_REFERER_URL]
66   - until forward.nil?
67   - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
68   - end
69   -
70   - doc = Nokogiri::HTML.fragment data
71   - doc.css('input').each do |input|
72   - postdata["usrd"] = input["value"] if input["name"] == "usrd"
73   - end
74   - # parse data for <input name="usrd" value="2726212" type="hidden"> and add it to the postdata
75   -
76   - postdata["SNS_SC"] = cookie_hash_from_string(cookies)["SNS_SC"]
77   - postdata["SNS_LDC"] = cookie_hash_from_string(cookies)["SNS_LDC"]
78   - postdata["LTState"] = cookie_hash_from_string(cookies)["LTState"]
79   - # raise data.inspect
80   -
81   - data, resp, cookies, forward, old_url = post(LOGIN_URL, postdata.to_query_string, cookies, LOGIN_REFERER_URL) + [LOGIN_REFERER_URL]
82   -
83   - until forward.nil?
84   - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
85   - end
86   -
87   - if data.index("Invalid Screen Name or Password.")
88   - raise AuthenticationError, "Username and password do not match"
89   - elsif data.index("Required field must not be blank")
90   - raise AuthenticationError, "Login and password must not be blank"
91   - elsif data.index("errormsg_0_logincaptcha")
92   - raise AuthenticationError, "Captcha error"
93   - elsif data.index("Invalid request")
94   - raise ConnectionError, PROTOCOL_ERROR
95   - elsif cookies == ""
96   - raise ConnectionError, PROTOCOL_ERROR
97   - end
98   -
99   - @cookies = cookies
100   - end
101   -
102   - def contacts
103   - postdata = {
104   - "file" => 'contacts',
105   - "fileType" => 'csv'
106   - }
107   -
108   - return @contacts if @contacts
109   - if connected?
110   - data, resp, cookies, forward, old_url = get(CONTACT_LIST_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL]
111   -
112   - until forward.nil?
113   - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
114   - end
115   -
116   - if resp.code_type != Net::HTTPOK
117   - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
118   - end
119   -
120   - # parse data and grab <input name="user" value="8QzMPIAKs2" type="hidden">
121   - doc = Nokogiri::HTML.fragment data
122   - doc.css('input').each do |input|
123   - postdata["user"] = input["value"] if input["name"] == "user"
124   - end
125   -
126   - data, resp, cookies, forward, old_url = get(CONTACT_LIST_CSV_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL]
127   -
128   - if forward.nil?
129   - parse data
130   - else
131   - raise AuthenticationError, "Account cancelled"
132   - end
133   - end
134   - end
135   - private
136   -
137   - def parse(data, options={})
138   - data = CSV.parse(data)
139   - col_names = data.shift
140   - @contacts = data.map do |person|
141   - ["#{person[0]} #{person[1]}", person[4]] unless person[4].empty?
142   - end.compact
143   - end
144   - end
145   -
146   - TYPES[:aol] = Aol
147   -end
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/base.rb
... ... @@ -1,215 +0,0 @@
1   -require "cgi"
2   -require "net/http"
3   -require "net/https"
4   -require "uri"
5   -require "zlib"
6   -require "stringio"
7   -require "thread"
8   -require "erb"
9   -
10   -class Contacts
11   - TYPES = {}
12   - VERSION = "1.2.0"
13   -
14   - class Base
15   - def initialize(login, password)
16   - @login = login
17   - @password = password
18   - @connections = {}
19   - connect
20   - end
21   -
22   - def connect
23   - raise AuthenticationError, "Login and password must not be nil, login: #{@login.inspect}, password: #{@password.inspect}" if @login.nil? || @login.empty? || @password.nil? || @password.empty?
24   - real_connect
25   - end
26   -
27   - def connected?
28   - @cookies && !@cookies.empty?
29   - end
30   -
31   - def contacts(options = {})
32   - return @contacts if @contacts
33   - if connected?
34   - url = URI.parse(contact_list_url)
35   - http = open_http(url)
36   - resp, data = http.get("#{url.path}?#{url.query}",
37   - "Cookie" => @cookies
38   - )
39   -
40   - if resp.code_type != Net::HTTPOK
41   - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
42   - end
43   -
44   - parse(data, options)
45   - end
46   - end
47   -
48   - def login
49   - @attempt ||= 0
50   - @attempt += 1
51   -
52   - if @attempt == 1
53   - @login
54   - else
55   - if @login.include?("@#{domain}")
56   - @login.sub("@#{domain}","")
57   - else
58   - "#{@login}@#{domain}"
59   - end
60   - end
61   - end
62   -
63   - def password
64   - @password
65   - end
66   -
67   - private
68   -
69   - def domain
70   - @d ||= URI.parse(self.class.const_get(:URL)).host.sub(/^www\./,'')
71   - end
72   -
73   - def contact_list_url
74   - self.class.const_get(:CONTACT_LIST_URL)
75   - end
76   -
77   - def address_book_url
78   - self.class.const_get(:ADDRESS_BOOK_URL)
79   - end
80   -
81   - def open_http(url)
82   - c = @connections[Thread.current.object_id] ||= {}
83   - http = c["#{url.host}:#{url.port}"]
84   - unless http
85   - http = Net::HTTP.new(url.host, url.port)
86   - if url.port == 443
87   - http.use_ssl = true
88   - http.verify_mode = OpenSSL::SSL::VERIFY_NONE
89   - end
90   - c["#{url.host}:#{url.port}"] = http
91   - end
92   - http.start unless http.started?
93   - http
94   - end
95   -
96   - def cookie_hash_from_string(cookie_string)
97   - cookie_string.split(";").map{|i|i.split("=", 2).map{|j|j.strip}}.inject({}){|h,i|h[i[0]]=i[1];h}
98   - end
99   -
100   - def parse_cookies(data, existing="")
101   - return existing if data.nil?
102   -
103   - cookies = cookie_hash_from_string(existing)
104   -
105   - data.gsub!(/ ?[\w]+=EXPIRED;/,'')
106   - data.gsub!(/ ?expires=(.*?, .*?)[;,$]/i, ';')
107   - data.gsub!(/ ?(domain|path)=[\S]*?[;,$]/i,';')
108   - data.gsub!(/[,;]?\s*(secure|httponly)/i,'')
109   - data.gsub!(/(;\s*){2,}/,', ')
110   - data.gsub!(/(,\s*){2,}/,', ')
111   - data.sub!(/^,\s*/,'')
112   - data.sub!(/\s*,$/,'')
113   -
114   - data.split(", ").map{|t|t.to_s.split(";").first}.each do |data|
115   - k, v = data.split("=", 2).map{|j|j.strip}
116   - if cookies[k] && v.empty?
117   - cookies.delete(k)
118   - elsif v && !v.empty?
119   - cookies[k] = v
120   - end
121   - end
122   -
123   - cookies.map{|k,v| "#{k}=#{v}"}.join("; ")
124   - end
125   -
126   - def remove_cookie(cookie, cookies)
127   - parse_cookies("#{cookie}=", cookies)
128   - end
129   -
130   - def post(url, postdata, cookies="", referer="")
131   - url = URI.parse(url)
132   - http = open_http(url)
133   - resp, data = http.post(url.path, postdata,
134   - "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0",
135   - "Accept-Encoding" => "gzip",
136   - "Cookie" => cookies,
137   - "Referer" => referer,
138   - "Content-Type" => 'application/x-www-form-urlencoded'
139   - )
140   - data = uncompress(resp, data)
141   - cookies = parse_cookies(resp.response['set-cookie'], cookies)
142   - forward = resp.response['Location']
143   - forward ||= (data =~ /<meta.*?url='([^']+)'/ ? CGI.unescapeHTML($1) : nil)
144   - if (not forward.nil?) && URI.parse(forward).host.nil?
145   - forward = url.scheme.to_s + "://" + url.host.to_s + forward
146   - end
147   - return data, resp, cookies, forward
148   - end
149   -
150   - def get(url, cookies="", referer="")
151   - url = URI.parse(url)
152   - http = open_http(url)
153   - resp, data = http.get("#{url.path}?#{url.query}",
154   - "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0",
155   - "Accept-Encoding" => "gzip",
156   - "Cookie" => cookies,
157   - "Referer" => referer
158   - )
159   - data = uncompress(resp, data)
160   - cookies = parse_cookies(resp.response['set-cookie'], cookies)
161   - forward = resp.response['Location']
162   - if (not forward.nil?) && URI.parse(forward).host.nil?
163   - forward = url.scheme.to_s + "://" + url.host.to_s + forward
164   - end
165   - return data, resp, cookies, forward
166   - end
167   -
168   - def uncompress(resp, data)
169   - case resp.response['content-encoding']
170   - when 'gzip'
171   - gz = Zlib::GzipReader.new(StringIO.new(data))
172   - data = gz.read
173   - gz.close
174   - resp.response['content-encoding'] = nil
175   - # FIXME: Not sure what Hotmail was feeding me with their 'deflate',
176   - # but the headers definitely were not right
177   - when 'deflate'
178   - data = Zlib::Inflate.inflate(data)
179   - resp.response['content-encoding'] = nil
180   - end
181   -
182   - data
183   - end
184   - end
185   -
186   - class ContactsError < StandardError
187   - end
188   -
189   - class AuthenticationError < ContactsError
190   - end
191   -
192   - class ConnectionError < ContactsError
193   - end
194   -
195   - class TypeNotFound < ContactsError
196   - end
197   -
198   - def self.new(type, login, password)
199   - if TYPES.include?(type.to_s.intern)
200   - TYPES[type.to_s.intern].new(login, password)
201   - else
202   - raise TypeNotFound, "#{type.inspect} is not a valid type, please choose one of the following: #{TYPES.keys.inspect}"
203   - end
204   - end
205   -
206   - def self.guess(login, password)
207   - TYPES.inject([]) do |a, t|
208   - begin
209   - a + t[1].new(login, password).contacts
210   - rescue AuthenticationError
211   - a
212   - end
213   - end.uniq
214   - end
215   -end
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/gmail.rb
... ... @@ -1,35 +0,0 @@
1   -require 'gdata'
2   -
3   -class Contacts
4   - class Gmail < Base
5   -
6   - CONTACTS_SCOPE = 'http://www.google.com/m8/feeds/'
7   - CONTACTS_FEED = CONTACTS_SCOPE + 'contacts/default/full/?max-results=1000'
8   -
9   - def contacts
10   - return @contacts if @contacts
11   - end
12   -
13   - def real_connect
14   - @client = GData::Client::Contacts.new
15   - @client.clientlogin(@login, @password)
16   -
17   - feed = @client.get(CONTACTS_FEED).to_xml
18   -
19   - @contacts = feed.elements.to_a('entry').collect do |entry|
20   - title, email = entry.elements['title'].text, nil
21   - entry.elements.each('gd:email') do |e|
22   - email = e.attribute('address').value if e.attribute('primary')
23   - end
24   - [title, email] unless email.nil?
25   - end
26   - @contacts.compact!
27   - rescue GData::Client::AuthorizationError => e
28   - raise AuthenticationError, "Username or password are incorrect"
29   - end
30   -
31   - private
32   -
33   - TYPES[:gmail] = Gmail
34   - end
35   -end
36 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/hotmail.rb
... ... @@ -1,124 +0,0 @@
1   -class Contacts
2   - class Hotmail < Base
3   - URL = "https://login.live.com/login.srf?id=2"
4   - OLD_CONTACT_LIST_URL = "http://%s/cgi-bin/addresses"
5   - NEW_CONTACT_LIST_URL = "http://%s/mail/GetContacts.aspx"
6   - CONTACT_LIST_URL = "http://mpeople.live.com/default.aspx?pg=0"
7   - COMPOSE_URL = "http://%s/cgi-bin/compose?"
8   - PROTOCOL_ERROR = "Hotmail has changed its protocols, please upgrade this library first. If that does not work, report this error at http://rubyforge.org/forum/?group_id=2693"
9   - PWDPAD = "IfYouAreReadingThisYouHaveTooMuchFreeTime"
10   - MAX_HTTP_THREADS = 8
11   -
12   - def real_connect
13   - data, resp, cookies, forward = get(URL)
14   - old_url = URL
15   - until forward.nil?
16   - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
17   - end
18   -
19   - postdata = "PPSX=%s&PwdPad=%s&login=%s&passwd=%s&LoginOptions=2&PPFT=%s" % [
20   - CGI.escape(data.split("><").grep(/PPSX/).first[/=\S+$/][2..-3]),
21   - PWDPAD[0...(PWDPAD.length-@password.length)],
22   - CGI.escape(login),
23   - CGI.escape(password),
24   - CGI.escape(data.split("><").grep(/PPFT/).first[/=\S+$/][2..-3])
25   - ]
26   -
27   - form_url = data.split("><").grep(/form/).first.split[5][8..-2]
28   - data, resp, cookies, forward = post(form_url, postdata, cookies)
29   -
30   - old_url = form_url
31   - until cookies =~ /; PPAuth=/ || forward.nil?
32   - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
33   - end
34   -
35   - if data.index("The e-mail address or password is incorrect")
36   - raise AuthenticationError, "Username and password do not match"
37   - elsif data != ""
38   - raise AuthenticationError, "Required field must not be blank"
39   - elsif cookies == ""
40   - raise ConnectionError, PROTOCOL_ERROR
41   - end
42   -
43   - data, resp, cookies, forward = get("http://mail.live.com/mail", cookies)
44   - until forward.nil?
45   - data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
46   - end
47   -
48   - @domain = URI.parse(old_url).host
49   - @cookies = cookies
50   - rescue AuthenticationError => m
51   - if @attempt == 1
52   - retry
53   - else
54   - raise m
55   - end
56   - end
57   -
58   - def contacts(options = {})
59   - if connected?
60   - url = URI.parse(contact_list_url)
61   - data, resp, cookies, forward = get( contact_list_url, @cookies )
62   -
63   - if resp.code_type != Net::HTTPOK
64   - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
65   - end
66   -
67   - @contacts = []
68   - build_contacts = []
69   - go = true
70   - index = 0
71   -
72   - while(go) do
73   - go = false
74   - url = URI.parse(get_contact_list_url(index))
75   - http = open_http(url)
76   - resp, data = http.get(get_contact_list_url(index), "Cookie" => @cookies)
77   -
78   - email_match_text_beginning = Regexp.escape("http://m.mail.live.com/?rru=compose&amp;to=")
79   - email_match_text_end = Regexp.escape("&amp;")
80   -
81   - raw_html = resp.body.grep(/(?:e|dn)lk[0-9]+/)
82   - raw_html.delete_at 0
83   - raw_html.inject do |memo, row|
84   - c_info = row.match(/(e|dn)lk([0-9])+/)
85   -
86   - # Same contact, or different?
87   - build_contacts << [] if memo != c_info[2]
88   -
89   - # Grab info
90   - case c_info[1]
91   - when "e" # Email
92   - build_contacts.last[1] = row.match(/#{email_match_text_beginning}(.*)#{email_match_text_end}/)[1]
93   - when "dn" # Name
94   - build_contacts.last[0] = row.match(/<a[^>]*>(.+)<\/a>/)[1]
95   - end
96   -
97   - # Set memo to contact id
98   - c_info[2]
99   - end
100   -
101   - go = resp.body.include?("Next page")
102   - index += 1
103   - end
104   -
105   - build_contacts.each do |contact|
106   - unless contact[1].nil?
107   - # Only return contacts with email addresses
108   - contact[1] = CGI::unescape(contact[1])
109   - @contacts << contact
110   - end
111   - end
112   - return @contacts
113   - end
114   - end
115   -
116   - def get_contact_list_url(index)
117   - "http://mpeople.live.com/default.aspx?pg=#{index}"
118   - end
119   -
120   - private
121   -
122   - TYPES[:hotmail] = Hotmail
123   - end
124   -end
125 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/json_picker.rb
... ... @@ -1,16 +0,0 @@
1   -if !Object.const_defined?('ActiveSupport')
2   - require 'json'
3   -end
4   -
5   -class Contacts
6   - def self.parse_json( string )
7   - if Object.const_defined?('ActiveSupport') and
8   - ActiveSupport.const_defined?('JSON')
9   - ActiveSupport::JSON.decode( string )
10   - elsif Object.const_defined?('JSON')
11   - JSON.parse( string )
12   - else
13   - raise 'Contacts requires JSON or Rails (with ActiveSupport::JSON)'
14   - end
15   - end
16   -end
17 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/plaxo.rb
... ... @@ -1,130 +0,0 @@
1   -require 'rexml/document'
2   -
3   -class Contacts
4   - class Plaxo < Base
5   - URL = "http://www.plaxo.com/"
6   - LOGIN_URL = "https://www.plaxo.com/signin"
7   - ADDRESS_BOOK_URL = "http://www.plaxo.com/po3/?module=ab&operation=viewFull&mode=normal"
8   - CONTACT_LIST_URL = "http://www.plaxo.com/axis/soap/contact?_action=getContacts&_format=xml"
9   - PROTOCOL_ERROR = "Plaxo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts"
10   -
11   - def real_connect
12   -
13   - end # real_connect
14   -
15   - def contacts
16   - getdata = "&authInfo.authByEmail.email=%s" % CGI.escape(login)
17   - getdata += "&authInfo.authByEmail.password=%s" % CGI.escape(password)
18   - data, resp, cookies, forward = get(CONTACT_LIST_URL + getdata)
19   -
20   - if resp.code_type != Net::HTTPOK
21   - raise ConnectionError, PROTOCOL_ERROR
22   - end
23   -
24   - parse data
25   - end # contacts
26   -
27   - private
28   - def parse(data, options={})
29   - doc = REXML::Document.new(data)
30   - code = doc.elements['//response/code'].text
31   -
32   - if code == '401'
33   - raise AuthenticationError, "Username and password do not match"
34   - elsif code == '200'
35   - @contacts = []
36   - doc.elements.each('//contact') do |cont|
37   - name = if cont.elements['fullName']
38   - cont.elements['fullName'].text
39   - elsif cont.elements['displayName']
40   - cont.elements['displayName'].text
41   - end
42   - email = if cont.elements['email1']
43   - cont.elements['email1'].text
44   - end
45   - if name || email
46   - @contacts << [name, email]
47   - end
48   - end
49   - @contacts
50   - else
51   - raise ConnectionError, PROTOCOL_ERROR
52   - end
53   -
54   - end # parse
55   -
56   - end # Plaxo
57   -
58   - TYPES[:plaxo] = Plaxo
59   -
60   -end # Contacts
61   -
62   -
63   -# sample contacts responses
64   -=begin
65   -Bad email
66   -=========
67   -<?xml version="1.0" encoding="utf-8" ?>
68   -<ns1:GetContactsResponse xmlns:ns1="Plaxo">
69   - <response>
70   - <code>401</code>
71   - <subCode>1</subCode>
72   - <message>User not found.</message>
73   - </response>
74   -</ns1:GetContactsResponse>
75   -
76   -
77   -Bad password
78   -============
79   -<?xml version="1.0" encoding="utf-8" ?>
80   -<ns1:GetContactsResponse xmlns:ns1="Plaxo">
81   - <response>
82   - <code>401</code>
83   - <subCode>4</subCode>
84   - <message>Bad password or security token.</message>
85   - </response>
86   -</ns1:GetContactsResponse>
87   -
88   -
89   -Success
90   -=======
91   -<?xml version="1.0" encoding="utf-8" ?>
92   -<ns1:GetContactsResponse xmlns:ns1="Plaxo">
93   -
94   - <response>
95   - <code>200</code>
96   - <message>OK</message>
97   - <userId>77311236242</userId>
98   - </response>
99   -
100   - <contacts>
101   -
102   - <contact>
103   - <itemId>61312569</itemId>
104   - <displayName>Joe Blow1</displayName>
105   - <fullName>Joe Blow1</fullName>
106   - <firstName>Joe</firstName>
107   - <lastName>Blow1</lastName>
108   - <homeEmail1>joeblow1@mailinator.com</homeEmail1>
109   - <email1>joeblow1@mailinator.com</email1>
110   - <folderId>5291351</folderId>
111   - </contact>
112   -
113   - <contact>
114   - <itemId>61313159</itemId>
115   - <displayName>Joe Blow2</displayName>
116   - <fullName>Joe Blow2</fullName>
117   - <firstName>Joe</firstName>
118   - <lastName>Blow2</lastName>
119   - <homeEmail1>joeblow2@mailinator.com</homeEmail1>
120   - <email1>joeblow2@mailinator.com</email1>
121   - <folderId>5291351</folderId>
122   - </contact>
123   -
124   - </contacts>
125   -
126   - <totalCount>2</totalCount>
127   - <editCounter>3</editCounter>
128   -
129   -</ns1:GetContactsResponse>
130   -=end
131 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/lib/contacts/yahoo.rb
... ... @@ -1,109 +0,0 @@
1   -class Contacts
2   - class Yahoo < Base
3   - URL = "http://mail.yahoo.com/"
4   - LOGIN_URL = "https://login.yahoo.com/config/login"
5   - ADDRESS_BOOK_URL = "http://address.mail.yahoo.com/?.rand=430244936"
6   - CONTACT_LIST_URL = "http://address.mail.yahoo.com/?_src=&_crumb=crumb&sortfield=3&bucket=1&scroll=1&VPC=social_list&.r=time"
7   - PROTOCOL_ERROR = "Yahoo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts"
8   -
9   - def real_connect
10   - postdata = ".tries=2&.src=ym&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass="
11   - postdata += "&.partner=&.u=4eo6isd23l8r3&.v=0&.challenge=gsMsEcoZP7km3N3NeI4mX"
12   - postdata += "kGB7zMV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&."
13   - postdata += "done=#{CGI.escape(URL)}&login=#{CGI.escape(login)}&passwd=#{CGI.escape(password)}"
14   -
15   - data, resp, cookies, forward = post(LOGIN_URL, postdata)
16   -
17   - if data.index("Invalid ID or password") || data.index("This ID is not yet taken")
18   - raise AuthenticationError, "Username and password do not match"
19   - elsif data.index("Sign in") && data.index("to Yahoo!")
20   - raise AuthenticationError, "Required field must not be blank"
21   - elsif !data.match(/uncompressed\/chunked/)
22   - raise ConnectionError, PROTOCOL_ERROR
23   - elsif cookies == ""
24   - raise ConnectionError, PROTOCOL_ERROR
25   - end
26   -
27   - data, resp, cookies, forward = get(forward, cookies, LOGIN_URL)
28   -
29   - if resp.code_type != Net::HTTPOK
30   - raise ConnectionError, PROTOCOL_ERROR
31   - end
32   -
33   - @cookies = cookies
34   - end
35   -
36   - def contacts
37   - return @contacts if @contacts
38   - if connected?
39   - # first, get the addressbook site with the new crumb parameter
40   - url = URI.parse(address_book_url)
41   - http = open_http(url)
42   - resp, data = http.get("#{url.path}?#{url.query}",
43   - "Cookie" => @cookies
44   - )
45   -
46   - if resp.code_type != Net::HTTPOK
47   - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
48   - end
49   -
50   - crumb = data.to_s[/dotCrumb: '(.*?)'/][13...-1]
51   -
52   - # now proceed with the new ".crumb" parameter to get the csv data
53   - url = URI.parse(contact_list_url.sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2]))
54   - http = open_http(url)
55   - resp, more_data = http.get("#{url.path}?#{url.query}",
56   - "Cookie" => @cookies,
57   - "X-Requested-With" => "XMLHttpRequest",
58   - "Referer" => address_book_url
59   - )
60   -
61   - if resp.code_type != Net::HTTPOK
62   - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
63   - end
64   -
65   - parse data
66   -
67   - parse more_data
68   -
69   - if more_data =~ /"TotalABContacts":(\d+)/
70   - total = $1.to_i
71   - ((total / 50)).times do |i|
72   - # now proceed with the new ".crumb" parameter to get the csv data
73   - url = URI.parse(contact_list_url.sub("bucket=1","bucket=#{i+2}").sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2]))
74   - http = open_http(url)
75   - resp, more_data = http.get("#{url.path}?#{url.query}",
76   - "Cookie" => @cookies,
77   - "X-Requested-With" => "XMLHttpRequest",
78   - "Referer" => address_book_url
79   - )
80   -
81   - if resp.code_type != Net::HTTPOK
82   - raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
83   - end
84   -
85   - parse more_data
86   - end
87   - end
88   -
89   - @contacts
90   - end
91   - end
92   -
93   - private
94   -
95   - def parse(data, options={})
96   - @contacts ||= []
97   - if data =~ /var InitialContacts = (\[.*?\])/
98   - @contacts += Contacts.parse_json($1).select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]}
99   - elsif data =~ /^\{"response":/
100   - @contacts += Contacts.parse_json(data)["response"]["ResultSet"]["Contacts"].to_a.select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]}
101   - else
102   - @contacts
103   - end
104   - end
105   -
106   - end
107   -
108   - TYPES[:yahoo] = Yahoo
109   -end
110 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/example_accounts.yml
... ... @@ -1,40 +0,0 @@
1   -gmail:
2   - username: <changeme>
3   - password: <changeme>
4   - contacts:
5   - -
6   - name: "FirstName1 LastName1"
7   - email_address: "firstname1@example.com"
8   - -
9   - name: "FirstName2 LastName2"
10   - email_address: "firstname2@example.com"
11   -yahoo:
12   - username: <changeme>
13   - password: <changeme>
14   - contacts:
15   - -
16   - name: "FirstName1 LastName1"
17   - email_address: "firstname1@example.com"
18   - -
19   - name: "FirstName2 LastName2"
20   - email_address: "firstname2@example.com"
21   -hotmail:
22   - username: <changeme>
23   - password: <changeme>
24   - contacts:
25   - -
26   - name: "FirstName1 LastName1"
27   - email_address: "firstname1@example.com"
28   - -
29   - name: "FirstName2 LastName2"
30   - email_address: "firstname2@example.com"
31   -aol:
32   - username: <changeme>
33   - password: <changeme>
34   - contacts:
35   - -
36   - name: "FirstName1 LastName1"
37   - email_address: "firstname1@example.com"
38   - -
39   - name: "FirstName2 LastName2"
40   - email_address: "firstname2@example.com"
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/test_helper.rb
... ... @@ -1,30 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -$LOAD_PATH.unshift(dir + "/../lib/")
3   -require 'test/unit'
4   -require 'contacts'
5   -
6   -class ContactImporterTestCase < Test::Unit::TestCase
7   - # Add more helper methods to be used by all tests here...
8   - def default_test
9   - assert true
10   - end
11   -end
12   -
13   -class TestAccounts
14   - def self.[](type)
15   - load[type]
16   - end
17   -
18   - def self.load(file = File.dirname(__FILE__) + "/accounts.yml")
19   - raise "/test/accounts.yml file not found, please create, see /test/example_accounts.yml for information" unless File.exist?(file)
20   -
21   - accounts = {}
22   - YAML::load(File.open(file)).each do |type, contents|
23   - contacts = contents["contacts"].collect {|contact| [contact["name"], contact["email_address"]]}
24   - accounts[type.to_sym] = Account.new(type.to_sym, contents["username"], contents["password"], contacts)
25   - end
26   - accounts
27   - end
28   -
29   - Account = Struct.new :type, :username, :password, :contacts
30   -end
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/test_suite.rb
... ... @@ -1,4 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -Dir["#{dir}/**/*_test.rb"].each do |file|
3   - require file
4   -end
5 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/aol_contact_importer_test.rb
... ... @@ -1,39 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -require "#{dir}/../test_helper"
3   -require 'contacts'
4   -
5   -class AolContactImporterTest < ContactImporterTestCase
6   - def setup
7   - super
8   - @account = TestAccounts[:aol]
9   - end
10   -
11   - def test_successful_login
12   - Contacts.new(:aol, @account.username, @account.password)
13   - end
14   -
15   - def test_importer_fails_with_invalid_password
16   - assert_raise(Contacts::AuthenticationError) do
17   - Contacts.new(:aol, @account.username, "wrong_password")
18   - end
19   - end
20   -
21   - def test_importer_fails_with_blank_password
22   - assert_raise(Contacts::AuthenticationError) do
23   - Contacts.new(:aol, @account.username, "")
24   - end
25   - end
26   -
27   - def test_importer_fails_with_blank_username
28   - assert_raise(Contacts::AuthenticationError) do
29   - Contacts.new(:aol, "", @account.password)
30   - end
31   - end
32   -
33   - def test_fetch_contacts
34   - contacts = Contacts.new(:aol, @account.username, @account.password).contacts
35   - @account.contacts.each do |contact|
36   - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
37   - end
38   - end
39   -end
40 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/gmail_contact_importer_test.rb
... ... @@ -1,39 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -require "#{dir}/../test_helper"
3   -require 'contacts'
4   -
5   -class GmailContactImporterTest < ContactImporterTestCase
6   - def setup
7   - super
8   - @account = TestAccounts[:gmail]
9   - end
10   -
11   - def test_successful_login
12   - Contacts.new(:gmail, @account.username, @account.password)
13   - end
14   -
15   - def test_importer_fails_with_invalid_password
16   - assert_raise(Contacts::AuthenticationError) do
17   - Contacts.new(:gmail, @account.username, "wrong_password")
18   - end
19   - end
20   -
21   - def test_importer_fails_with_blank_password
22   - assert_raise(Contacts::AuthenticationError) do
23   - Contacts.new(:gmail, @account.username, "")
24   - end
25   - end
26   -
27   - def test_importer_fails_with_blank_username
28   - assert_raise(Contacts::AuthenticationError) do
29   - Contacts.new(:gmail, "", @account.password)
30   - end
31   - end
32   -
33   - def test_fetch_contacts
34   - contacts = Contacts.new(:gmail, @account.username, @account.password).contacts
35   - @account.contacts.each do |contact|
36   - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
37   - end
38   - end
39   -end
40 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/hotmail_contact_importer_test.rb
... ... @@ -1,41 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -require "#{dir}/../test_helper"
3   -require 'contacts'
4   -
5   -class HotmailContactImporterTest < ContactImporterTestCase
6   - def setup
7   - super
8   - @account = TestAccounts[:hotmail]
9   - end
10   -
11   - def test_successful_login
12   - Contacts.new(:hotmail, @account.username, @account.password)
13   - end
14   -
15   - def test_importer_fails_with_invalid_password
16   - assert_raise(Contacts::AuthenticationError) do
17   - Contacts.new(:hotmail, @account.username,"wrong_password")
18   - end
19   - end
20   -
21   - def test_fetch_contacts
22   - contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts
23   - @account.contacts.each do |contact|
24   - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
25   - end
26   - end
27   -
28   - def test_importer_fails_with_invalid_msn_password
29   - assert_raise(Contacts::AuthenticationError) do
30   - Contacts.new(:hotmail, "test@msn.com","wrong_password")
31   - end
32   - end
33   -
34   - # Since the hotmail scraper doesn't read names, test email
35   - def test_fetch_email
36   - contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts
37   - @account.contacts.each do |contact|
38   - assert contacts.any?{|book_contact| book_contact.last == contact.last }, "Could not find: #{contact.inspect} in #{contacts.inspect}"
39   - end
40   - end
41   -end
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/test_accounts_test.rb
... ... @@ -1,23 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -require "#{dir}/../test_helper"
3   -
4   -class TestAccountsTest < ContactImporterTestCase
5   - def test_test_accounts_loads_data_from_example_accounts_file
6   - account = TestAccounts.load(File.dirname(__FILE__) + "/../example_accounts.yml")[:gmail]
7   -
8   - assert_equal :gmail, account.type
9   - assert_equal "<changeme>", account.username
10   - assert_equal "<changeme>", account.password
11   - assert_equal [["FirstName1 LastName1", "firstname1@example.com"], ["FirstName2 LastName2", "firstname2@example.com"]], account.contacts
12   - end
13   -
14   - def test_test_accounts_blows_up_if_file_doesnt_exist
15   - assert_raise(RuntimeError) do
16   - TestAccounts.load("file_that_does_not_exist.yml")
17   - end
18   - end
19   -
20   - def test_we_can_load_from_account_file
21   - assert_not_nil TestAccounts[:gmail].username
22   - end
23   -end
24 0 \ No newline at end of file
vendor/cardmagic-contacts-f66219e6589ccaf3ab9e3574fdd41225d0dd5073/test/unit/yahoo_csv_contact_importer_test.rb
... ... @@ -1,32 +0,0 @@
1   -dir = File.dirname(__FILE__)
2   -require "#{dir}/../test_helper"
3   -require 'contacts'
4   -
5   -class YahooContactImporterTest < ContactImporterTestCase
6   - def setup
7   - super
8   - @account = TestAccounts[:yahoo]
9   - end
10   -
11   - def test_a_successful_login
12   - Contacts.new(:yahoo, @account.username, @account.password)
13   - end
14   -
15   - def test_importer_fails_with_invalid_password
16   - assert_raise(Contacts::AuthenticationError) do
17   - Contacts.new(:yahoo, @account.username, "wrong_password")
18   - end
19   - # run the "successful" login test to ensure we reset yahoo's failed login lockout counter
20   - # See http://www.pivotaltracker.com/story/show/138210
21   - assert_nothing_raised do
22   - Contacts.new(:yahoo, @account.username, @account.password)
23   - end
24   - end
25   -
26   - def test_a_fetch_contacts
27   - contacts = Contacts.new(:yahoo, @account.username, @account.password).contacts
28   - @account.contacts.each do |contact|
29   - assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
30   - end
31   - end
32   -end
33 0 \ No newline at end of file
vendor/contacts/LICENSE 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +Copyright (c) 2006, Lucas Carlson, MOG
  2 +All rights reserved.
  3 +
  4 +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
  5 +
  6 +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  7 +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  8 +Neither the name of the Lucas Carlson nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  9 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  10 +
... ...
vendor/contacts/README 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +== Welcome to Contacts
  2 +
  3 +Contacts is a universal interface to grab contact list information from various providers including Hotmail, AOL, Gmail and Yahoo.
  4 +
  5 +== Download
  6 +
  7 +* gem install contacts
  8 +* http://github.com/cardmagic/contacts
  9 +* git clone git://github.com/cardmagic/contacts.git
  10 +
  11 +== Background
  12 +
  13 +For a long time, the only way to get a list of contacts from your free online email accounts was with proprietary PHP scripts that would cost you $50. The act of grabbing that list is a simple matter of screen scrapping and this library gives you all the functionality you need. Thanks to the generosity of the highly popular Rails website MOG (http://mog.com) for allowing this library to be released open-source to the world. It is easy to extend this library to add new free email providers, so please contact the author if you would like to help.
  14 +
  15 +== Usage
  16 +
  17 + Contacts::Hotmail.new(login, password).contacts # => [["name", "foo@bar.com"], ["another name", "bow@wow.com"]]
  18 + Contacts::Yahoo.new(login, password).contacts
  19 + Contacts::Gmail.new(login, password).contacts
  20 +
  21 + Contacts.new(:gmail, login, password).contacts
  22 + Contacts.new(:hotmail, login, password).contacts
  23 + Contacts.new(:yahoo, login, password).contacts
  24 +
  25 + Contacts.guess(login, password).contacts
  26 +
  27 +Notice there are three ways to use this library so that you can limit the use as much as you would like in your particular application. The Contacts.guess method will automatically concatenate all the address book contacts from each of the successful logins in the case that a username password works across multiple services.
  28 +
  29 +== Examples
  30 +
  31 +See the examples/ directory.
  32 +
  33 +== Authors
  34 +
  35 +* Lucas Carlson from MOG (mailto:lucas@rufy.com) - http://mog.com
  36 +
  37 +== Contributors
  38 +
  39 +* Britt Selvitelle from Twitter (mailto:anotherbritt@gmail.com) - http://twitter.com
  40 +* Tony Targonski from GigPark (mailto:tony@gigpark.com) - http://gigpark.com
  41 +* Waheed Barghouthi from Watwet (mailto:waheed.barghouthi@gmail.com) - http://watwet.com
  42 +* Glenn Sidney from Glenn Fu (mailto:glenn@glennfu.com) - http://glennfu.com
  43 +* Brian McQuay from Onomojo (mailto:brian@onomojo.com) - http://onomojo.com
  44 +* Adam Hunter (mailto:adamhunter@me.com) - http://adamhunter.me/
  45 +
  46 +This library is released under the terms of the BSD.
  47 +
... ...
vendor/contacts/Rakefile 0 → 100644
... ... @@ -0,0 +1,91 @@
  1 +require 'rubygems'
  2 +require 'rake'
  3 +require 'rake/testtask'
  4 +require 'rake/rdoctask'
  5 +require 'rake/gempackagetask'
  6 +require 'rake/contrib/rubyforgepublisher'
  7 +require 'lib/contacts'
  8 +
  9 +PKG_VERSION = Contacts::VERSION
  10 +
  11 +PKG_FILES = FileList[
  12 + "lib/**/*", "bin/*", "test/**/*", "[A-Z]*", "Rakefile", "doc/**/*", "examples/**/*"
  13 +] - ["test/accounts.yml"]
  14 +
  15 +desc "Default Task"
  16 +task :default => [ :test ]
  17 +
  18 +# Run the unit tests
  19 +desc "Run all unit tests"
  20 +Rake::TestTask.new("test") { |t|
  21 + t.libs << "lib"
  22 + t.pattern = 'test/*/*_test.rb'
  23 + t.verbose = true
  24 +}
  25 +
  26 +# Make a console, useful when working on tests
  27 +desc "Generate a test console"
  28 +task :console do
  29 + verbose( false ) { sh "irb -I lib/ -r 'contacts'" }
  30 +end
  31 +
  32 +# Genereate the RDoc documentation
  33 +desc "Create documentation"
  34 +Rake::RDocTask.new("doc") { |rdoc|
  35 + rdoc.title = "Contact List - ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail"
  36 + rdoc.rdoc_dir = 'doc'
  37 + rdoc.rdoc_files.include('README')
  38 + rdoc.rdoc_files.include('lib/**/*.rb')
  39 +}
  40 +
  41 +# Genereate the package
  42 +spec = Gem::Specification.new do |s|
  43 +
  44 + #### Basic information.
  45 +
  46 + s.name = 'adamhunter-contacts'
  47 + s.version = PKG_VERSION
  48 + s.summary = <<-EOF
  49 + Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail
  50 + EOF
  51 + s.description = <<-EOF
  52 + Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail
  53 + EOF
  54 +
  55 + #### Which files are to be included in this gem? Everything! (Except CVS directories.)
  56 +
  57 + s.files = PKG_FILES
  58 +
  59 + #### Load-time details: library and application (you will need one or both).
  60 +
  61 + s.require_path = 'lib'
  62 + s.autorequire = 'contacts'
  63 +
  64 + s.add_dependency('json', '>= 0.4.1')
  65 + s.add_dependency('gdata', '= 1.1.1')
  66 + s.requirements << "A json parser, the gdata ruby gem"
  67 +
  68 + #### Documentation and testing.
  69 +
  70 + s.has_rdoc = true
  71 +
  72 + #### Author and project details.
  73 +
  74 + s.author = "Lucas Carlson"
  75 + s.email = "lucas@rufy.com"
  76 + s.homepage = "http://rubyforge.org/projects/contacts"
  77 +end
  78 +
  79 +Rake::GemPackageTask.new(spec) do |pkg|
  80 + pkg.need_zip = true
  81 + pkg.need_tar = true
  82 +end
  83 +
  84 +desc "Report code statistics (KLOCs, etc) from the application"
  85 +task :stats do
  86 + require 'code_statistics'
  87 + CodeStatistics.new(
  88 + ["Library", "lib"],
  89 + ["Units", "test"]
  90 + ).to_s
  91 +end
0 92 \ No newline at end of file
... ...
vendor/contacts/contacts.gemspec 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +Gem::Specification.new do |s|
  2 + s.name = "contacts"
  3 + s.version = "1.2.0"
  4 + s.date = "2009-05-06"
  5 + s.summary = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo."
  6 + s.email = "lucas@rufy.com"
  7 + s.homepage = "http://github.com/cardmagic/contacts"
  8 + s.description = "A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo."
  9 + s.has_rdoc = false
  10 + s.authors = ["Lucas Carlson"]
  11 + s.files = ["LICENSE", "Rakefile", "README", "examples/grab_contacts.rb", "lib/contacts.rb", "lib/contacts/base.rb", "lib/contacts/json_picker.rb", "lib/contacts/gmail.rb", "lib/contacts/aol.rb", "lib/contacts/hotmail.rb", "lib/contacts/plaxo.rb", "lib/contacts/yahoo.rb"]
  12 + s.add_dependency("json", ">= 1.1.1")
  13 + s.add_dependency('gdata', '>= 1.1.1')
  14 +end
... ...
vendor/contacts/cruise_config.rb 0 → 100644
... ... @@ -0,0 +1,22 @@
  1 +# Project-specific configuration for CruiseControl.rb
  2 +
  3 +Project.configure do |project|
  4 +
  5 + # Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody)
  6 + # if building this on your own CI box, please remove!
  7 + project.email_notifier.emails = ['opensource@pivotallabs.com']
  8 +
  9 + # Set email 'from' field to john@doe.com:
  10 + # project.email_notifier.from = 'john@doe.com'
  11 +
  12 + # Build the project by invoking rake task 'custom'
  13 + # project.rake_task = 'custom'
  14 +
  15 + # Build the project by invoking shell script "build_my_app.sh". Keep in mind that when the script is invoked, current working directory is
  16 + # [cruise]/projects/your_project/work, so if you do not keep build_my_app.sh in version control, it should be '../build_my_app.sh' instead
  17 + # project.build_command = 'build_my_app.sh'
  18 +
  19 + # Ping Subversion for new revisions every 5 minutes (default: 30 seconds)
  20 + # project.scheduler.polling_interval = 5.minutes
  21 +
  22 +end
0 23 \ No newline at end of file
... ...
vendor/contacts/examples/grab_contacts.rb 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +require File.dirname(__FILE__)+"/../lib/contacts"
  2 +
  3 +login = ARGV[0]
  4 +password = ARGV[1]
  5 +
  6 +Contacts::Gmail.new(login, password).contacts
  7 +
  8 +Contacts.new(:gmail, login, password).contacts
  9 +
  10 +Contacts.new("gmail", login, password).contacts
  11 +
  12 +Contacts.guess(login, password).contacts
0 13 \ No newline at end of file
... ...
vendor/contacts/geminstaller.yml 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +---
  2 +defaults:
  3 + install_options: --no-ri --no-rdoc
  4 +gems:
  5 + - name: json
  6 + version: >= 1.1.1
  7 + - name: gdata
  8 + version: >= 1.1.1
... ...
vendor/contacts/lib/contacts.rb 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +$:.unshift(File.dirname(__FILE__)+"/contacts/")
  2 +
  3 +require 'rubygems'
  4 +
  5 +require 'base'
  6 +require 'gmail'
  7 +require 'hotmail'
  8 +require 'yahoo'
  9 +require 'plaxo'
  10 +require 'aol'
  11 +require 'json_picker'
0 12 \ No newline at end of file
... ...
vendor/contacts/lib/contacts/aol.rb 0 → 100644
... ... @@ -0,0 +1,147 @@
  1 +class Hash
  2 + def to_query_string
  3 + u = ERB::Util.method(:u)
  4 + map { |k, v|
  5 + u.call(k) + "=" + u.call(v)
  6 + }.join("&")
  7 + end
  8 +end
  9 +
  10 +class Contacts
  11 + class Aol < Base
  12 + URL = "http://www.aol.com/"
  13 + LOGIN_URL = "https://my.screenname.aol.com/_cqr/login/login.psp"
  14 + LOGIN_REFERER_URL = "http://webmail.aol.com/"
  15 + LOGIN_REFERER_PATH = "sitedomain=sns.webmail.aol.com&lang=en&locale=us&authLev=0&uitype=mini&loginId=&redirType=js&xchk=false"
  16 + AOL_NUM = "29970-343" # this seems to change each time they change the protocol
  17 +
  18 + CONTACT_LIST_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ContactList.aspx?folder=Inbox&showUserFolders=False"
  19 + CONTACT_LIST_CSV_URL = "http://webmail.aol.com/#{AOL_NUM}/aim-2/en-us/Lite/ABExport.aspx?command=all"
  20 + PROTOCOL_ERROR = "AOL has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts"
  21 +
  22 + def real_connect
  23 +
  24 + postdata = {
  25 + "loginId" => login,
  26 + "password" => password,
  27 + "rememberMe" => "on",
  28 + "_sns_fg_color_" => "",
  29 + "_sns_err_color_" => "",
  30 + "_sns_link_color_" => "",
  31 + "_sns_width_" => "",
  32 + "_sns_height_" => "",
  33 + "offerId" => "mail-second-en-us",
  34 + "_sns_bg_color_" => "",
  35 + "sitedomain" => "sns.webmail.aol.com",
  36 + "regPromoCode" => "",
  37 + "mcState" => "initialized",
  38 + "uitype" => "std",
  39 + "siteId" => "",
  40 + "lang" => "en",
  41 + "locale" => "us",
  42 + "authLev" => "0",
  43 + "siteState" => "",
  44 + "isSiteStateEncoded" => "false",
  45 + "use_aam" => "0",
  46 + "seamless" => "novl",
  47 + "aolsubmit" => CGI.escape("Sign In"),
  48 + "idType" => "SN",
  49 + "usrd" => "",
  50 + "doSSL" => "",
  51 + "redirType" => "",
  52 + "xchk" => "false"
  53 + }
  54 +
  55 + # Get this cookie and stick it in the form to confirm to Aol that your cookies work
  56 + data, resp, cookies, forward = get(URL)
  57 + postdata["stips"] = cookie_hash_from_string(cookies)["stips"]
  58 + postdata["tst"] = cookie_hash_from_string(cookies)["tst"]
  59 +
  60 + data, resp, cookies, forward, old_url = get(LOGIN_REFERER_URL, cookies) + [URL]
  61 + until forward.nil?
  62 + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
  63 + end
  64 +
  65 + data, resp, cookies, forward, old_url = get("#{LOGIN_URL}?#{LOGIN_REFERER_PATH}", cookies) + [LOGIN_REFERER_URL]
  66 + until forward.nil?
  67 + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
  68 + end
  69 +
  70 + doc = Nokogiri::HTML.fragment data
  71 + doc.css('input').each do |input|
  72 + postdata["usrd"] = input["value"] if input["name"] == "usrd"
  73 + end
  74 + # parse data for <input name="usrd" value="2726212" type="hidden"> and add it to the postdata
  75 +
  76 + postdata["SNS_SC"] = cookie_hash_from_string(cookies)["SNS_SC"]
  77 + postdata["SNS_LDC"] = cookie_hash_from_string(cookies)["SNS_LDC"]
  78 + postdata["LTState"] = cookie_hash_from_string(cookies)["LTState"]
  79 + # raise data.inspect
  80 +
  81 + data, resp, cookies, forward, old_url = post(LOGIN_URL, postdata.to_query_string, cookies, LOGIN_REFERER_URL) + [LOGIN_REFERER_URL]
  82 +
  83 + until forward.nil?
  84 + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
  85 + end
  86 +
  87 + if data.index("Invalid Screen Name or Password.")
  88 + raise AuthenticationError, "Username and password do not match"
  89 + elsif data.index("Required field must not be blank")
  90 + raise AuthenticationError, "Login and password must not be blank"
  91 + elsif data.index("errormsg_0_logincaptcha")
  92 + raise AuthenticationError, "Captcha error"
  93 + elsif data.index("Invalid request")
  94 + raise ConnectionError, PROTOCOL_ERROR
  95 + elsif cookies == ""
  96 + raise ConnectionError, PROTOCOL_ERROR
  97 + end
  98 +
  99 + @cookies = cookies
  100 + end
  101 +
  102 + def contacts
  103 + postdata = {
  104 + "file" => 'contacts',
  105 + "fileType" => 'csv'
  106 + }
  107 +
  108 + return @contacts if @contacts
  109 + if connected?
  110 + data, resp, cookies, forward, old_url = get(CONTACT_LIST_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL]
  111 +
  112 + until forward.nil?
  113 + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
  114 + end
  115 +
  116 + if resp.code_type != Net::HTTPOK
  117 + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
  118 + end
  119 +
  120 + # parse data and grab <input name="user" value="8QzMPIAKs2" type="hidden">
  121 + doc = Nokogiri::HTML.fragment data
  122 + doc.css('input').each do |input|
  123 + postdata["user"] = input["value"] if input["name"] == "user"
  124 + end
  125 +
  126 + data, resp, cookies, forward, old_url = get(CONTACT_LIST_CSV_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL]
  127 +
  128 + if forward.nil?
  129 + parse data
  130 + else
  131 + raise AuthenticationError, "Account cancelled"
  132 + end
  133 + end
  134 + end
  135 + private
  136 +
  137 + def parse(data, options={})
  138 + data = CSV.parse(data)
  139 + col_names = data.shift
  140 + @contacts = data.map do |person|
  141 + ["#{person[0]} #{person[1]}", person[4]] unless person[4].empty?
  142 + end.compact
  143 + end
  144 + end
  145 +
  146 + TYPES[:aol] = Aol
  147 +end
... ...
vendor/contacts/lib/contacts/base.rb 0 → 100644
... ... @@ -0,0 +1,215 @@
  1 +require "cgi"
  2 +require "net/http"
  3 +require "net/https"
  4 +require "uri"
  5 +require "zlib"
  6 +require "stringio"
  7 +require "thread"
  8 +require "erb"
  9 +
  10 +class Contacts
  11 + TYPES = {}
  12 + VERSION = "1.2.0"
  13 +
  14 + class Base
  15 + def initialize(login, password)
  16 + @login = login
  17 + @password = password
  18 + @connections = {}
  19 + connect
  20 + end
  21 +
  22 + def connect
  23 + raise AuthenticationError, "Login and password must not be nil, login: #{@login.inspect}, password: #{@password.inspect}" if @login.nil? || @login.empty? || @password.nil? || @password.empty?
  24 + real_connect
  25 + end
  26 +
  27 + def connected?
  28 + @cookies && !@cookies.empty?
  29 + end
  30 +
  31 + def contacts(options = {})
  32 + return @contacts if @contacts
  33 + if connected?
  34 + url = URI.parse(contact_list_url)
  35 + http = open_http(url)
  36 + resp, data = http.get("#{url.path}?#{url.query}",
  37 + "Cookie" => @cookies
  38 + )
  39 +
  40 + if resp.code_type != Net::HTTPOK
  41 + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
  42 + end
  43 +
  44 + parse(data, options)
  45 + end
  46 + end
  47 +
  48 + def login
  49 + @attempt ||= 0
  50 + @attempt += 1
  51 +
  52 + if @attempt == 1
  53 + @login
  54 + else
  55 + if @login.include?("@#{domain}")
  56 + @login.sub("@#{domain}","")
  57 + else
  58 + "#{@login}@#{domain}"
  59 + end
  60 + end
  61 + end
  62 +
  63 + def password
  64 + @password
  65 + end
  66 +
  67 + private
  68 +
  69 + def domain
  70 + @d ||= URI.parse(self.class.const_get(:URL)).host.sub(/^www\./,'')
  71 + end
  72 +
  73 + def contact_list_url
  74 + self.class.const_get(:CONTACT_LIST_URL)
  75 + end
  76 +
  77 + def address_book_url
  78 + self.class.const_get(:ADDRESS_BOOK_URL)
  79 + end
  80 +
  81 + def open_http(url)
  82 + c = @connections[Thread.current.object_id] ||= {}
  83 + http = c["#{url.host}:#{url.port}"]
  84 + unless http
  85 + http = Net::HTTP.new(url.host, url.port)
  86 + if url.port == 443
  87 + http.use_ssl = true
  88 + http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  89 + end
  90 + c["#{url.host}:#{url.port}"] = http
  91 + end
  92 + http.start unless http.started?
  93 + http
  94 + end
  95 +
  96 + def cookie_hash_from_string(cookie_string)
  97 + cookie_string.split(";").map{|i|i.split("=", 2).map{|j|j.strip}}.inject({}){|h,i|h[i[0]]=i[1];h}
  98 + end
  99 +
  100 + def parse_cookies(data, existing="")
  101 + return existing if data.nil?
  102 +
  103 + cookies = cookie_hash_from_string(existing)
  104 +
  105 + data.gsub!(/ ?[\w]+=EXPIRED;/,'')
  106 + data.gsub!(/ ?expires=(.*?, .*?)[;,$]/i, ';')
  107 + data.gsub!(/ ?(domain|path)=[\S]*?[;,$]/i,';')
  108 + data.gsub!(/[,;]?\s*(secure|httponly)/i,'')
  109 + data.gsub!(/(;\s*){2,}/,', ')
  110 + data.gsub!(/(,\s*){2,}/,', ')
  111 + data.sub!(/^,\s*/,'')
  112 + data.sub!(/\s*,$/,'')
  113 +
  114 + data.split(", ").map{|t|t.to_s.split(";").first}.each do |data|
  115 + k, v = data.split("=", 2).map{|j|j.strip}
  116 + if cookies[k] && v.empty?
  117 + cookies.delete(k)
  118 + elsif v && !v.empty?
  119 + cookies[k] = v
  120 + end
  121 + end
  122 +
  123 + cookies.map{|k,v| "#{k}=#{v}"}.join("; ")
  124 + end
  125 +
  126 + def remove_cookie(cookie, cookies)
  127 + parse_cookies("#{cookie}=", cookies)
  128 + end
  129 +
  130 + def post(url, postdata, cookies="", referer="")
  131 + url = URI.parse(url)
  132 + http = open_http(url)
  133 + resp, data = http.post(url.path, postdata,
  134 + "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0",
  135 + "Accept-Encoding" => "gzip",
  136 + "Cookie" => cookies,
  137 + "Referer" => referer,
  138 + "Content-Type" => 'application/x-www-form-urlencoded'
  139 + )
  140 + data = uncompress(resp, data)
  141 + cookies = parse_cookies(resp.response['set-cookie'], cookies)
  142 + forward = resp.response['Location']
  143 + forward ||= (data =~ /<meta.*?url='([^']+)'/ ? CGI.unescapeHTML($1) : nil)
  144 + if (not forward.nil?) && URI.parse(forward).host.nil?
  145 + forward = url.scheme.to_s + "://" + url.host.to_s + forward
  146 + end
  147 + return data, resp, cookies, forward
  148 + end
  149 +
  150 + def get(url, cookies="", referer="")
  151 + url = URI.parse(url)
  152 + http = open_http(url)
  153 + resp, data = http.get("#{url.path}?#{url.query}",
  154 + "User-Agent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0",
  155 + "Accept-Encoding" => "gzip",
  156 + "Cookie" => cookies,
  157 + "Referer" => referer
  158 + )
  159 + data = uncompress(resp, data)
  160 + cookies = parse_cookies(resp.response['set-cookie'], cookies)
  161 + forward = resp.response['Location']
  162 + if (not forward.nil?) && URI.parse(forward).host.nil?
  163 + forward = url.scheme.to_s + "://" + url.host.to_s + forward
  164 + end
  165 + return data, resp, cookies, forward
  166 + end
  167 +
  168 + def uncompress(resp, data)
  169 + case resp.response['content-encoding']
  170 + when 'gzip'
  171 + gz = Zlib::GzipReader.new(StringIO.new(data))
  172 + data = gz.read
  173 + gz.close
  174 + resp.response['content-encoding'] = nil
  175 + # FIXME: Not sure what Hotmail was feeding me with their 'deflate',
  176 + # but the headers definitely were not right
  177 + when 'deflate'
  178 + data = Zlib::Inflate.inflate(data)
  179 + resp.response['content-encoding'] = nil
  180 + end
  181 +
  182 + data
  183 + end
  184 + end
  185 +
  186 + class ContactsError < StandardError
  187 + end
  188 +
  189 + class AuthenticationError < ContactsError
  190 + end
  191 +
  192 + class ConnectionError < ContactsError
  193 + end
  194 +
  195 + class TypeNotFound < ContactsError
  196 + end
  197 +
  198 + def self.new(type, login, password)
  199 + if TYPES.include?(type.to_s.intern)
  200 + TYPES[type.to_s.intern].new(login, password)
  201 + else
  202 + raise TypeNotFound, "#{type.inspect} is not a valid type, please choose one of the following: #{TYPES.keys.inspect}"
  203 + end
  204 + end
  205 +
  206 + def self.guess(login, password)
  207 + TYPES.inject([]) do |a, t|
  208 + begin
  209 + a + t[1].new(login, password).contacts
  210 + rescue AuthenticationError
  211 + a
  212 + end
  213 + end.uniq
  214 + end
  215 +end
... ...
vendor/contacts/lib/contacts/gmail.rb 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +require 'gdata'
  2 +
  3 +class Contacts
  4 + class Gmail < Base
  5 +
  6 + CONTACTS_SCOPE = 'http://www.google.com/m8/feeds/'
  7 + CONTACTS_FEED = CONTACTS_SCOPE + 'contacts/default/full/?max-results=1000'
  8 +
  9 + def contacts
  10 + return @contacts if @contacts
  11 + end
  12 +
  13 + def real_connect
  14 + @client = GData::Client::Contacts.new
  15 + @client.clientlogin(@login, @password)
  16 +
  17 + feed = @client.get(CONTACTS_FEED).to_xml
  18 +
  19 + @contacts = feed.elements.to_a('entry').collect do |entry|
  20 + title, email = entry.elements['title'].text, nil
  21 + entry.elements.each('gd:email') do |e|
  22 + email = e.attribute('address').value if e.attribute('primary')
  23 + end
  24 + [title, email] unless email.nil?
  25 + end
  26 + @contacts.compact!
  27 + rescue GData::Client::AuthorizationError => e
  28 + raise AuthenticationError, "Username or password are incorrect"
  29 + end
  30 +
  31 + private
  32 +
  33 + TYPES[:gmail] = Gmail
  34 + end
  35 +end
0 36 \ No newline at end of file
... ...
vendor/contacts/lib/contacts/hotmail.rb 0 → 100644
... ... @@ -0,0 +1,124 @@
  1 +class Contacts
  2 + class Hotmail < Base
  3 + URL = "https://login.live.com/login.srf?id=2"
  4 + OLD_CONTACT_LIST_URL = "http://%s/cgi-bin/addresses"
  5 + NEW_CONTACT_LIST_URL = "http://%s/mail/GetContacts.aspx"
  6 + CONTACT_LIST_URL = "http://mpeople.live.com/default.aspx?pg=0"
  7 + COMPOSE_URL = "http://%s/cgi-bin/compose?"
  8 + PROTOCOL_ERROR = "Hotmail has changed its protocols, please upgrade this library first. If that does not work, report this error at http://rubyforge.org/forum/?group_id=2693"
  9 + PWDPAD = "IfYouAreReadingThisYouHaveTooMuchFreeTime"
  10 + MAX_HTTP_THREADS = 8
  11 +
  12 + def real_connect
  13 + data, resp, cookies, forward = get(URL)
  14 + old_url = URL
  15 + until forward.nil?
  16 + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
  17 + end
  18 +
  19 + postdata = "PPSX=%s&PwdPad=%s&login=%s&passwd=%s&LoginOptions=2&PPFT=%s" % [
  20 + CGI.escape(data.split("><").grep(/PPSX/).first[/=\S+$/][2..-3]),
  21 + PWDPAD[0...(PWDPAD.length-@password.length)],
  22 + CGI.escape(login),
  23 + CGI.escape(password),
  24 + CGI.escape(data.split("><").grep(/PPFT/).first[/=\S+$/][2..-3])
  25 + ]
  26 +
  27 + form_url = data.split("><").grep(/form/).first.split[5][8..-2]
  28 + data, resp, cookies, forward = post(form_url, postdata, cookies)
  29 +
  30 + old_url = form_url
  31 + until cookies =~ /; PPAuth=/ || forward.nil?
  32 + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
  33 + end
  34 +
  35 + if data.index("The e-mail address or password is incorrect")
  36 + raise AuthenticationError, "Username and password do not match"
  37 + elsif data != ""
  38 + raise AuthenticationError, "Required field must not be blank"
  39 + elsif cookies == ""
  40 + raise ConnectionError, PROTOCOL_ERROR
  41 + end
  42 +
  43 + data, resp, cookies, forward = get("http://mail.live.com/mail", cookies)
  44 + until forward.nil?
  45 + data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
  46 + end
  47 +
  48 + @domain = URI.parse(old_url).host
  49 + @cookies = cookies
  50 + rescue AuthenticationError => m
  51 + if @attempt == 1
  52 + retry
  53 + else
  54 + raise m
  55 + end
  56 + end
  57 +
  58 + def contacts(options = {})
  59 + if connected?
  60 + url = URI.parse(contact_list_url)
  61 + data, resp, cookies, forward = get( contact_list_url, @cookies )
  62 +
  63 + if resp.code_type != Net::HTTPOK
  64 + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
  65 + end
  66 +
  67 + @contacts = []
  68 + build_contacts = []
  69 + go = true
  70 + index = 0
  71 +
  72 + while(go) do
  73 + go = false
  74 + url = URI.parse(get_contact_list_url(index))
  75 + http = open_http(url)
  76 + resp, data = http.get(get_contact_list_url(index), "Cookie" => @cookies)
  77 +
  78 + email_match_text_beginning = Regexp.escape("http://m.mail.live.com/?rru=compose&amp;to=")
  79 + email_match_text_end = Regexp.escape("&amp;")
  80 +
  81 + raw_html = resp.body.grep(/(?:e|dn)lk[0-9]+/)
  82 + raw_html.delete_at 0
  83 + raw_html.inject do |memo, row|
  84 + c_info = row.match(/(e|dn)lk([0-9])+/)
  85 +
  86 + # Same contact, or different?
  87 + build_contacts << [] if memo != c_info[2]
  88 +
  89 + # Grab info
  90 + case c_info[1]
  91 + when "e" # Email
  92 + build_contacts.last[1] = row.match(/#{email_match_text_beginning}(.*)#{email_match_text_end}/)[1]
  93 + when "dn" # Name
  94 + build_contacts.last[0] = row.match(/<a[^>]*>(.+)<\/a>/)[1]
  95 + end
  96 +
  97 + # Set memo to contact id
  98 + c_info[2]
  99 + end
  100 +
  101 + go = resp.body.include?("Next page")
  102 + index += 1
  103 + end
  104 +
  105 + build_contacts.each do |contact|
  106 + unless contact[1].nil?
  107 + # Only return contacts with email addresses
  108 + contact[1] = CGI::unescape(contact[1])
  109 + @contacts << contact
  110 + end
  111 + end
  112 + return @contacts
  113 + end
  114 + end
  115 +
  116 + def get_contact_list_url(index)
  117 + "http://mpeople.live.com/default.aspx?pg=#{index}"
  118 + end
  119 +
  120 + private
  121 +
  122 + TYPES[:hotmail] = Hotmail
  123 + end
  124 +end
0 125 \ No newline at end of file
... ...
vendor/contacts/lib/contacts/json_picker.rb 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +if !Object.const_defined?('ActiveSupport')
  2 + require 'json'
  3 +end
  4 +
  5 +class Contacts
  6 + def self.parse_json( string )
  7 + if Object.const_defined?('ActiveSupport') and
  8 + ActiveSupport.const_defined?('JSON')
  9 + ActiveSupport::JSON.decode( string )
  10 + elsif Object.const_defined?('JSON')
  11 + JSON.parse( string )
  12 + else
  13 + raise 'Contacts requires JSON or Rails (with ActiveSupport::JSON)'
  14 + end
  15 + end
  16 +end
0 17 \ No newline at end of file
... ...
vendor/contacts/lib/contacts/plaxo.rb 0 → 100644
... ... @@ -0,0 +1,130 @@
  1 +require 'rexml/document'
  2 +
  3 +class Contacts
  4 + class Plaxo < Base
  5 + URL = "http://www.plaxo.com/"
  6 + LOGIN_URL = "https://www.plaxo.com/signin"
  7 + ADDRESS_BOOK_URL = "http://www.plaxo.com/po3/?module=ab&operation=viewFull&mode=normal"
  8 + CONTACT_LIST_URL = "http://www.plaxo.com/axis/soap/contact?_action=getContacts&_format=xml"
  9 + PROTOCOL_ERROR = "Plaxo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts"
  10 +
  11 + def real_connect
  12 +
  13 + end # real_connect
  14 +
  15 + def contacts
  16 + getdata = "&authInfo.authByEmail.email=%s" % CGI.escape(login)
  17 + getdata += "&authInfo.authByEmail.password=%s" % CGI.escape(password)
  18 + data, resp, cookies, forward = get(CONTACT_LIST_URL + getdata)
  19 +
  20 + if resp.code_type != Net::HTTPOK
  21 + raise ConnectionError, PROTOCOL_ERROR
  22 + end
  23 +
  24 + parse data
  25 + end # contacts
  26 +
  27 + private
  28 + def parse(data, options={})
  29 + doc = REXML::Document.new(data)
  30 + code = doc.elements['//response/code'].text
  31 +
  32 + if code == '401'
  33 + raise AuthenticationError, "Username and password do not match"
  34 + elsif code == '200'
  35 + @contacts = []
  36 + doc.elements.each('//contact') do |cont|
  37 + name = if cont.elements['fullName']
  38 + cont.elements['fullName'].text
  39 + elsif cont.elements['displayName']
  40 + cont.elements['displayName'].text
  41 + end
  42 + email = if cont.elements['email1']
  43 + cont.elements['email1'].text
  44 + end
  45 + if name || email
  46 + @contacts << [name, email]
  47 + end
  48 + end
  49 + @contacts
  50 + else
  51 + raise ConnectionError, PROTOCOL_ERROR
  52 + end
  53 +
  54 + end # parse
  55 +
  56 + end # Plaxo
  57 +
  58 + TYPES[:plaxo] = Plaxo
  59 +
  60 +end # Contacts
  61 +
  62 +
  63 +# sample contacts responses
  64 +=begin
  65 +Bad email
  66 +=========
  67 +<?xml version="1.0" encoding="utf-8" ?>
  68 +<ns1:GetContactsResponse xmlns:ns1="Plaxo">
  69 + <response>
  70 + <code>401</code>
  71 + <subCode>1</subCode>
  72 + <message>User not found.</message>
  73 + </response>
  74 +</ns1:GetContactsResponse>
  75 +
  76 +
  77 +Bad password
  78 +============
  79 +<?xml version="1.0" encoding="utf-8" ?>
  80 +<ns1:GetContactsResponse xmlns:ns1="Plaxo">
  81 + <response>
  82 + <code>401</code>
  83 + <subCode>4</subCode>
  84 + <message>Bad password or security token.</message>
  85 + </response>
  86 +</ns1:GetContactsResponse>
  87 +
  88 +
  89 +Success
  90 +=======
  91 +<?xml version="1.0" encoding="utf-8" ?>
  92 +<ns1:GetContactsResponse xmlns:ns1="Plaxo">
  93 +
  94 + <response>
  95 + <code>200</code>
  96 + <message>OK</message>
  97 + <userId>77311236242</userId>
  98 + </response>
  99 +
  100 + <contacts>
  101 +
  102 + <contact>
  103 + <itemId>61312569</itemId>
  104 + <displayName>Joe Blow1</displayName>
  105 + <fullName>Joe Blow1</fullName>
  106 + <firstName>Joe</firstName>
  107 + <lastName>Blow1</lastName>
  108 + <homeEmail1>joeblow1@mailinator.com</homeEmail1>
  109 + <email1>joeblow1@mailinator.com</email1>
  110 + <folderId>5291351</folderId>
  111 + </contact>
  112 +
  113 + <contact>
  114 + <itemId>61313159</itemId>
  115 + <displayName>Joe Blow2</displayName>
  116 + <fullName>Joe Blow2</fullName>
  117 + <firstName>Joe</firstName>
  118 + <lastName>Blow2</lastName>
  119 + <homeEmail1>joeblow2@mailinator.com</homeEmail1>
  120 + <email1>joeblow2@mailinator.com</email1>
  121 + <folderId>5291351</folderId>
  122 + </contact>
  123 +
  124 + </contacts>
  125 +
  126 + <totalCount>2</totalCount>
  127 + <editCounter>3</editCounter>
  128 +
  129 +</ns1:GetContactsResponse>
  130 +=end
0 131 \ No newline at end of file
... ...
vendor/contacts/lib/contacts/yahoo.rb 0 → 100644
... ... @@ -0,0 +1,109 @@
  1 +class Contacts
  2 + class Yahoo < Base
  3 + URL = "http://mail.yahoo.com/"
  4 + LOGIN_URL = "https://login.yahoo.com/config/login"
  5 + ADDRESS_BOOK_URL = "http://address.mail.yahoo.com/?.rand=430244936"
  6 + CONTACT_LIST_URL = "http://address.mail.yahoo.com/?_src=&_crumb=crumb&sortfield=3&bucket=1&scroll=1&VPC=social_list&.r=time"
  7 + PROTOCOL_ERROR = "Yahoo has changed its protocols, please upgrade this library first. If that does not work, dive into the code and submit a patch at http://github.com/cardmagic/contacts"
  8 +
  9 + def real_connect
  10 + postdata = ".tries=2&.src=ym&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.bypass="
  11 + postdata += "&.partner=&.u=4eo6isd23l8r3&.v=0&.challenge=gsMsEcoZP7km3N3NeI4mX"
  12 + postdata += "kGB7zMV&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=1&.chkP=Y&."
  13 + postdata += "done=#{CGI.escape(URL)}&login=#{CGI.escape(login)}&passwd=#{CGI.escape(password)}"
  14 +
  15 + data, resp, cookies, forward = post(LOGIN_URL, postdata)
  16 +
  17 + if data.index("Invalid ID or password") || data.index("This ID is not yet taken")
  18 + raise AuthenticationError, "Username and password do not match"
  19 + elsif data.index("Sign in") && data.index("to Yahoo!")
  20 + raise AuthenticationError, "Required field must not be blank"
  21 + elsif !data.match(/uncompressed\/chunked/)
  22 + raise ConnectionError, PROTOCOL_ERROR
  23 + elsif cookies == ""
  24 + raise ConnectionError, PROTOCOL_ERROR
  25 + end
  26 +
  27 + data, resp, cookies, forward = get(forward, cookies, LOGIN_URL)
  28 +
  29 + if resp.code_type != Net::HTTPOK
  30 + raise ConnectionError, PROTOCOL_ERROR
  31 + end
  32 +
  33 + @cookies = cookies
  34 + end
  35 +
  36 + def contacts
  37 + return @contacts if @contacts
  38 + if connected?
  39 + # first, get the addressbook site with the new crumb parameter
  40 + url = URI.parse(address_book_url)
  41 + http = open_http(url)
  42 + resp, data = http.get("#{url.path}?#{url.query}",
  43 + "Cookie" => @cookies
  44 + )
  45 +
  46 + if resp.code_type != Net::HTTPOK
  47 + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
  48 + end
  49 +
  50 + crumb = data.to_s[/dotCrumb: '(.*?)'/][13...-1]
  51 +
  52 + # now proceed with the new ".crumb" parameter to get the csv data
  53 + url = URI.parse(contact_list_url.sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2]))
  54 + http = open_http(url)
  55 + resp, more_data = http.get("#{url.path}?#{url.query}",
  56 + "Cookie" => @cookies,
  57 + "X-Requested-With" => "XMLHttpRequest",
  58 + "Referer" => address_book_url
  59 + )
  60 +
  61 + if resp.code_type != Net::HTTPOK
  62 + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
  63 + end
  64 +
  65 + parse data
  66 +
  67 + parse more_data
  68 +
  69 + if more_data =~ /"TotalABContacts":(\d+)/
  70 + total = $1.to_i
  71 + ((total / 50)).times do |i|
  72 + # now proceed with the new ".crumb" parameter to get the csv data
  73 + url = URI.parse(contact_list_url.sub("bucket=1","bucket=#{i+2}").sub("_crumb=crumb","_crumb=#{crumb}").sub("time", Time.now.to_f.to_s.sub(".","")[0...-2]))
  74 + http = open_http(url)
  75 + resp, more_data = http.get("#{url.path}?#{url.query}",
  76 + "Cookie" => @cookies,
  77 + "X-Requested-With" => "XMLHttpRequest",
  78 + "Referer" => address_book_url
  79 + )
  80 +
  81 + if resp.code_type != Net::HTTPOK
  82 + raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
  83 + end
  84 +
  85 + parse more_data
  86 + end
  87 + end
  88 +
  89 + @contacts
  90 + end
  91 + end
  92 +
  93 + private
  94 +
  95 + def parse(data, options={})
  96 + @contacts ||= []
  97 + if data =~ /var InitialContacts = (\[.*?\])/
  98 + @contacts += Contacts.parse_json($1).select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]}
  99 + elsif data =~ /^\{"response":/
  100 + @contacts += Contacts.parse_json(data)["response"]["ResultSet"]["Contacts"].to_a.select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]}
  101 + else
  102 + @contacts
  103 + end
  104 + end
  105 +
  106 + end
  107 +
  108 + TYPES[:yahoo] = Yahoo
  109 +end
0 110 \ No newline at end of file
... ...
vendor/contacts/test/example_accounts.yml 0 → 100644
... ... @@ -0,0 +1,40 @@
  1 +gmail:
  2 + username: <changeme>
  3 + password: <changeme>
  4 + contacts:
  5 + -
  6 + name: "FirstName1 LastName1"
  7 + email_address: "firstname1@example.com"
  8 + -
  9 + name: "FirstName2 LastName2"
  10 + email_address: "firstname2@example.com"
  11 +yahoo:
  12 + username: <changeme>
  13 + password: <changeme>
  14 + contacts:
  15 + -
  16 + name: "FirstName1 LastName1"
  17 + email_address: "firstname1@example.com"
  18 + -
  19 + name: "FirstName2 LastName2"
  20 + email_address: "firstname2@example.com"
  21 +hotmail:
  22 + username: <changeme>
  23 + password: <changeme>
  24 + contacts:
  25 + -
  26 + name: "FirstName1 LastName1"
  27 + email_address: "firstname1@example.com"
  28 + -
  29 + name: "FirstName2 LastName2"
  30 + email_address: "firstname2@example.com"
  31 +aol:
  32 + username: <changeme>
  33 + password: <changeme>
  34 + contacts:
  35 + -
  36 + name: "FirstName1 LastName1"
  37 + email_address: "firstname1@example.com"
  38 + -
  39 + name: "FirstName2 LastName2"
  40 + email_address: "firstname2@example.com"
... ...
vendor/contacts/test/test_helper.rb 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 +dir = File.dirname(__FILE__)
  2 +$LOAD_PATH.unshift(dir + "/../lib/")
  3 +require 'test/unit'
  4 +require 'contacts'
  5 +
  6 +class ContactImporterTestCase < Test::Unit::TestCase
  7 + # Add more helper methods to be used by all tests here...
  8 + def default_test
  9 + assert true
  10 + end
  11 +end
  12 +
  13 +class TestAccounts
  14 + def self.[](type)
  15 + load[type]
  16 + end
  17 +
  18 + def self.load(file = File.dirname(__FILE__) + "/accounts.yml")
  19 + raise "/test/accounts.yml file not found, please create, see /test/example_accounts.yml for information" unless File.exist?(file)
  20 +
  21 + accounts = {}
  22 + YAML::load(File.open(file)).each do |type, contents|
  23 + contacts = contents["contacts"].collect {|contact| [contact["name"], contact["email_address"]]}
  24 + accounts[type.to_sym] = Account.new(type.to_sym, contents["username"], contents["password"], contacts)
  25 + end
  26 + accounts
  27 + end
  28 +
  29 + Account = Struct.new :type, :username, :password, :contacts
  30 +end
... ...
vendor/contacts/test/test_suite.rb 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +dir = File.dirname(__FILE__)
  2 +Dir["#{dir}/**/*_test.rb"].each do |file|
  3 + require file
  4 +end
0 5 \ No newline at end of file
... ...
vendor/contacts/test/unit/aol_contact_importer_test.rb 0 → 100644
... ... @@ -0,0 +1,39 @@
  1 +dir = File.dirname(__FILE__)
  2 +require "#{dir}/../test_helper"
  3 +require 'contacts'
  4 +
  5 +class AolContactImporterTest < ContactImporterTestCase
  6 + def setup
  7 + super
  8 + @account = TestAccounts[:aol]
  9 + end
  10 +
  11 + def test_successful_login
  12 + Contacts.new(:aol, @account.username, @account.password)
  13 + end
  14 +
  15 + def test_importer_fails_with_invalid_password
  16 + assert_raise(Contacts::AuthenticationError) do
  17 + Contacts.new(:aol, @account.username, "wrong_password")
  18 + end
  19 + end
  20 +
  21 + def test_importer_fails_with_blank_password
  22 + assert_raise(Contacts::AuthenticationError) do
  23 + Contacts.new(:aol, @account.username, "")
  24 + end
  25 + end
  26 +
  27 + def test_importer_fails_with_blank_username
  28 + assert_raise(Contacts::AuthenticationError) do
  29 + Contacts.new(:aol, "", @account.password)
  30 + end
  31 + end
  32 +
  33 + def test_fetch_contacts
  34 + contacts = Contacts.new(:aol, @account.username, @account.password).contacts
  35 + @account.contacts.each do |contact|
  36 + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
  37 + end
  38 + end
  39 +end
0 40 \ No newline at end of file
... ...
vendor/contacts/test/unit/gmail_contact_importer_test.rb 0 → 100644
... ... @@ -0,0 +1,39 @@
  1 +dir = File.dirname(__FILE__)
  2 +require "#{dir}/../test_helper"
  3 +require 'contacts'
  4 +
  5 +class GmailContactImporterTest < ContactImporterTestCase
  6 + def setup
  7 + super
  8 + @account = TestAccounts[:gmail]
  9 + end
  10 +
  11 + def test_successful_login
  12 + Contacts.new(:gmail, @account.username, @account.password)
  13 + end
  14 +
  15 + def test_importer_fails_with_invalid_password
  16 + assert_raise(Contacts::AuthenticationError) do
  17 + Contacts.new(:gmail, @account.username, "wrong_password")
  18 + end
  19 + end
  20 +
  21 + def test_importer_fails_with_blank_password
  22 + assert_raise(Contacts::AuthenticationError) do
  23 + Contacts.new(:gmail, @account.username, "")
  24 + end
  25 + end
  26 +
  27 + def test_importer_fails_with_blank_username
  28 + assert_raise(Contacts::AuthenticationError) do
  29 + Contacts.new(:gmail, "", @account.password)
  30 + end
  31 + end
  32 +
  33 + def test_fetch_contacts
  34 + contacts = Contacts.new(:gmail, @account.username, @account.password).contacts
  35 + @account.contacts.each do |contact|
  36 + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
  37 + end
  38 + end
  39 +end
0 40 \ No newline at end of file
... ...
vendor/contacts/test/unit/hotmail_contact_importer_test.rb 0 → 100644
... ... @@ -0,0 +1,41 @@
  1 +dir = File.dirname(__FILE__)
  2 +require "#{dir}/../test_helper"
  3 +require 'contacts'
  4 +
  5 +class HotmailContactImporterTest < ContactImporterTestCase
  6 + def setup
  7 + super
  8 + @account = TestAccounts[:hotmail]
  9 + end
  10 +
  11 + def test_successful_login
  12 + Contacts.new(:hotmail, @account.username, @account.password)
  13 + end
  14 +
  15 + def test_importer_fails_with_invalid_password
  16 + assert_raise(Contacts::AuthenticationError) do
  17 + Contacts.new(:hotmail, @account.username,"wrong_password")
  18 + end
  19 + end
  20 +
  21 + def test_fetch_contacts
  22 + contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts
  23 + @account.contacts.each do |contact|
  24 + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
  25 + end
  26 + end
  27 +
  28 + def test_importer_fails_with_invalid_msn_password
  29 + assert_raise(Contacts::AuthenticationError) do
  30 + Contacts.new(:hotmail, "test@msn.com","wrong_password")
  31 + end
  32 + end
  33 +
  34 + # Since the hotmail scraper doesn't read names, test email
  35 + def test_fetch_email
  36 + contacts = Contacts.new(:hotmail, @account.username, @account.password).contacts
  37 + @account.contacts.each do |contact|
  38 + assert contacts.any?{|book_contact| book_contact.last == contact.last }, "Could not find: #{contact.inspect} in #{contacts.inspect}"
  39 + end
  40 + end
  41 +end
... ...
vendor/contacts/test/unit/test_accounts_test.rb 0 → 100644
... ... @@ -0,0 +1,23 @@
  1 +dir = File.dirname(__FILE__)
  2 +require "#{dir}/../test_helper"
  3 +
  4 +class TestAccountsTest < ContactImporterTestCase
  5 + def test_test_accounts_loads_data_from_example_accounts_file
  6 + account = TestAccounts.load(File.dirname(__FILE__) + "/../example_accounts.yml")[:gmail]
  7 +
  8 + assert_equal :gmail, account.type
  9 + assert_equal "<changeme>", account.username
  10 + assert_equal "<changeme>", account.password
  11 + assert_equal [["FirstName1 LastName1", "firstname1@example.com"], ["FirstName2 LastName2", "firstname2@example.com"]], account.contacts
  12 + end
  13 +
  14 + def test_test_accounts_blows_up_if_file_doesnt_exist
  15 + assert_raise(RuntimeError) do
  16 + TestAccounts.load("file_that_does_not_exist.yml")
  17 + end
  18 + end
  19 +
  20 + def test_we_can_load_from_account_file
  21 + assert_not_nil TestAccounts[:gmail].username
  22 + end
  23 +end
0 24 \ No newline at end of file
... ...
vendor/contacts/test/unit/yahoo_csv_contact_importer_test.rb 0 → 100644
... ... @@ -0,0 +1,32 @@
  1 +dir = File.dirname(__FILE__)
  2 +require "#{dir}/../test_helper"
  3 +require 'contacts'
  4 +
  5 +class YahooContactImporterTest < ContactImporterTestCase
  6 + def setup
  7 + super
  8 + @account = TestAccounts[:yahoo]
  9 + end
  10 +
  11 + def test_a_successful_login
  12 + Contacts.new(:yahoo, @account.username, @account.password)
  13 + end
  14 +
  15 + def test_importer_fails_with_invalid_password
  16 + assert_raise(Contacts::AuthenticationError) do
  17 + Contacts.new(:yahoo, @account.username, "wrong_password")
  18 + end
  19 + # run the "successful" login test to ensure we reset yahoo's failed login lockout counter
  20 + # See http://www.pivotaltracker.com/story/show/138210
  21 + assert_nothing_raised do
  22 + Contacts.new(:yahoo, @account.username, @account.password)
  23 + end
  24 + end
  25 +
  26 + def test_a_fetch_contacts
  27 + contacts = Contacts.new(:yahoo, @account.username, @account.password).contacts
  28 + @account.contacts.each do |contact|
  29 + assert contacts.include?(contact), "Could not find: #{contact.inspect} in #{contacts.inspect}"
  30 + end
  31 + end
  32 +end
0 33 \ No newline at end of file
... ...
vendor/ezcrypto-0.7.2/._CHANGELOG
No preview for this file type
vendor/ezcrypto-0.7.2/._MIT-LICENSE
No preview for this file type
vendor/ezcrypto-0.7.2/._README.rdoc
No preview for this file type
vendor/ezcrypto-0.7.2/._README_ACTIVE_CRYPTO
No preview for this file type
vendor/ezcrypto-0.7.2/._rakefile
No preview for this file type
vendor/ezcrypto-0.7.2/CHANGELOG
... ... @@ -1,85 +0,0 @@
1   -0.7.2 March, 2009 support for base64 encrypted attributes in ActiveCrypto (Micah Wedemeyer)
2   -
3   -0.7 September 12th, 2006 PKYP services support
4   -
5   -Marking the release of http://pkyp.org a new no nonsense Public Key directory, this allows you register your public keys and certificates on a public server. If you have web applications with certificates or public keys you can point your users at http://pkyp.org/{key.digest} for more info about a certificate.
6   -
7   -Register a public key or certificate at PKYP with the new method register_with_pkyp like this:
8   -
9   - signer=EzCrypto::Signer.generate
10   - signer.verifier.register_with_pkyp
11   -
12   -If you have the public key or certificate digest you can fetch the full public key or certificate like this:
13   -
14   - verifier=EzCrypto::Verifier.from_pkyp "e93e18114cbefaaa89fda908b09df63d3662879a"
15   - verifier.verify sig, request_text
16   -
17   -This allows a simpler way of transfering certificates. The idea of including certificates with every request is not really necessary in an online world. For example you could pass the digest in a HTTP header for a REST web services request.
18   -
19   -0.6.2 August 15th, 2006 Trust something release
20   -
21   -Now comes complete with a fairly trusted list of root certs as extracted from Apple's keystore. With the addition of CACerts and GoDaddy SSL Certs (Buy from http://widecert.net). If you feel any important ones are missing let me know.
22   -
23   -You can create a trust store from this with TrustStore.default_trusted. Note many of these CA's are useless and you shouldn't really trust them, but this makes it easy to emulate the browsers support.
24   -
25   -0.6.1 August 14th, 2006 Subject!=Issuer bug fix
26   -
27   -I discovered a not so little bug in the certificate handling. The issuer method of the Certificate mistakenly returned the subject.
28   -
29   -0.6 August 10th, 2006 Certified PKI release
30   -
31   -Finally I have had a good reason http://www.tractis.com to add Digital Signature support to EzCrypto. We have support for RSA and DSA private and public keys as well as basic X509 certificate support. All in typical EzCrypto simple Ruby like methods.
32   -
33   -KNOWN PROBLEM. The DSA Signer.public_key method has some sort of problem but will be fixed for 0.6.1.
34   -
35   -0.5 July 19th, 2006 Good citizen release
36   -
37   -I have cleaned up the ActiveCrypto namespaces. It now does not use ActiveRecord::Crypto, but ActiveCrypto::*, if you have called stuff directly please update your code.
38   -
39   -The reason for this is to really be a good citizen in the world of rails and not unnecessarily pollute the ActiveRecord name space.
40   -
41   -I have also created much more thorough unit tests and refactored some things that did not work in version 0.4 that the world thankfully did not see.
42   -
43   -0.4 Flawed internal release
44   -
45   -0.3 February 25th, 2006 new encrypted file support by Dirk (dirk.barnikel@gmx.de) Thanks Dirk.
46   -
47   -* Added test case for the file-related stuff. file-stuff
48   - seems to work fine
49   -
50   -* Replaced hard coded IO buffersize (512) with class attribute
51   - Key#block_size and default value.
52   -
53   -* Modification to create {De,En}crypters only via the factory methods
54   - Key#{de,en}crypter.
55   -
56   -* Added Key#{de,en}crypt_file methods that take a file and de- or encrypts it.
57   -
58   -* The methods are implemented to call the cipher with small chunks of data (512 bytes) to keep memory usage low.
59   -
60   -* By default, the original file is first overwritten and then removed.
61   -
62   -* This overwrite is not really safe but should make it harder to restore the data of the removed file from the filesystem.
63   -
64   -* Added Key#{store,load} methods that read and write Key data to/from files.
65   -
66   -* Added Key#safe_{create,delete,read} methods to encapsulate the handling of files inside EzCrypto.
67   -
68   -0.2.2 January 4th, 2006 Bug fixes and unit tests for active_crypto
69   -
70   -There were some serious problems with ActiveCrypto's support for having keys in associated classes. I also added unit tests to active_crypto. The support code was brutaly stolen from Rick Olson's acts_as_paranoid library. Unfortunately I disabled the schema stuff for now, but will add it in the next release, which hopefully is soon.
71   -
72   -0.2.1 November 2nd, 2005 New method in KeyHolder
73   -
74   -Added set_encoded_key(enc) to KeyHolder for setting a key with the Base64 encoded keyvalue.
75   -
76   -0.2 October 30th, 2005 Ruby on Rails integration
77   -
78   -As promised I have now included my first version of ActiveCrypto the crypto layer for ActiveRecord and Ruby on Rails.
79   -
80   -0.1.1 August 27, 2005 Minor fixes
81   -
82   -Thanks to Jason Vasquez mugatu at mugfu dot com for noticing that Key#to_s
83   -called the nonexistent encoded method.
84   -
85   -I also made a few slight changes to the documentation.
vendor/ezcrypto-0.7.2/MIT-LICENSE
... ... @@ -1,21 +0,0 @@
1   -Copyright (c) 2004 David Heinemeier Hansson
2   -
3   -Permission is hereby granted, free of charge, to any person obtaining
4   -a copy of this software and associated documentation files (the
5   -"Software"), to deal in the Software without restriction, including
6   -without limitation the rights to use, copy, modify, merge, publish,
7   -distribute, sublicense, and/or sell copies of the Software, and to
8   -permit persons to whom the Software is furnished to do so, subject to
9   -the following conditions:
10   -
11   -The above copyright notice and this permission notice shall be
12   -included in all copies or substantial portions of the Software.
13   -
14   -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15   -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16   -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17   -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18   -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19   -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20   -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21   -
vendor/ezcrypto-0.7.2/README.rdoc
... ... @@ -1,152 +0,0 @@
1   -= EzCrypto - Easy to use Crypto for Ruby
2   -
3   -EzCrypto is an easy to use wrapper around the poorly documented OpenSSL ruby library.
4   -
5   -== Features
6   -
7   -* Defaults to AES 128 CBC
8   -* Will use the systems OpenSSL library for transparent hardware crypto support
9   -* Single class object oriented access to most commonly used features
10   -* Ruby like
11   -
12   -== Installation
13   -
14   -Download it from here:
15   -
16   -http://rubyforge.org/frs/?group_id=755
17   -
18   -or install it via Ruby Gems:
19   -
20   - gem install ezcrypto
21   -
22   -== Simple examples
23   -
24   -==== To encrypt:
25   -
26   -Generate a key using a password and a salt. Use the keys encrypt method to encrypt a strings worth of data:
27   -
28   - @key=EzCrypto::Key.with_password "password", "system salt"
29   - @encrypted=@key.encrypt "Top secret should not be revealed"
30   -
31   -==== To decrypt:
32   -
33   -Same procedure as encrypt. Generate a key using a password and a salt. Use the keys decrypt method to decrypt a strings worth of data:
34   -
35   - @key=EzCrypto::Key.with_password "password", "system salt"
36   - @key.decrypt @encrypted
37   -
38   -==== One liners:
39   -
40   -These simple examples use one line each:
41   -
42   - @encrypted=EzCrypto::Key.encrypt_with_password "password", @salt,"Top secret should not be revealed"
43   -
44   - EzCrypto::Key.decrypt_with_password "password", @salt,@encrypted
45   -
46   -== Keys
47   -
48   -The only class you need to know for most uses og EzCrypto is the Key class. You don't need understand ciphers or the encryption life cycle.
49   -
50   -==== Generating a random key
51   -
52   -The most secure type of key is the randomly generated key:
53   -
54   - @key=EzCrypto::Key.generate
55   -
56   -==== Initializing a key with raw key data
57   -
58   -If you already have a key from some other source, you simply have to call the constructor with the raw data:
59   -
60   - @key=EzCrypto::Key.new @binarykey
61   -
62   -==== Initializing a Key with a Base64 encoded key
63   -
64   -As seen above you can create a key from a password. This should be used if you don't want the key to be stored on disk for example:
65   -
66   - @key=EzCrypto::Key.with_password "Secret password"
67   -
68   -==== Initializing a Key with a Base64 encoded key
69   -
70   -If you already have a key from some other source in the popular Base64 encoded format, you use the decode class method:
71   -
72   - @key=EzCrypto::Key.decode @binarykey
73   -
74   -==== Exporting the key
75   -
76   -To export or save a key use the encode method (or to_s) method for a Base64 encoded key or raw as the raw binary data.
77   -
78   - puts @key.encode
79   - puts @key.raw
80   -
81   -The raw method could be used for storing in a database using a tinyblob column.
82   -
83   -== Encryption and Decryption
84   -
85   -EzCrypto is optimized for simple encryption and decryption of strings. There are encrypt/decrypt pairs for normal binary use as well as for Base64 encoded use.
86   -
87   -==== Regular raw use
88   -
89   -Assuming you have generated a key using one of the above methods:
90   -
91   - @encrypted=@key.encrypt("clear text")
92   - @decrypted=@key.decrypt(@encrypted)
93   - assert "clear text", @decrypted
94   -
95   -==== Base64 encoded use
96   -
97   -This uses the encrypt64 and decrypt64 methods. Otherwise it is all the same:
98   -
99   - @encrypted=@key.encrypt64("clear text")
100   - @decrypted=@key.decrypt64(@encrypted)
101   - assert "clear text", @decrypted
102   -
103   -== FAQ
104   -
105   -=== What algorithm does this use?
106   -
107   -It uses as the default algorithm the AES 128 bit standard. This is a very fast and highly secure algorithm specified as the national standard in the US. For more information see:
108   -
109   -http://en.wikipedia.org/wiki/AES
110   -
111   -=== Only 128 bits. Is that enough?
112   -
113   -While it might sound like more would make it more secure, there is really no real security advantage for most commercial applications to use more than 128 bit AES.
114   -
115   -=== What is Base64 encoding?
116   -
117   -This is the most efficient and commonly used encoding scheme for binary data. This is used amongst other things for email attachments. It is also very common to use it for encrypted data.
118   -
119   -=== What is a Salt?
120   -
121   -A salt is just a piece of data we hash in with the password to create the key. If it is a server based application you could use store a salt within your source file. The salt must be the same for both encryption and decryption.
122   -
123   -
124   -== License
125   -
126   -EzCrypto and ActionCrypto is released under the MIT license.
127   -
128   -
129   -== Support
130   -
131   -To contact the author, send mail to pelle@stakeventures.com
132   -
133   -Also see my blogs at:
134   -http://stakeventures.com and
135   -http://blog.extraeagle.com
136   -
137   -This project was based on code used in my projects Agree2, WideWord and WideBlog.
138   -
139   -Agree2 lets you create legal business agreements instantly.
140   -
141   -https://agree2.com
142   -
143   -WideWord lets you collaboratively write and share documents that remain 100% encrypted on the server. Only you have the keys:
144   -
145   -http://wideword.net
146   -
147   -WideBlog is a secure private blogging system designed for private project blogs. It uses the same encryption technology as WideWord and is very easy to use:
148   -
149   -http://wideblog.net
150   -
151   -
152   -(C) 2005-2009 Pelle Braendgaard
vendor/ezcrypto-0.7.2/README_ACTIVE_CRYPTO
... ... @@ -1,122 +0,0 @@
1   -= ActiveCrypto - Easy to use Crypto for Ruby on Rails
2   -
3   -ActiveCrypto is based on EzCrypto and provides application oriented crypto support for Ruby on Rails applications.
4   -
5   -== Features
6   -
7   -* Transparent encryption/decryption
8   -* Ruby on Rails like domain language
9   -
10   -== Installation
11   -
12   -Download it from here:
13   -
14   -http://rubyforge.org/frs/?group_id=755
15   -
16   -or install it via Ruby Gems:
17   -
18   - gem install ezruby
19   -
20   -
21   -== Simple examples
22   -
23   -==== A simple encrypted class
24   -
25   -You specify in your class which fields are encrypted:
26   -
27   - class Document < ActiveRecord::Base
28   - encrypt :title,:body
29   - end
30   -
31   -Two encrypt it you need to enter a key. For ease of use there is a method called enter_password which sets the key based on a password of your choice.
32   -
33   - doc=Document.new
34   - doc.enter_password "This stuff is secret man!!!"
35   - doc.title="Plan to take over the world"
36   - doc.body="Write apps in Rails"
37   - doc.save
38   -
39   -This needs to be done as well if you want to read your document:
40   -
41   - doc=Document.find 1
42   - doc.enter_password "This stuff is secret man!!!"
43   - puts doc.name
44   -
45   -If you don't remember to set a key it will through a MissingKeyError.
46   -
47   -==== More realistic example with KeyHolder
48   -
49   -It probably isn't much use if each record needs its own key. The solution to this is the KeyHolder. A KeyHolder is an object that holds keys for use by other objects. A typical example would be a user.
50   -
51   - class User < ActiveRecord::Base
52   - has_many :documents
53   - keyholder
54   - end
55   -
56   -We use standard ActiveRecord associations to associate the User with his documents. We also need to specify that he is a keyholder. We now modify our Document class as follows:
57   -
58   - class Document < ActiveRecord::Base
59   - belongs_to :user
60   - encrypt :title,:body,:key=>:user
61   - end
62   -
63   -We have the standard associations going on here, but we have also added the option :key=>:user to the encrypt statement. Now we could do this:
64   -
65   - @user=User.new
66   - @user.enter_password "This stuff is secret man!!!"
67   - @user.save
68   -
69   - @doc=Document.new
70   - @doc.user=@user
71   - @doc.title="Plan to take over the world"
72   - @doc.body="Write apps in Rails"
73   - @doc.save
74   -
75   -You could also do ordinary rails like stuf such as:
76   -
77   - @user.documents.each do |doc|
78   - puts doc.name
79   - end
80   -
81   -Decryption is done transparently.
82   -
83   -When doing this within a rails application, active_crypto automatically maintains a list of keys for each user session. Besides the 2 steps below you don't need to do anything special within your controller.
84   -
85   -1. When a user logs on with a password enter his password like this:
86   -
87   - @user.enter_password @params['password']
88   -
89   -2. When a user logs off call the following
90   -
91   - clear_session_keys
92   -
93   -== Usage as a Rails plugin
94   -
95   -Just unpack it into your $MY_RAILS_PROJECTS/vendor/plugins folder to use it as a self contained plugin. Otherwise you can install it as a gem using:
96   -
97   - $ gem install ezcrypto
98   -
99   -Then make sure to require "active_crypto.rb" at the end of your environment.rb file.
100   -
101   -== Database Schema issues
102   -
103   -ActiveCrypto doesn't really care about the schema, but that said you do need a schema that will accept and not mangle it's output. On MySQL I normally use TINYBLOB instead of VARCHAR and BLOB instead of TEXT.
104   -
105   -== License
106   -
107   -EzCrypto and ActionCrypto is released under the MIT license.
108   -
109   -
110   -== Support
111   -
112   -To contact the author, send mail to pelleb@gmail.com
113   -
114   -Also see my blogs at:
115   -http://stakeventures.com and
116   -http://neubia.com
117   -
118   -This project was based on code used in my projects WideWord where you can securely share documents and StakeItOut, where you can securely share web services with your partners.
119   -https://wideword.net
120   -https://stakeitout.com
121   -
122   -(C) 2005 Pelle Braendgaard
vendor/ezcrypto-0.7.2/README_DIGITAL_SIGNATURES
... ... @@ -1,55 +0,0 @@
1   -= EzSig - Easy to use Digital Signatures for Ruby
2   -
3   -EzSig is based on OpenSSL and allows you to do create and verify digital signatures in Ruby without learning too much crypto goobledegook.
4   -
5   -== Features
6   -
7   -* Simple Signer class
8   -* Simple Verifier class
9   -* Certificate sub class of Verifier which lets you read the certificate data in clear ruby.
10   -
11   -== Installation
12   -
13   -Download it from here:
14   -
15   -http://rubyforge.org/frs/?group_id=755
16   -
17   -or install it via Ruby Gems:
18   -
19   - gem install ezruby
20   -
21   -
22   -== Simple examples
23   -
24   -==== Load Private key and sign
25   -
26   - signer=EzCrypto::Signer.from_file "testsigner.pem"
27   - sig=signer.sign "hello"
28   -
29   -==== Load Certificate and verify
30   -
31   - cert=EzCrypto::Verifier.from_file "testsigner.cert"
32   - cert.verify( sig,"hello")
33   -
34   -==== Query Certificate for information
35   -
36   - assert_equal cert.email,"pelleb@gmail.com"
37   - assert_equal cert.country,"DK"
38   - assert_equal cert.state,"Denmark"
39   - assert_equal cert.locality,"Copenhagen"
40   -
41   -== PKYP integration
42   -
43   -http://pkyp.org allows you register your public keys and certificates on a public server. If you have web applications with certificates or public keys you can point your users at http://pkyp.org/{key.digest} for more info about a certificate.
44   -
45   -Register a public key or certificate at PKYP with the new method register_with_pkyp like this:
46   -
47   - signer=EzCrypto::Signer.generate
48   - signer.verifier.register_with_pkyp
49   -
50   -If you have the public key or certificate digest you can fetch the full public key or certificate like this:
51   -
52   - verifier=EzCrypto::Verifier.from_pkyp "e93e18114cbefaaa89fda908b09df63d3662879a"
53   - verifier.verify sig, request_text
54   -
55   -This allows a simpler way of transfering certificates. The idea of including certificates with every request is not really necessary in an online world. For example you could pass the digest in a HTTP header for a REST web services request.
vendor/ezcrypto-0.7.2/init.rb
... ... @@ -1 +0,0 @@
1   -require 'active_crypto.rb'
vendor/ezcrypto-0.7.2/lib/._active_crypto.rb
No preview for this file type
vendor/ezcrypto-0.7.2/lib/._ezcrypto.rb
No preview for this file type
vendor/ezcrypto-0.7.2/lib/._ezsig.rb
No preview for this file type
vendor/ezcrypto-0.7.2/lib/._trusted.pem
No preview for this file type
vendor/ezcrypto-0.7.2/lib/active_crypto.rb
... ... @@ -1,325 +0,0 @@
1   -require "ezcrypto.rb"
2   -module ActiveCrypto # :nodoc:
3   -
4   - def self.append_features(base) #:nodoc:
5   - super
6   - base.extend(ClassMethods)
7   - end
8   -
9   -=begin rdoc
10   -
11   -Usage is very simple. You will generally only need the two class methods listed here in your ActiveRecord class model.
12   -
13   -== License
14   -
15   -ActiveCrypto and EzCrypto are released under the MIT license.
16   -
17   -
18   -== Support
19   -
20   -To contact the author, send mail to pelleb@gmail.com
21   -
22   -Also see my blogs at:
23   -http://stakeventures.com and
24   -http://neubia.com
25   -
26   -This project was based on code used in my project StakeItOut, where you can securely share web services with your partners.
27   -https://stakeitout.com
28   -
29   -(C) 2005 Pelle Braendgaard
30   -
31   -=end
32   - module ClassMethods
33   - @@session_keys={}
34   -
35   -=begin rdoc
36   -Turn encryption on for this record. List all encrypted attributes
37   -
38   - class Document < ActiveRecord::Base
39   - encrypt :title,:body
40   - end
41   -
42   -Options are:
43   - <tt>key</tt> - to specify an external KeyHolder, which holds the key used for encrypting and decrypting
44   - <tt>base64</tt> - set to true in order to base64 encode the encrypted attributes. defaults to false
45   -
46   - class Document < ActiveRecord::Base
47   - belongs_to :user
48   - encrypt :title,:body,:key=>:user, :base64 => true
49   - end
50   -
51   -=end
52   - def encrypt(*attributes)
53   - include ActiveCrypto::Encrypted
54   - before_save :encrypt_attributes
55   - after_save :decrypt_attributes
56   - options=attributes.last.is_a?(Hash) ? attributes.pop : {}
57   - keyholder
58   - if options and options[:key]
59   - module_eval <<-"end;"
60   - def session_key
61   - (send :#{options[:key]} ).send :session_key
62   - end
63   - @@external_key=true
64   - end;
65   - end
66   -
67   - base64_encode = (options and options[:base64])
68   - module_eval <<-"end;"
69   - def self.ezcrypto_base64?
70   - #{base64_encode.to_s}
71   - end
72   - end;
73   -
74   - self.encrypted_attributes=attributes
75   - end
76   -
77   -=begin rdoc
78   -Creates support in this class for holding a key. Adds the following methods:
79   -
80   -* enter_password(password,salt="onetwothree")
81   -* set_session_key(key)
82   -* session_key
83   -
84   -Use it as follows:
85   -
86   - class User < ActiveRecord::Base
87   - has_many :documents
88   - keyholder
89   - end
90   -
91   -=end
92   - def keyholder()
93   - include ActiveCrypto::AssociationKeyHolder
94   - after_create :save_session_key
95   - end
96   -
97   -=begin rdoc
98   -Clears the session_key array. Generally this is handled automatically as a filter in ActionController. Only use these if you need to
99   -do something out of the ordinary.
100   -=end
101   - def clear_session_keys() #:nodoc:
102   - @@session_keys.clear
103   - end
104   -
105   -=begin rdoc
106   -Sets the session_keys array. Only use these if you need to
107   -do something out of the ordinary, as it is handled
108   -=end
109   - def session_keys=(keys) #:nodoc:
110   - @@session_keys=keys
111   - end
112   -
113   - def session_keys() #:nodoc:
114   - @@session_keys
115   - end
116   -
117   - end
118   -
119   -=begin rdoc
120   -This module handles all standard key management features.
121   -=end
122   - module KeyHolder
123   -
124   -=begin rdoc
125   -Creates a key for object based on given password and an optional salt.
126   -=end
127   - def enter_password(password,salt="onetwothree")
128   - set_session_key(EzCrypto::Key.with_password(password, salt))
129   - end
130   -
131   -=begin rdoc
132   -Decodes the Base64 encoded key and uses it as it's session key
133   -=end
134   - def set_encoded_key(enc)
135   - set_session_key(EzCrypto::Key.decode(enc))
136   - end
137   -=begin rdoc
138   -Sets a session key for the object. This should be a EzCrypto::Key instance.
139   -=end
140   - def set_session_key(key)
141   - @session_key=key
142   - self.decrypt_attributes if self.class.include? Encrypted
143   - end
144   -
145   -=begin rdoc
146   -Returns the session_key
147   -=end
148   - def session_key
149   - @session_key
150   - end
151   -
152   - end
153   -
154   - module AssociationKeyHolder
155   - include ActiveCrypto::KeyHolder
156   -
157   -
158   - def save_session_key
159   - ActiveRecord::Base.session_keys[session_key_id]=@session_key if @session_key
160   - end
161   -=begin rdoc
162   -Sets a session key for the object. This should be a EzCrypto::Key instance.
163   -=end
164   - def set_session_key(key)
165   - if self.new_record?
166   - @session_key=key
167   - else
168   - ActiveRecord::Base.session_keys[session_key_id]=key
169   - end
170   - decrypt_attributes if self.class.include? Encrypted #if respond_to?(:decrypt_attributes)
171   -
172   - end
173   -
174   -=begin rdoc
175   -Returns the session_key
176   -=end
177   - def session_key
178   - if self.new_record?
179   - @session_key
180   - else
181   - ActiveRecord::Base.session_keys[session_key_id]
182   - end
183   - end
184   -
185   -
186   -
187   - def session_key_id
188   - "#{self.class.to_s}:#{id}"
189   - end
190   -
191   - end
192   -
193   - module Encrypted #:nodoc:
194   - def self.append_features(base) #:nodoc:
195   - super
196   - base.extend ClassAccessors
197   - end
198   -
199   - module ClassAccessors
200   - def encrypted_attributes
201   - @encrypted_attributes||=[]
202   - end
203   -
204   - def encrypted_attributes=(attrs)
205   - @encrypted_attributes=attrs
206   - end
207   -
208   - end
209   -
210   - protected
211   -
212   - def encrypt_attributes
213   - if !is_encrypted?
214   - self.class.encrypted_attributes.each do |key|
215   - value=read_attribute(key)
216   - write_attribute(key,_encrypt(value)) if value
217   - end
218   - @is_encrypted=true
219   - end
220   - true
221   - end
222   -
223   - def decrypt_attributes
224   - if is_encrypted?
225   - self.class.encrypted_attributes.each do |key|
226   - value=read_attribute(key)
227   - write_attribute(key,_decrypt(value)) if value
228   - end
229   - @is_encrypted=false
230   - end
231   - true
232   - end
233   -
234   - def after_find
235   - @is_encrypted=true
236   - decrypt_attributes unless session_key.nil?
237   - end
238   -
239   - private
240   - def is_encrypted?
241   - @is_encrypted
242   - end
243   -
244   - def _decrypt(data)
245   - if session_key.nil?
246   - raise MissingKeyError
247   - else
248   - if data
249   - self.class.ezcrypto_base64? ? session_key.decrypt64(data) : session_key.decrypt(data)
250   - else
251   - nil
252   - end
253   - end
254   - end
255   -
256   - def _encrypt(data)
257   - if session_key.nil?
258   - raise MissingKeyError
259   - else
260   - if data
261   - self.class.ezcrypto_base64? ? session_key.encrypt64(data) : session_key.encrypt(data)
262   - else
263   - nil
264   - end
265   - end
266   - end
267   -
268   - end
269   -
270   -
271   -module ActionController # :nodoc:
272   -=begin rdoc
273   -This includes some basic support in the ActionController for handling session keys. It creates two filters one before the action and one after.
274   -These do the following:
275   -
276   -If the users session already has a 'session_keys' value it loads it into the ActiveRecord::Base.session_keys class field. If not it
277   -clears any existing session_keys.
278   -
279   -Leaving the action it stores any session_keys in the corresponding session variable.
280   -
281   -These filters are automatically enabled. You do not have to do anything.
282   -
283   -To manually clear the session keys call clear_session_keys. This should be done for example as part of a session log off action.
284   -=end
285   - def self.append_features(base) #:nodoc:
286   - super
287   - base.send :prepend_before_filter, :load_session_keys
288   - base.send :prepend_after_filter, :save_session_keys
289   - end
290   -
291   -=begin rdoc
292   -Clears the session keys. Call this when a user logs of.
293   -=end
294   - def clear_session_keys
295   - ActiveRecord::Base.clear_session_keys
296   - end
297   -
298   -
299   - private
300   - def load_session_keys
301   - if session['session_keys']
302   - ActiveRecord::Base.session_keys=session['session_keys']
303   - else
304   - ActiveRecord::Base.clear_session_keys
305   - end
306   - end
307   -
308   - def save_session_keys
309   - if ActiveRecord::Base.session_keys.size>0
310   - session['session_keys']=ActiveRecord::Base.session_keys
311   - else
312   - session['session_keys']=nil
313   - end
314   - end
315   -
316   -
317   -end
318   -
319   -class MissingKeyError < RuntimeError
320   -end
321   -end
322   -ActiveRecord::Base.send :include, ActiveCrypto
323   -require 'actionpack'
324   -require 'action_controller'
325   -ActionController::Base.send :include, ActiveCrypto::ActionController
vendor/ezcrypto-0.7.2/lib/ezcrypto.rb
... ... @@ -1,612 +0,0 @@
1   -require 'openssl'
2   -require 'digest/sha2'
3   -require 'digest/sha1'
4   -require 'base64'
5   -
6   -module EzCrypto #:nodoc:
7   -
8   -
9   -=begin rdoc
10   -The Key is the only class you need to understand for simple use.
11   -
12   -=== Algorithms
13   -
14   -The crypto algorithms default to aes-128-cbc however on any of the class methods you can change it to one of the standard openssl cipher names using the
15   -optional <tt>:algorithm=>alg name</tt> parameter.
16   -
17   -Eg.
18   - Key.new @raw, :algorithm=>"des"
19   - Key.generate :algorithm=>"blowfish"
20   - Key.with_password @pwd,@salt,:algorithm=>"aes256"
21   -
22   -
23   -== License
24   -
25   -ActiveCrypto and EzCrypto are released under the MIT license.
26   -
27   -
28   -== Support
29   -
30   -To contact the author, send mail to pelleb@gmail.com
31   -
32   -Also see my blogs at:
33   -http://stakeventures.com and
34   -http://neubia.com
35   -
36   -This project was based on code used in my project StakeItOut, where you can securely share web services with your partners.
37   -https://stakeitout.com
38   -
39   -(C) 2005 Pelle Braendgaard
40   -
41   -=end
42   -
43   - class Key
44   -
45   - attr_reader :raw, :algorithm
46   -
47   - @@block_size = 512
48   -
49   -=begin rdoc
50   -Set the block-size for IO-operations (default: 512 bytes)
51   -=end
52   - def self.block_size=(size)
53   - @@block_size = size
54   - end
55   -
56   -=begin rdoc
57   -Return the block-size for IO-operations.
58   -=end
59   - def self.block_size
60   - @@block_size
61   - end
62   -
63   -
64   -=begin rdoc
65   -Initialize the key with raw unencoded binary key data. This needs to be at least
66   -16 bytes long for the default aes-128 algorithm.
67   -=end
68   - def initialize(raw,options = {})
69   - @raw=raw
70   - @algorithm=options[:algorithm]||"aes-128-cbc"
71   - end
72   -
73   -=begin rdoc
74   -Generate random key.
75   -=end
76   - def self.generate(options = {})
77   - Key.new(EzCrypto::Digester.generate_key(calculate_key_size(options[:algorithm])),options)
78   - end
79   -
80   -=begin rdoc
81   -Create key generated from the given password and salt
82   -=end
83   - def self.with_password(password,salt,options = {})
84   - Key.new(EzCrypto::Digester.get_key(password,salt,calculate_key_size(options[:algorithm])),options)
85   - end
86   -
87   -=begin rdoc
88   -Initialize the key with Base64 encoded key data.
89   -=end
90   - def self.decode(encoded,options = {})
91   - Key.new(Base64.decode64(encoded),options)
92   - end
93   -
94   -=begin rdoc
95   -Encrypts the data with the given password and a salt. Short hand for:
96   -
97   - key=Key.with_password(password,salt,options)
98   - key.encrypt(data)
99   -
100   -=end
101   - def self.encrypt_with_password(password,salt,data,options = {})
102   - key=Key.with_password(password,salt,options)
103   - key.encrypt(data)
104   - end
105   -
106   -=begin rdoc
107   -Decrypts the data with the given password and a salt. Short hand for:
108   -
109   - key=Key.with_password(password,salt,options)
110   - key.decrypt(data)
111   -
112   -
113   -=end
114   - def self.decrypt_with_password(password,salt,data,options = {})
115   - key=Key.with_password(password,salt,options)
116   - key.decrypt(data)
117   - end
118   -
119   -=begin rdoc
120   -Given an algorithm this calculates the keysize. This is used by both
121   -the generate and with_password methods. This is not yet 100% complete.
122   -=end
123   - def self.calculate_key_size(algorithm)
124   - if !algorithm.nil?
125   - algorithm=~/^([[:alnum:]]+)(-(\d+))?/
126   - if $3
127   - size=($3.to_i)/8
128   - else
129   - case $1
130   - when "bf"
131   - size = 16
132   - when "blowfish"
133   - size = 16
134   - when "des"
135   - size = 8
136   - when "des3"
137   - size = 24
138   - when "aes128"
139   - size = 16
140   - when "aes192"
141   - size = 24
142   - when "aes256"
143   - size = 32
144   - when "rc2"
145   - size = 16
146   - when "rc4"
147   - size = 16
148   - else
149   - size = 16
150   - end
151   - end
152   - end
153   - if size.nil?
154   - size = 16
155   - end
156   -
157   - size
158   - end
159   -
160   -=begin rdoc
161   -returns the Base64 encoded key.
162   -=end
163   - def encode
164   - Base64.encode64(@raw).chop
165   - end
166   -
167   -=begin rdoc
168   -returns the Base64 encoded key. Synonym for encode.
169   -=end
170   - def to_s
171   - encode
172   - end
173   -
174   -=begin rdoc
175   -Encrypts the data and returns it in encrypted binary form.
176   -=end
177   - def encrypt(data)
178   - if data==nil || data==""
179   - nil
180   - else
181   - encrypter("")
182   - @cipher.encrypt(data)
183   - end
184   - end
185   -
186   -=begin rdoc
187   -Encrypts the data and returns it in encrypted Base64 encoded form.
188   -=end
189   - def encrypt64(data)
190   - Base64.encode64(encrypt(data))
191   - end
192   -
193   -=begin rdoc
194   -Decrypts the data passed to it in binary format.
195   -=end
196   - def decrypt(data)
197   - if data==nil || data==""
198   - nil
199   - else
200   - decrypter("")
201   - @cipher.gulp(data)
202   - end
203   -# rescue
204   -# puts @algorithm
205   -# puts self.encode
206   -# puts data.size
207   -# throw $!
208   - end
209   -
210   -=begin rdoc
211   -Decrypts a Base64 formatted string
212   -=end
213   - def decrypt64(data)
214   - decrypt(Base64.decode64(data))
215   - end
216   -
217   -=begin rdoc
218   -Allows keys to be marshalled
219   -=end
220   - def marshal_dump
221   - "#{self.algorithm}$$$#{self.encode}"
222   - end
223   -
224   -=begin rdoc
225   -Allows keys to be unmarshalled
226   -=end
227   - def marshal_load(s)
228   - a, r = s.split '$$$'
229   - @algorithm = a
230   - @raw = Base64.decode64(r)
231   - end
232   -
233   -=begin rdoc
234   -Create a file with minimal permissions, and yield
235   -it to a block. By default only the owner may read it.
236   -=end
237   - def safe_create(file, mod=0400, mask=0066)
238   - begin
239   - old_umask = File.umask
240   - File.umask(mask)
241   - File.open(file, File::CREAT | File::EXCL | File::WRONLY) do |f|
242   - yield(f) if block_given?
243   - end
244   - ensure
245   - File.umask(old_umask)
246   - end
247   - File.chmod(mod, file) if File.exists?(file)
248   - File.size(file)
249   - end
250   -
251   -
252   -=begin rdoc
253   -Overwrite a file with zero values before removing it's filesystem inode.
254   -This is not very safe :-)
255   -=end
256   - def safe_delete(file)
257   - begin
258   - to_clear = File.size(file)
259   - zeroes = Array.new(Key.block_size, "\0").join
260   - File.chmod(0600, file)
261   - File.open(file, File::WRONLY) do |f|
262   - f.rewind
263   - while to_clear > 0
264   - f.write(zeroes)
265   - to_clear -= Key.block_size
266   - end
267   - f.flush
268   - end
269   - ensure
270   - File.delete(file) if File.exists?(file)
271   - end
272   - return !File.exists?(file)
273   - end
274   -
275   -
276   -=begin rdoc
277   -Open a file readonly and yield it to a block.
278   -=end
279   - def safe_read(file)
280   - File.open(file, File::RDONLY) do |i|
281   - yield(i) if block_given?
282   - end
283   - end
284   -
285   - private :safe_create, :safe_read, :safe_delete
286   -
287   -=begin rdoc
288   -Load a key from a yaml_file generated via Key#store.
289   -=end
290   - def self.load(filename)
291   - require 'yaml'
292   - hash = YAML::load_file(filename)
293   - req = proc { |k| hash[k] or raise "Missing element #{k} in #{filename}" }
294   - key = self.new Base64.decode64(req.call(:key)) , :algorithm => req.call(:algorithm)
295   - return key
296   - end
297   -
298   -
299   -=begin rdoc
300   -Save the key data into a file, try to do this in a secure manner.
301   -NOTE: YAML::store & friends are not used to encance control over
302   -the generated file format.
303   -=end
304   - def store(filename)
305   - safe_create(filename) do |f|
306   - selfenc = self.encode
307   - f.puts "---"
308   - f.puts ":EZCRYPTO KEY FILE: KEEP THIS SECURE !"
309   - f.puts ":created: #{Time.now}"
310   - f.puts ":algorithm: #{@algorithm}"
311   - f.puts ":key: #{selfenc}"
312   - end
313   - end
314   -
315   -
316   -=begin rdoc
317   -Get a Encrypter object. You have to call #final on it by yourself!
318   -=end
319   - def encrypter(target='')
320   - @cipher = EzCrypto::Encrypter.new(self,target,@algorithm)
321   - end
322   -
323   -
324   -=begin rdoc
325   -Get a Decrypter object. You have to call #final on it by yourself!
326   -=end
327   - def decrypter(target='')
328   - @cipher = EzCrypto::Decrypter.new(self,target,@algorithm)
329   - end
330   -
331   -=begin rdoc
332   -Create a Decrypter object and yield it to a block.
333   -You must *not* call #final by yourself, the method
334   -does this.
335   -=end
336   - def on_decrypter(target='', &block)
337   - decrypter(target)
338   - on_cipher(&block)
339   - end
340   -
341   -=begin rdoc
342   -Create an Encrypter object and yield it to a block.
343   -You must *not* call #final by yourself, the method
344   -does this.
345   -=end
346   - def on_encrypter(target='', &block)
347   - encrypter(target)
348   - on_cipher(&block)
349   - end
350   -
351   -
352   -=begin rdoc
353   -Helper method, yields the current cipher to a block.
354   -=end
355   - def on_cipher(&block)
356   - begin
357   - block.call @cipher
358   - ensure
359   - @cipher.final
360   - end
361   - end
362   -
363   - private :on_cipher
364   -
365   -
366   -=begin rdoc
367   -Encrypt a file 'inplace' and add a suffix
368   -see #cipher_file.
369   -IMPORTANT: The inputfile will be deleted by default.
370   -=end
371   - def encrypt_file(src, tgt=nil, options = {} )
372   - options = { :suffix => '.ez', :autoclean => 'true' }.update(options)
373   - tgt = "#{src}#{options[:suffix]}" unless tgt
374   - cipher_file :on_encrypter, src, tgt, options[:autoclean]
375   - end
376   -
377   -
378   -=begin rdoc
379   -Decrypt a file 'inplace' and remove a suffix
380   -see #cipher_file
381   -IMPORTANT: The inputfile will be deleted by default.
382   -=end
383   - def decrypt_file(src, tgt=nil, options = {} )
384   - options = { :suffix => '.ez', :autoclean => 'true' }.update(options)
385   - unless tgt
386   - tgt = src
387   - tgt = tgt.gsub(/#{options[:suffix]}$/, '')
388   - end
389   - cipher_file :on_decrypter, src, tgt, options[:autoclean]
390   - end
391   -
392   -
393   -=begin rdoc
394   -uses either #on_decrypter or #on_encrypter to transform a given sourcefile
395   -to a targetfile. the sourcefile is deleted after sucessful transformation
396   -the delete_source is 'true'.
397   -=end
398   - def cipher_file(method, sourcefile, targetfile, delete_source)
399   - raise(ArgumentError, "source == target #{sourcefile}") if sourcefile == targetfile
400   - safe_create(targetfile,0600) do |o|
401   - self.send(method, o) do |c|
402   - safe_read(sourcefile) do |i|
403   - loop do
404   - buffer = i.read(Key.block_size) or break
405   - c << buffer
406   - end
407   - end
408   - end
409   - end
410   - safe_delete(sourcefile) if delete_source && File.exists?(targetfile)
411   - return targetfile
412   - end
413   -
414   - private :cipher_file
415   -
416   - end
417   -
418   -=begin rdoc
419   -Abstract Wrapper around OpenSSL's Cipher object. Extended by Encrypter and Decrypter.
420   -
421   -You probably should be using the Key class instead.
422   -
423   -Warning! The interface may change.
424   -
425   -=end
426   - class CipherWrapper #:nodoc:
427   -
428   -=begin rdoc
429   -
430   -=end
431   - def initialize(key,target,mode,algorithm)
432   - @cipher = OpenSSL::Cipher::Cipher.new(algorithm)
433   - if mode
434   - @cipher.encrypt
435   - else
436   - @cipher.decrypt
437   - end
438   - @cipher.key=key.raw
439   - @cipher.padding=1
440   - @target=target
441   - @finished=false
442   - end
443   -
444   -
445   - def to_target(data)
446   - return data
447   - end
448   -
449   -=begin rdoc
450   -Process the givend data with the cipher.
451   -=end
452   - def update(data)
453   - reset if @finished
454   - @target<< to_target(@cipher.update(data))
455   - end
456   -
457   -=begin rdoc
458   -
459   -=end
460   - def <<(data)
461   - update(data)
462   - end
463   -
464   -=begin rdoc
465   -Finishes up any last bits of data in the cipher and returns the final result.
466   -=end
467   - def final
468   - @target<< to_target(@cipher.final)
469   - @finished=true
470   - @target
471   - end
472   -
473   -=begin rdoc
474   -Processes the entire data string using update and performs a final on it returning the data.
475   -=end
476   - def gulp(data)
477   - update(data)
478   - final
479   -# rescue
480   -# breakpoint
481   - end
482   -
483   -=begin rdoc
484   -
485   -=end
486   - def reset(target="")
487   - @target=target
488   - @finished=false
489   - end
490   - end
491   -
492   -=begin rdoc
493   -Wrapper around OpenSSL Cipher for Encryption use.
494   -
495   -You probably should be using Key instead.
496   -
497   -Warning! The interface may change.
498   -
499   -=end
500   - class Encrypter<EzCrypto::CipherWrapper #:nodoc:
501   -
502   -=begin rdoc
503   -
504   -=end
505   - def initialize(key,target="",algorithm="aes-128-cbc")
506   - super(key,target,true,algorithm)
507   - end
508   -
509   -=begin rdoc
510   -
511   -=end
512   - def encrypt(data)
513   - gulp(data)
514   - end
515   - end
516   -
517   -=begin rdoc
518   -Wrapper around OpenSSL Cipher for Decryption use.
519   -
520   -You probably should be using Key instead.
521   -
522   -Warning! The interface may change.
523   -=end
524   - class Decrypter<EzCrypto::CipherWrapper #:nodoc:
525   -=begin rdoc
526   -
527   -=end
528   - def initialize(key,target="",algorithm="aes-128-cbc")
529   - super(key,target,false,algorithm)
530   - end
531   -
532   -=begin rdoc
533   -
534   -=end
535   - def decrypt(data)
536   - gulp(data)
537   - end
538   - end
539   -
540   -=begin rdoc
541   -
542   -=end
543   - class Digester
544   -=begin rdoc
545   -Various handy Digest methods.
546   -
547   -Warning! The interface may change.
548   -=end
549   - def self.get_key(password,salt,size)
550   - digest(salt+password,size)
551   - end
552   -
553   -=begin rdoc
554   -
555   -=end
556   - def self.generate_key(size=16)
557   - key=OpenSSL::Random.random_bytes(size)
558   - digest(key,size)
559   - end
560   -
561   -=begin rdoc
562   -
563   -=end
564   - def self.generate_key64(size=32)
565   - key=OpenSSL::Random.random_bytes(size)
566   - digest64(key,size)
567   - end
568   -=begin rdoc
569   -
570   -=end
571   - def self.generate_hexkey(size=40)
572   - key=OpenSSL::Random.random_bytes(size)
573   - hexdigest(key,size)
574   - end
575   -
576   -=begin rdoc
577   -
578   -=end
579   - def self.digest(data,size=16)
580   - if size==0
581   - ""
582   - elsif size<=16
583   - Digest::SHA1.digest(data)[0..(size-1)]
584   - else
585   - Digest::SHA256.digest(data)[0..(size-1)]
586   - end
587   - end
588   -
589   -=begin rdoc
590   -
591   -=end
592   - def self.hexdigest(data,size=40)
593   - if size==0
594   - ""
595   - elsif size<=40
596   - Digest::SHA1.hexdigest(data)[0..(size-1)]
597   - else
598   - Digest::SHA256.hexdigest(data)[0..(size-1)]
599   - end
600   - end
601   -
602   -=begin rdoc
603   -
604   -=end
605   - def self.digest64(data,size=16)
606   - Base64.encode64(digest(data,size))
607   - end
608   - end
609   -
610   -end
611   -
612   -
vendor/ezcrypto-0.7.2/lib/ezsig.rb
... ... @@ -1,535 +0,0 @@
1   -require 'ezcrypto'
2   -require 'net/http'
3   -=begin rdoc
4   -
5   -These modules provides a simple ruby like way to create and verify digital signatures.
6   -
7   -== License
8   -
9   -ActiveCrypto and EzCrypto are released under the MIT license.
10   -
11   -
12   -== Support
13   -
14   -To contact the author, send mail to pelleb@gmail.com
15   -
16   -Also see my blogs at:
17   -http://stakeventures.com and
18   -http://neubia.com
19   -
20   -This project was based on code used in my project StakeItOut, where you can securely share web services with your partners.
21   -https://stakeitout.com
22   -
23   -(C) 2005 Pelle Braendgaard
24   -
25   -=end
26   -module EzCrypto
27   -
28   -=begin rdoc
29   - The signer is used for signing stuff. It encapsulates the functionality of a private key.
30   -=end
31   - class Signer
32   -=begin rdoc
33   - Initialize a Signer with a OpenSSL Private Key. You generally should not call new directly.
34   - Unless you are interfacing with your own underlying OpenSSL code.
35   -=end
36   - def initialize(priv,options = {})
37   - @priv=priv
38   - end
39   -
40   -=begin rdoc
41   - Generate a new keypair. Defaults to 2048 bit RSA.
42   -=end
43   - def self.generate(strength=2048,type=:rsa)
44   - key_class=case type
45   - when :dsa
46   - OpenSSL::PKey::DSA
47   - else
48   - OpenSSL::PKey::RSA
49   - end
50   - EzCrypto::Signer.new(key_class.generate(strength))
51   - end
52   -
53   -=begin rdoc
54   - Decode a PEM encoded Private Key and return a signer. Takes an optional password
55   -=end
56   - def self.decode(encoded,password=nil)
57   - begin
58   - EzCrypto::Signer.new(OpenSSL::PKey::RSA.new( encoded,password))
59   - rescue
60   - EzCrypto::Signer.new(OpenSSL::PKey::DSA.new( encoded,password))
61   - end
62   - end
63   -
64   -=begin rdoc
65   - Decode a PEM encoded Private Key file and return a signer. Takes an optional password
66   -=end
67   - def self.from_file(filename,password=nil)
68   - file = File.read( filename )
69   - decode(file,password)
70   - end
71   -
72   -=begin rdoc
73   - Returns the OpenSSL Public Key object. You normally do not need to use this.
74   -=end
75   - def public_key
76   - @priv.public_key
77   - end
78   -
79   -=begin rdoc
80   - Returns the corresponding Verifier object.
81   -=end
82   - def verifier
83   - Verifier.new(public_key)
84   - end
85   -
86   -=begin rdoc
87   - Returns the OpenSSL Private Key object. You normally do not need to use this.
88   -=end
89   - def private_key
90   - @priv
91   - end
92   -
93   -=begin rdoc
94   - signs data using the private key and the corresponding digest function. SHA1 for RSA and DSS1 for DSA.
95   - 99% of signing use these parameters.
96   - Email a request or send me a patch if you have other requirements.
97   -=end
98   - def sign(data)
99   - if rsa?
100   - @priv.sign(OpenSSL::Digest::SHA1.new,data)
101   - elsif dsa?
102   - @priv.sign(OpenSSL::Digest::DSS1.new,data)
103   - end
104   - end
105   -
106   -=begin rdoc
107   - Returns true if it is a RSA private key
108   -=end
109   - def rsa?
110   - @priv.is_a? OpenSSL::PKey::RSA
111   - end
112   -
113   -=begin rdoc
114   - Returns true if it is a DSA private key
115   -=end
116   - def dsa?
117   - @priv.is_a? OpenSSL::PKey::DSA
118   - end
119   -
120   - end
121   -
122   -=begin rdoc
123   - The Verifier is used for verifying signatures. If you use the decode or
124   - from_file methods you can use either raw PEM encoded public keys or certificate.
125   -=end
126   - class Verifier
127   -=begin rdoc
128   - Initializes a Verifier using a OpenSSL public key object.
129   -=end
130   - def initialize(pub)
131   - @pub=pub
132   - end
133   -
134   -=begin rdoc
135   - Decodes a PEM encoded Certificate or Public Key and returns a Verifier object.
136   -=end
137   - def self.decode(encoded)
138   - case encoded
139   - when /-----BEGIN CERTIFICATE-----/
140   - EzCrypto::Certificate.new(OpenSSL::X509::Certificate.new( encoded))
141   - else
142   - begin
143   - EzCrypto::Verifier.new(OpenSSL::PKey::RSA.new( encoded))
144   - rescue
145   - EzCrypto::Verifier.new(OpenSSL::PKey::DSA.new( encoded))
146   - end
147   - end
148   - end
149   -
150   -=begin rdoc
151   - Decodes a PEM encoded Certificate or Public Key from a file and returns a Verifier object.
152   -=end
153   - def self.from_file(filename)
154   - file = File.read( filename )
155   - decode(file)
156   - end
157   -
158   -=begin rdoc
159   - Load a certificate or public key from PKYP based on it's hex digest
160   -=end
161   - def self.from_pkyp(digest)
162   - digest=digest.strip.downcase
163   - if digest=~/[0123456789abcdef]{40}/
164   -# Net::HTTP.start("localhost", 9000) do |query|
165   - Net::HTTP.start("pkyp.org", 80) do |query|
166   - response=query.get "/#{digest}.pem"
167   - if response.code=="200"
168   - decode(response.body)
169   - else
170   - raise "Error occured (#{response.code}): #{response.body}"
171   - end
172   - end
173   - else
174   - raise "Invalid digest"
175   - end
176   - end
177   -
178   -=begin rdoc
179   - Decodes all certificates or public keys in a file and returns an array.
180   -=end
181   - def self.load_all_from_file(filename)
182   - file = File.read( filename )
183   - certs=[]
184   - count=0
185   - file.split( %q{-----BEGIN}).each do |pem|
186   - if pem and pem!=""
187   - pem="-----BEGIN#{pem}\n"
188   - cert=decode(pem)
189   - if cert.is_a? EzCrypto::Verifier
190   - certs<<cert
191   - end
192   - end
193   - end
194   - certs
195   - end
196   -
197   -=begin rdoc
198   - Is the Verifier a Certificate or not.
199   -=end
200   - def cert?
201   - false
202   - end
203   -
204   -=begin rdoc
205   - Returns the OpenSSL public key object. You would normally not need to use this.
206   -=end
207   - def public_key
208   - @pub
209   - end
210   -
211   -=begin rdoc
212   - Returns the SHA1 hexdigest of the DER encoded public key. This can be used as a unique key identifier.
213   -=end
214   - def digest
215   - Digest::SHA1.hexdigest(@pub.to_der)
216   - end
217   -=begin rdoc
218   - Is this a RSA key?
219   -=end
220   - def rsa?
221   - @pub.is_a? OpenSSL::PKey::RSA
222   - end
223   -=begin rdoc
224   - Is this a DSA key?
225   -=end
226   - def dsa?
227   - @pub.is_a? OpenSSL::PKey::DSA
228   - end
229   -
230   -
231   -=begin rdoc
232   - Returns true if the public key signed the given data.
233   -=end
234   - def verify(sig,data)
235   - if rsa?
236   - @pub.verify( OpenSSL::Digest::SHA1.new, sig, data )
237   - elsif dsa?
238   - @pub.verify( OpenSSL::Digest::DSS1.new, sig, data )
239   - else
240   - false
241   - end
242   - end
243   -
244   -=begin rdoc
245   - Register the public key or certificate at PKYP
246   -=end
247   - def register_with_pkyp
248   - send_to_pkyp(@pub.to_s)
249   - end
250   -
251   - protected
252   -
253   - def send_to_pkyp(pem)
254   -# Net::HTTP.start("localhost", 9000) do |query|
255   - Net::HTTP.start("pkyp.org", 80) do |query|
256   - output=URI.escape(pem).gsub("+","%2b")
257   - response=query.post "/register","body="+output
258   - if response.code=="302"
259   - response["Location"]=~/([0123456789abcdef]{40}$)/
260   - $1
261   - else
262   - raise "Error occured (#{response.code}): #{response.body}"
263   - end
264   - end
265   - end
266   -
267   - end
268   -
269   -=begin rdoc
270   - Certificate provides functionality to make it easy to extract information from a Certificate.
271   - This also provides all the same functionality as a Verifier.
272   -=end
273   - class Certificate < Verifier
274   -
275   -=begin rdoc
276   - Intialize with a OpenSSL cert object.
277   -=end
278   - def initialize(cert)
279   - super(cert.public_key)
280   - @cert=cert
281   - end
282   -
283   -=begin rdoc
284   - Returns true
285   -=end
286   - def cert?
287   - true
288   - end
289   -
290   -=begin rdoc
291   - Register the certificate at PKYP
292   -=end
293   - def register_with_pkyp
294   - send_to_pkyp(@cert.to_s)
295   - end
296   -
297   -=begin rdoc
298   - Returns the SHA1 hex digest of a the DER encoded certificate. This is useful as a unique identifier.
299   -=end
300   - def cert_digest
301   - Digest::SHA1.hexdigest(@cert.to_der)
302   - end
303   -
304   -=begin rdoc
305   - Returns a Name object containt the subject of the certificate. The subject in X509 speak is the details of the certificate owner.
306   -=end
307   - def subject
308   - @subject=EzCrypto::Name.new(@cert.subject) unless @subject
309   - @subject
310   - end
311   -
312   -=begin rdoc
313   - Returns a Name object containt the issuer of the certificate.
314   -=end
315   - def issuer
316   - @issuer=EzCrypto::Name.new(@cert.issuer) unless @issuer
317   - @issuer
318   - end
319   -
320   -=begin rdoc
321   - Returns the issuers serial number for this certificate
322   -=end
323   - def serial
324   - @cert.serial
325   - end
326   -
327   -=begin rdoc
328   - Returns the OpenSSL Certificate object
329   -=end
330   - def cert
331   - @cert
332   - end
333   -
334   -=begin rdoc
335   - Returns the certificates valid not before date.
336   -=end
337   - def not_before
338   - @cert.not_before
339   - end
340   -
341   -=begin rdoc
342   - Returns the certificates valid not after date.
343   -=end
344   - def not_after
345   - @cert.not_after
346   - end
347   -
348   -=begin rdoc
349   - Is this certificate valid at this point in time. Note this only checks if it is valid with respect to time.
350   - It is important to realize that it does not check with any CRL or OCSP services to see if the certificate was
351   - revoked.
352   -=end
353   - def valid?(time=Time.now.utc)
354   - time>not_before && time<self.not_after
355   - end
356   -
357   -=begin rdoc
358   - Returns the hash of extensions available in the certificate. These are not always present.
359   -=end
360   - def extensions
361   - unless @extensions
362   - @extensions={}
363   - cert.extensions.each {|e| @extensions[e.oid]=e.value} if cert.extensions
364   - end
365   - @extensions
366   - end
367   -
368   -=begin rdoc
369   - Any methods defined in Name can be used here. This means you can do cert.email rather than cert.subject.email.
370   -=end
371   - def method_missing(method)
372   - subject.send method
373   - end
374   -
375   - end
376   -
377   -=begin rdoc
378   - A handy ruby wrapper around OpenSSL's Name object. This was created to make it really easy to extract information out of the certificate.
379   -=end
380   - class Name
381   -=begin rdoc
382   - Initializes the Name object with the underlying OpenSSL Name object. You generally do not need to use this.
383   - Rather use the Certificates subject or issuer methods.
384   -=end
385   - def initialize(name)
386   - @name=name
387   - @attributes={}
388   - name.to_s.split(/\//).each do |field|
389   - key, val = field.split(/=/,2)
390   - if key
391   - @attributes[key.to_sym]=val
392   - end
393   - end
394   - end
395   -
396   -=begin rdoc
397   - Returns the full name object in classic horrible X500 format.
398   -=end
399   - def to_s
400   - @name.to_s
401   - end
402   -
403   -=begin rdoc
404   - Returns the email if present in the name
405   -=end
406   - def email
407   - self[:emailAddress]
408   - end
409   -=begin rdoc
410   - The 2 letter country code of the name
411   -=end
412   - def country
413   - self[:C]
414   - end
415   - alias_method :c,:country
416   -=begin rdoc
417   - The state or province code
418   -=end
419   - def state
420   - self[:ST]
421   - end
422   - alias_method :st,:state
423   - alias_method :province,:state
424   -
425   -=begin rdoc
426   - The locality
427   -=end
428   - def locality
429   - self[:L]
430   - end
431   - alias_method :l,:locality
432   -
433   -=begin rdoc
434   - The Organizational Unit
435   -=end
436   - def organizational_unit
437   - self[:OU]
438   - end
439   - alias_method :ou,:organizational_unit
440   - alias_method :organisational_unit,:organizational_unit
441   -
442   -=begin rdoc
443   - The Organization
444   -=end
445   - def organization
446   - self[:O]
447   - end
448   - alias_method :o,:organization
449   - alias_method :organisation,:organization
450   -
451   -=begin rdoc
452   - The common name. For SSL this means the domain name. For personal certificates it is the name.
453   -=end
454   - def common_name
455   - self[:CN]
456   - end
457   - alias_method :name,:common_name
458   - alias_method :cn,:common_name
459   -
460   -=begin rdoc
461   - Lookup fields in the certificate.
462   -=end
463   - def [](attr_key)
464   - @attributes[attr_key.to_sym]
465   - end
466   -
467   - def method_missing(method)
468   - self[method]
469   - end
470   -
471   - end
472   -
473   -=begin rdoc
474   - Wraps around the OpenSSL trust store. This allows you to decide which certificates you trust.
475   -
476   - You can either point it at a path which contains a OpenSSL trust store (see OpenSSL for more) or build it up manually.
477   -
478   - For a certificate to verify you need the issuer and the issuers issuers certs added to the Trust store.
479   -
480   - NOTE: Currently this does not support CRL's or OCSP. We may add support for this later.
481   -=end
482   - class TrustStore
483   -
484   -=begin rdoc
485   - Create a trust store of normally trusted root certificates as found in a browser. Extracted from Safari.
486   -=end
487   - def self.default_trusted
488   - load_from_file(File.dirname(__FILE__) + "/trusted.pem")
489   - end
490   -=begin rdoc
491   - Create a trust store from a list of certificates in a pem file.
492   - These certificates should just be listed one after each other.
493   -=end
494   - def self.load_from_file(file)
495   - store=TrustStore.new
496   - EzCrypto::Verifier.load_all_from_file(file).each do |cert|
497   - store.add cert
498   - end
499   - store
500   - end
501   -=begin rdoc
502   - Create trust store with an optional list of paths of openssl trust stores.
503   -=end
504   - def initialize(*paths)
505   - @store=OpenSSL::X509::Store.new
506   -# @store.set_default_path paths.shift if paths.length>0
507   - paths.each {|path| @store.add_path path}
508   - end
509   -
510   -=begin rdoc
511   - Add either a EzCrypto::Certificate or a OpenSSL::X509::Cert object to the TrustStore. This should be a trusted certificate such as a CA's issuer certificate.
512   -=end
513   - def add(obj)
514   - if obj.kind_of?(EzCrypto::Certificate)
515   - @store.add_cert obj.cert
516   - elsif obj.kind_of?(OpenSSL::X509::Certificate)
517   - @store.add_cert obj
518   - else
519   - raise "unsupported object type"
520   - end
521   - end
522   -=begin rdoc
523   - Returns true if either the EzCrypto::Certificate or OpenSSL::X509::Cert object is verified using issuer certificates in the trust store.
524   -=end
525   - def verify(cert)
526   - if cert.kind_of?(EzCrypto::Certificate)
527   - @store.verify cert.cert
528   - elsif cert.kind_of?(OpenSSL::X509::Certificate)
529   - @store.verify cert
530   - else
531   - false
532   - end
533   - end
534   - end
535   -end
536 0 \ No newline at end of file
vendor/ezcrypto-0.7.2/lib/trusted.pem
... ... @@ -1,2363 +0,0 @@
1   ------BEGIN CERTIFICATE-----
2   -MIIG0zCCBbugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBzDELMAkGA1UEBhMCQVQx
3   -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTE6MDgGA1UEChMxQVJH
4   -RSBEQVRFTiAtIEF1c3RyaWFuIFNvY2lldHkgZm9yIERhdGEgUHJvdGVjdGlvbjEl
5   -MCMGA1UECxMcQS1DRVJUIENlcnRpZmljYXRpb24gU2VydmljZTEYMBYGA1UEAxMP
6   -QS1DRVJUIEFEVkFOQ0VEMR0wGwYJKoZIhvcNAQkBFg5pbmZvQGEtY2VydC5hdDAe
7   -Fw0wNDEwMjMxNDE0MTRaFw0xMTEwMjMxNDE0MTRaMIHMMQswCQYDVQQGEwJBVDEQ
8   -MA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQKEzFBUkdF
9   -IERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0aW9uMSUw
10   -IwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYDVQQDEw9B
11   -LUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0LmF0MIIB
12   -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3euXIy+mnf6BYKbK+QH5k679
13   -tUFqeT8jlZxMew8eNiHuw9KoxWBzL6KksK+5uK7Gatw+sbAYntEGE80P+Jg1hADM
14   -e+Fr5V0bc6QS3gkVtfUCW/RIvfMM39oxvmqJmOgPnJU7H6+nmLtsq61tv9kVJi/2
15   -4Y5wXW3odet72sF57EoG6s78w0BUVLNcMngS9bZZzmdG3/d6JbkGgoNF/8DcgCBJ
16   -W/t0JrcIzyppXIOVtUzzOrrU86zuUgT3Rtkl5kjG7DEHpFb9H0fTOY1v8+gRoaO6
17   -2gA0PCiysgVZjwgVeYe3KAg11nznyleDv198uK3Dc1oXIGYjJx2FpKWUvAuAEwID
18   -AQABo4ICvDCCArgwHQYDVR0OBBYEFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYMIH5BgNV
19   -HSMEgfEwge6AFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYoYHSpIHPMIHMMQswCQYDVQQG
20   -EwJBVDEQMA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQK
21   -EzFBUkdFIERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0
22   -aW9uMSUwIwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYD
23   -VQQDEw9BLUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0
24   -LmF0ggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMEcGA1UdJQRAMD4G
25   -CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD
26   -CAYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAP8wUQYDVR0gBEowSDBGBggq
27   -KAAYAQEBAzA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3LmEtY2VydC5hdC9jZXJ0
28   -aWZpY2F0ZS1wb2xpY3kuaHRtbDA7BglghkgBhvhCAQgELhYsaHR0cDovL3d3dy5h
29   -LWNlcnQuYXQvY2VydGlmaWNhdGUtcG9saWN5Lmh0bWwwGQYDVR0RBBIwEIEOaW5m
30   -b0BhLWNlcnQuYXQwLwYDVR0SBCgwJoEOaW5mb0BhLWNlcnQuYXSGFGh0dHA6Ly93
31   -d3cuYS1jZXJ0LmF0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHBzOi8vc2VjdXJlLmEt
32   -Y2VydC5hdC9jZ2ktYmluL2EtY2VydC1hZHZhbmNlZC5jZ2kwDQYJKoZIhvcNAQEF
33   -BQADggEBACX1IvgfdG2rvfv35O48vSEvcVaEdlN8USFBHWz3JRAozgzvaBtwHkjK
34   -Zwt5l/BWOtjbvHfRjDt7ijlBEcxOOrNC1ffyMHwHrXpvff6YpQ5wnxmIYEQcURiG
35   -HMqruEX0WkuDNgSKwefsgXs27eeBauHgNGVcTYH1rmHu/ZyLpLxOyJQ2PCzA1DzW
36   -3rWkIX92ogJ7lTRdWrbxwUL1XGinxnnaQ74+/y0pI9JNEv7ic2tpkweRMpkedaLW
37   -msC1+orfKTebsg69aMaCx7o6jNONRmR/7TVaPf8/k6g52cHZ9YWjQvup22b5rWxG
38   -J5r5LZ4vCPmF4+T4lutjUYAa/lGuQTg=
39   ------END CERTIFICATE-----
40   ------BEGIN CERTIFICATE-----
41   -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
42   -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
43   -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
44   -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
45   -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
46   -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
47   -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
48   -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
49   -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
50   -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
51   -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
52   -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
53   -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
54   -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
55   -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
56   -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
57   -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
58   -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
59   -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
60   -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
61   -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
62   -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
63   -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
64   ------END CERTIFICATE-----
65   ------BEGIN CERTIFICATE-----
66   -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
67   -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
68   -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
69   -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
70   -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
71   -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
72   -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
73   -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
74   -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
75   -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
76   -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
77   -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
78   -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
79   -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
80   -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
81   -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
82   -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
83   -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
84   -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
85   -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
86   -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
87   -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
88   ------END CERTIFICATE-----
89   ------BEGIN CERTIFICATE-----
90   -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
91   -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
92   -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
93   -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
94   -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
95   -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
96   -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
97   -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
98   -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
99   -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
100   -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
101   -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
102   -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
103   -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
104   -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
105   -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
106   -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
107   -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
108   -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
109   -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
110   -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
111   -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
112   -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
113   ------END CERTIFICATE-----
114   ------BEGIN CERTIFICATE-----
115   -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
116   -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
117   -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
118   -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
119   -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
120   -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
121   -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
122   -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
123   -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
124   -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
125   -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
126   -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
127   -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
128   -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
129   -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
130   -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
131   -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
132   -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
133   -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
134   -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
135   -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
136   -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
137   ------END CERTIFICATE-----
138   ------BEGIN CERTIFICATE-----
139   -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
140   -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
141   -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
142   -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
143   -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
144   -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
145   -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
146   -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
147   -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
148   -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
149   -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
150   -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
151   -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
152   -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
153   -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
154   -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
155   -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
156   -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
157   -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
158   -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
159   -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
160   -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
161   -xqE=
162   ------END CERTIFICATE-----
163   ------BEGIN CERTIFICATE-----
164   -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
165   -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
166   -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
167   -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
168   -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
169   -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
170   -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
171   -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
172   -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
173   -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
174   -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
175   -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
176   -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
177   -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
178   -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
179   -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
180   -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
181   -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
182   -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
183   -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
184   ------END CERTIFICATE-----
185   ------BEGIN CERTIFICATE-----
186   -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
187   -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
188   -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
189   -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
190   -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
191   -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
192   -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
193   -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
194   -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
195   -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
196   -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
197   -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
198   -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
199   -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
200   -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
201   -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
202   -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
203   -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
204   -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
205   -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
206   -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
207   -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
208   -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
209   -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
210   -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
211   -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
212   -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
213   -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
214   -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
215   -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
216   -RY8mkaKO/qk=
217   ------END CERTIFICATE-----
218   ------BEGIN CERTIFICATE-----
219   -MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
220   -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
221   -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
222   -aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
223   -MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
224   -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
225   -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
226   -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
227   -0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
228   -TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
229   -RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
230   -zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
231   -BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
232   -AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
233   -PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
234   -BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
235   -9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
236   -Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
237   -Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
238   -n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
239   -H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
240   ------END CERTIFICATE-----
241   ------BEGIN CERTIFICATE-----
242   -MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
243   -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
244   -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
245   -aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
246   -NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
247   -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
248   -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
249   -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
250   -7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
251   -m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
252   -xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
253   -YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
254   -JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
255   -I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
256   -kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
257   -EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
258   -Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
259   -gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
260   -rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
261   -FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
262   -1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
263   -h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
264   -yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
265   -7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
266   -RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
267   -ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
268   -M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
269   -my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
270   -AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
271   -9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
272   -hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
273   -fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
274   ------END CERTIFICATE-----
275   ------BEGIN CERTIFICATE-----
276   -MIIFujCCBKKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhjELMAkGA1UEBhMCVVMx
277   -HTAbBgNVBAoTFEFwcGxlIENvbXB1dGVyLCBJbmMuMS0wKwYDVQQLEyRBcHBsZSBD
278   -b21wdXRlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIEFwcGxlIFJv
279   -b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA1MDIxMDAwMTgxNFoXDTI1MDIx
280   -MDAwMTgxNFowgYYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBcHBsZSBDb21wdXRl
281   -ciwgSW5jLjEtMCsGA1UECxMkQXBwbGUgQ29tcHV0ZXIgQ2VydGlmaWNhdGUgQXV0
282   -aG9yaXR5MSkwJwYDVQQDEyBBcHBsZSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
283   -eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1e
284   -eYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsq
285   -wx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsV
286   -WR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO
287   -2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+
288   -H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeU
289   -yS0CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
290   -MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlH
291   -lHYJ/vRrjS5ApvdHTX8IXjCCASkGA1UdIASCASAwggEcMIIBGAYJKoZIhvdjZAUB
292   -MIIBCTBBBggrBgEFBQcCARY1aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmlj
293   -YXRlYXV0aG9yaXR5L3Rlcm1zLmh0bWwwgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFu
294   -Y2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2Nl
295   -cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5k
296   -IGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRp
297   -ZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wRAYDVR0fBD0wOzA5oDegNYYz
298   -aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L3Jvb3Qu
299   -Y3JsMFUGCCsGAQUFBwEBBEkwRzBFBggrBgEFBQcwAoY5aHR0cHM6Ly93d3cuYXBw
300   -bGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L2Nhc2lnbmVycy5odG1sMA0GCSqG
301   -SIb3DQEBBQUAA4IBAQCd2i0oWC99dgS5BNM+zrdmY06PL9T+S61yvaM5xlJNBZhS
302   -9YlRASR5vhoy9+VEi0tEBzmC1lrKtCBe2a4VXR2MHTK/ODFiSF3H4ZCx+CRA+F9Y
303   -m1FdV53B5f88zHIhbsTp6aF31ywXJsM/65roCwO66bNKcuszCVut5mIxauivL9Wv
304   -Hld2j383LS4CXN1jyfJxuCZA3xWNdUQ/eb3mHZnhQyw+rW++uaT+DjUZUWOxw961
305   -kj5ReAFziqQjyqSI8R5cH0EWLX6VCqrpiUGYGxrdyyC/R14MJsVVNU3GMIuZZxTH
306   -CR+6R8faAQmHJEKVvRNgGQrv6n8Obs3BREM6StXj
307   ------END CERTIFICATE-----
308   ------BEGIN CERTIFICATE-----
309   -MIIDwzCCAyygAwIBAgIBADANBgkqhkiG9w0BAQQFADCBmDELMAkGA1UEBhMCQVQx
310   -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAGA1UEChM5QXJn
311   -ZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBmdWVyIERhdGVu
312   -c2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVuLmF0MB4XDTAx
313   -MDIxMjExMzAzMFoXDTA5MDIxMjExMzAzMFowgZgxCzAJBgNVBAYTAkFUMRAwDgYD
314   -VQQIEwdBdXN0cmlhMQ8wDQYDVQQHEwZWaWVubmExQjBABgNVBAoTOUFyZ2UgRGF0
315   -ZW4gT2VzdGVycmVpY2hpc2NoZSBHZXNlbGxzY2hhZnQgZnVlciBEYXRlbnNjaHV0
316   -ejEiMCAGCSqGSIb3DQEJARYTYS1jZXJ0QGFyZ2VkYXRlbi5hdDCBnzANBgkqhkiG
317   -9w0BAQEFAAOBjQAwgYkCgYEAwgsHqoNtmmrJ86+e1I4hOVBaL4kokqKN2IPOIL+1
318   -XwY8vfOOUfPEdhWpaC0ldt7VYrksgDiUccgH0FROANWK2GkfKMDzjjXHysR04uEb
319   -Om7Kqjqn0nproOGkFG+QvBZgs+Ws+HXNFJA6V76fU4+JXq4452LSK4Lr5YcBquu3
320   -NJECAwEAAaOCARkwggEVMB0GA1UdDgQWBBQ0j59zH/G31zRjgK1y2P//tSAWZjCB
321   -xQYDVR0jBIG9MIG6gBQ0j59zH/G31zRjgK1y2P//tSAWZqGBnqSBmzCBmDELMAkG
322   -A1UEBhMCQVQxEDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAG
323   -A1UEChM5QXJnZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBm
324   -dWVyIERhdGVuc2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVu
325   -LmF0ggEAMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQE
326   -AwICBDANBgkqhkiG9w0BAQQFAAOBgQBFuJYncqMYB6gXQS3eDOI90BEHfFTKy/dV
327   -AV+K7QdAYikWmqgBheRdPKddJdccPy/Zl/p3ZT7GhDyC5f3wZjcuu8AJ27BNwbCA
328   -x54dgxgCNcyPm79nY8MRtEdEpoRGdSsFKJemz6hpXM++MWFciyrRWIIA44XB0Gv3
329   -US0spjsDPQ==
330   ------END CERTIFICATE-----
331   ------BEGIN CERTIFICATE-----
332   -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
333   -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
334   -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
335   -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
336   -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
337   -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
338   -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
339   -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
340   -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
341   -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
342   -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
343   -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
344   -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
345   -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
346   -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
347   -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
348   -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
349   -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
350   -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
351   ------END CERTIFICATE-----
352   ------BEGIN CERTIFICATE-----
353   -MIIDlDCCAnygAwIBAgIQWAsFbFMk27JQVxhf+eWmUDANBgkqhkiG9w0BAQUFADAn
354   -MQswCQYDVQQGEwJCRTEYMBYGA1UEAxMPQmVsZ2l1bSBSb290IENBMB4XDTAzMDEy
355   -NjIzMDAwMFoXDTE0MDEyNjIzMDAwMFowJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMT
356   -D0JlbGdpdW0gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
357   -AMihcekcRkJ5eHFvna6pqKsot03HIOswkVp19eLSz8hMFJhCWK3HEcVAQGpa+XQS
358   -J4fpnOVxTiIs0RIYqjBeoiG52bv/9nTrMQHnO35YD5EWTXaJqAFPrSJmcPpLHZXB
359   -MFjqvNll2Jq0iOtJRlLf0lMVdssUXRlJsW9q09P9vMIt7EU/CT9YvvzU7wCMgTVy
360   -v/cY6pZifSsofxVsY9LKyn0FrMhtB20yvmi4BUCuVJhWPmbxMOjvxKuTXgfeMo8S
361   -dKpbNCNUwOpszv42kqgJF+qhLc9s44Qd3ocuMws8dOIhUDiVLlzg5cYx+dtA+mqh
362   -pIqTm6chBocdJ9PEoclMsG8CAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYD
363   -VR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4AQEBMC4wLAYIKwYBBQUHAgEW
364   -IGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBQQ8AxW
365   -m2HqVzq2NZdtn925FI7b5jARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAU
366   -EPAMVpth6lc6tjWXbZ/duRSO2+YwDQYJKoZIhvcNAQEFBQADggEBAMhtIlGKYfgP
367   -lm7VILKB+MbcoxYA2s1q52sq+llIp0xJN9dzoWoBZV4yveeX09AuPHPTjHuD79ZC
368   -wT+oqV0PN7p20kC9zC0/00RBSZz9Wyn0AiMiW3Ebv1jZKE4tRfTa57VjRUQRDSp/
369   -M382SbTObqkCMa5c/ciJv0J71/Fg8teH9lcuen5qE4Ad3OPQYx49cTGxYNSeCMqr
370   -8JTHSHVUgfMbrXec6LKP24OsjzRr6L/D2fVDw2RV6xq9NoY2uiGMlxoh1OotO6y6
371   -7Kcdq765Sps1LxxcHVGnH1TtEpf/8m6HfUbJdNbv6z195lluBpQE5KJVhzgoaiJe
372   -4r50ErAEQyo=
373   ------END CERTIFICATE-----
374   ------BEGIN CERTIFICATE-----
375   -MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX
376   -VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD
377   -QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX
378   -DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl
379   -ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU
380   -ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT
381   -CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P
382   -6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM
383   -jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX
384   -2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N
385   -R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j
386   -rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV
387   -HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa
388   -gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1
389   -bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0
390   -ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy
391   -YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl
392   -ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl
393   -cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0
394   -L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx
395   -CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV
396   -HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ
397   -KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo
398   -Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2
399   -jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe
400   -1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5
401   -mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc
402   -tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4=
403   ------END CERTIFICATE-----
404   ------BEGIN CERTIFICATE-----
405   -MIIDczCCAlugAwIBAgIQMDAwMDk3Mzc1NzM4NjAwMDANBgkqhkiG9w0BAQUFADBV
406   -MQswCQYDVQQGEwJGUjETMBEGA1UEChMKQ2VydGlOb21pczEcMBoGA1UECxMTQUMg
407   -UmFjaW5lIC0gUm9vdCBDQTETMBEGA1UEAxMKQ2VydGlOb21pczAeFw0wMDExMDkw
408   -MDAwMDBaFw0xMjExMDkwMDAwMDBaMFUxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpD
409   -ZXJ0aU5vbWlzMRwwGgYDVQQLExNBQyBSYWNpbmUgLSBSb290IENBMRMwEQYDVQQD
410   -EwpDZXJ0aU5vbWlzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8SWb
411   -4mS5RXB3ENSIcfrEzCj/TRUQuT1tMCU0YUfXFSgcPdWglIzCv3kvh07QoB+8xMl+
412   -fQHvSSduAxnNewz0GBY9rApCPKlP6CcnJr74OSVZIiWt9wLfl4wwhNhZOiikIpZp
413   -EdOXWqRc84P5cUlN3Lwmr1sjCWmHfTSS4cAKxfDbFLfE61etosyoFZUTQbIhb1Bf
414   -JL5xRXAUZudQiU42n/yAoSUrN4FLUfPQNlOe1AB81pIgX8g2ojwxDjfgqSs1JmBF
415   -uLKJ45uVLEenQBPmQCGjL3maV86IRmR3a9UGlgvKAk0NBdh8mrQyQvcUlLBIQBCm
416   -l7wppt6maQHUNEPQSwIDAQABoz8wPTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
417   -AwEB/zAdBgNVHQ4EFgQU+F4ho6ijFeb4tRG7/kIEXU2OgnowDQYJKoZIhvcNAQEF
418   -BQADggEBACe9FJayK6bXkJQrilBFMh75QPdFOks9PJuo86OMUlBDZGYFTCh9Arex
419   -N3KYCnAEzazYIALwr7eASJJDIQMu1Q+pkx/7ACde4kP47F27M2rm+v5HnGooCLz2
420   -s7Fe/WUycTQqgwF5lNp03m1ce/TvovgkEZeVN5wM/7+SsZLJGDigXGeq48j2g2hn
421   -8OckX9Ciyo0U3/1IVeigNBisiaOlsHSZOEPBZQRiZULob+NVbXVPo8nM1OyP3aHI
422   -LQex1yYcCr9m93nOiZyKkur3Uedf1yMTBe+fflnPFKGYnVqvTGXCKVdHzQBfpILA
423   -AuaC+5ykZhSiSMf8nmL2oPMcLO7YQw4=
424   ------END CERTIFICATE-----
425   ------BEGIN CERTIFICATE-----
426   -MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
427   -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
428   -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
429   -NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
430   -VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
431   -bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
432   -jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
433   -H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
434   -4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
435   -BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
436   -EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
437   -FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
438   -lA==
439   ------END CERTIFICATE-----
440   ------BEGIN CERTIFICATE-----
441   -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
442   -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
443   -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
444   -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
445   -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
446   -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
447   -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
448   -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
449   -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
450   -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
451   -AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
452   -VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
453   -Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
454   -AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
455   -h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
456   -uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
457   -DzFc6PLZ
458   ------END CERTIFICATE-----
459   ------BEGIN CERTIFICATE-----
460   -MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
461   -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
462   -cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
463   -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
464   -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
465   -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
466   -ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
467   -YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
468   -FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
469   -CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
470   -J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
471   -r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
472   ------END CERTIFICATE-----
473   ------BEGIN CERTIFICATE-----
474   -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
475   -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
476   -YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
477   -MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
478   -aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
479   -Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
480   -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
481   -IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
482   -KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
483   -eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
484   -AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
485   -HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
486   -DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
487   -AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
488   -nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
489   -rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
490   -jBJ7xUS0rg==
491   ------END CERTIFICATE-----
492   ------BEGIN CERTIFICATE-----
493   -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
494   -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
495   -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
496   -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
497   -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
498   -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
499   -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
500   -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
501   -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
502   -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
503   -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
504   -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
505   ------END CERTIFICATE-----
506   ------BEGIN CERTIFICATE-----
507   -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
508   -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
509   -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
510   -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
511   -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
512   -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
513   -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
514   -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
515   -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
516   -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
517   -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
518   -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
519   -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
520   -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
521   -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
522   -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
523   -oJ2daZH9
524   ------END CERTIFICATE-----
525   ------BEGIN CERTIFICATE-----
526   -MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
527   -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
528   -c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
529   -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
530   -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
531   -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
532   -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
533   -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
534   -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
535   -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
536   -AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
537   -HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
538   -qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
539   -AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
540   -cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
541   -cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
542   -T8qAkbYp
543   ------END CERTIFICATE-----
544   ------BEGIN CERTIFICATE-----
545   -MIICZzCCAdCgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY
546   -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
547   -A1BLSTEcMBoGA1UEAxMTRG9EIENMQVNTIDMgUm9vdCBDQTAeFw0wMDA1MTkxMzEz
548   -MDBaFw0yMDA1MTQxMzEzMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu
549   -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD
550   -ExNEb0QgQ0xBU1MgMyBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
551   -gQC1MP5kvurMbe2BLPd/6Rm6DmlqKOGpqcuVWB/x5pppU+CIP5HFUbljl6jmIYwT
552   -XjY8qFf6+HAsTGrLvzCnTBbkMlz4ErBR+BZXjS+0TfouqJToKmHUVw1Hzm4sL36Y
553   -Z8wACKu2lhY1woWR5VugCsdmUmLzYXWVF668KlYppeArUwIDAQABoy8wLTAdBgNV
554   -HQ4EFgQUbJyl8FyPbUGNxBc7kFfCD6PNbf4wDAYDVR0TBAUwAwEB/zANBgkqhkiG
555   -9w0BAQUFAAOBgQCvcUT5lyPMaGmMQwdBuoggsyIAQciYoFUczT9usZNcrfoYmrsc
556   -c2/9JEKPh59Rz76Gn+nXikhPCNlplKw/5g8tlw8ok3ZPYt//oM1h+KaGDDE0INx/
557   -L6j7Ob6V7jhZAmLB3mwVT+DfnbvkeXMk/WNklfdKqJkfSGWVx3u/eDLneg==
558   ------END CERTIFICATE-----
559   ------BEGIN CERTIFICATE-----
560   -MIICZzCCAdCgAwIBAgIBGjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY
561   -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
562   -A1BLSTEcMBoGA1UEAxMTRG9EIFBLSSBNZWQgUm9vdCBDQTAeFw05ODA4MDYxNTAx
563   -MDBaFw0wODA4MDcxNTAxMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu
564   -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD
565   -ExNEb0QgUEtJIE1lZCBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
566   -gQC5arG1dp5gWLAG69GfVnf0laK3aCAXLKGE65A72UGYsJQ3ENGaE9lW/JoDaLV8
567   -wrjQIL87bVC34jTvJs2aPjd7oeUaUXjeddt8bYjwRV/fwXl/oUoGx9umpJUuNvEW
568   -1H9P6xJFyzB9jpm+HGW+Oid3wtWKqNq1xsSuMByHlpoXtwIDAQABoy8wLTAdBgNV
569   -HQ4EFgQUxVnSzvGYlVBmqG3eMkvWYTXiRrMwDAYDVR0TBAUwAwEB/zANBgkqhkiG
570   -9w0BAQUFAAOBgQAyPjGMqsgKSbKHr38GlCT6WmkKtCWX6YX/3S3vaf39asluzJX6
571   -3sTcMByqi0jy7BLYbgKzPvxmuW3yVUlLl6rV6YrId62ezjPmaIqkDI8snEM0BWSW
572   -2ousTPara2J0xvzdC5lj/+ke6LHrO9yhSLRFMk8quccSXtFW6H5ei0+sGg==
573   ------END CERTIFICATE-----
574   ------BEGIN CERTIFICATE-----
575   -MIIDOzCCAiOgAwIBAgIRANAeRlAAACmMAAAAAgAAAAIwDQYJKoZIhvcNAQEFBQAw
576   -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
577   -Ew5EU1QgUm9vdCBDQSBYNDAeFw0wMDA5MTMwNjIyNTBaFw0yMDA5MTMwNjIyNTBa
578   -MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UE
579   -AxMORFNUIFJvb3QgQ0EgWDQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
580   -AQCthX3OFEYY8gSeIYur0O4ypOT68HnDrjLfIutL5PZHRwQGjzCPb9PFo/ihboJ8
581   -RvfGhBAqpQCo47zwYEhpWm1jB+L/OE/dBBiyn98krfU2NiBKSom2J58RBeAwHGEy
582   -cO+lewyjVvbDDLUy4CheY059vfMjPAftCRXjqSZIolQb9FdPcAoa90mFwB7rKniE
583   -J7vppdrUScSS0+eBrHSUPLdvwyn4RGp+lSwbWYcbg5EpSpE0GRJdchic0YDjvIoC
584   -YHpe7Rkj93PYRTQyU4bhC88ck8tMqbvRYqMRqR+vobbkrj5LLCOQCHV5WEoxWh+0
585   -E2SpIFe7RkV++MmpIAc0h1tZAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYD
586   -VR0OBBYEFPCD6nPIP1ubWzdf9UyPWvf0hki9MA0GCSqGSIb3DQEBBQUAA4IBAQCE
587   -G85wl5eEWd7adH6XW/ikGN5salvpq/Fix6yVTzE6CrhlP5LBdkf6kx1bSPL18M45
588   -g0rw2zA/MWOhJ3+S6U+BE0zPGCuu8YQaZibR7snm3HiHUaZNMu5c8D0x0bcMxDjY
589   -AVVcHCoNiL53Q4PLW27nbY6wwG0ffFKmgV3blxrYWfuUDgGpyPwHwkfVFvz9qjaV
590   -mf12VJffL6W8omBPtgteb6UaT/k1oJ7YI0ldGf+ngpVbRhD+LC3cUtT6GO/BEPZu
591   -8YTV/hbiDH5v3khVqMIeKT6o8IuXGG7F6a6vKwP1F1FwTXf4UC/ivhme7vdUH7B/
592   -Vv4AEbT8dNfEeFxrkDbh
593   ------END CERTIFICATE-----
594   ------BEGIN CERTIFICATE-----
595   -MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw
596   -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
597   -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
598   -CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B
599   -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx
600   -ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
601   -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
602   -IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx
603   -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
604   -AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf
605   -WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK
606   -xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE
607   -zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F
608   -5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv
609   -OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG
610   -9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz
611   -ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME
612   -lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG
613   -Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
614   -gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k
615   -Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==
616   ------END CERTIFICATE-----
617   ------BEGIN CERTIFICATE-----
618   -MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw
619   -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
620   -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
621   -CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B
622   -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy
623   -MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
624   -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
625   -IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
626   -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
627   -AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV
628   -p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw
629   -BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl
630   -5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi
631   -3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+
632   -QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
633   -9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ
634   -2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN
635   -I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL
636   -553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
637   -10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN
638   -uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
639   ------END CERTIFICATE-----
640   ------BEGIN CERTIFICATE-----
641   -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
642   -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
643   -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
644   -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
645   -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
646   -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
647   -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
648   -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
649   -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
650   -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
651   -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
652   -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
653   -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
654   -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
655   -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
656   -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
657   -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
658   -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
659   -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
660   -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
661   -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
662   -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
663   -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
664   -vUxFnmG6v4SBkgPR0ml8xQ==
665   ------END CERTIFICATE-----
666   ------BEGIN CERTIFICATE-----
667   -MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
668   -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
669   -ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
670   -Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
671   -BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
672   -Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
673   -MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
674   -bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
675   -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
676   -RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
677   -CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
678   -6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
679   -5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
680   -AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
681   -ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
682   -cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
683   -by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
684   -IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
685   -Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
686   -KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
687   -HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
688   -BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
689   -FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
690   -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
691   -pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
692   -wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
693   -EkP/TOYGJqibGapEPHayXOw=
694   ------END CERTIFICATE-----
695   ------BEGIN CERTIFICATE-----
696   -MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
697   -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
698   -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
699   -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
700   -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
701   -MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
702   -LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
703   -YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
704   -A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
705   -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
706   -Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
707   -iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
708   -5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
709   -BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
710   -MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
711   -ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
712   -dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
713   -dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
714   -MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
715   -MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
716   -fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
717   -AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
718   -hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
719   -GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
720   -zmVml64mXg==
721   ------END CERTIFICATE-----
722   ------BEGIN CERTIFICATE-----
723   -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
724   -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
725   -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
726   -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
727   -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
728   -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
729   -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
730   -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
731   -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
732   -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
733   -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
734   -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
735   -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
736   -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
737   -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
738   -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
739   -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
740   -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
741   -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
742   -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
743   -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
744   -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
745   -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
746   -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
747   -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
748   -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
749   ------END CERTIFICATE-----
750   ------BEGIN CERTIFICATE-----
751   -MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
752   -RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
753   -Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
754   -RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
755   -IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
756   -Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
757   -CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
758   -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
759   -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
760   -b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
761   -8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
762   -bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
763   -dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
764   -QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
765   -C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
766   -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
767   -IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
768   -ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
769   -KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
770   -VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
771   -DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
772   -fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
773   -d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
774   -JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
775   -yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
776   ------END CERTIFICATE-----
777   ------BEGIN CERTIFICATE-----
778   -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
779   -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
780   -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
781   -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
782   -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
783   -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
784   -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
785   -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
786   -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
787   -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
788   -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
789   -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
790   -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
791   -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
792   -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
793   -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
794   -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
795   ------END CERTIFICATE-----
796   ------BEGIN CERTIFICATE-----
797   -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
798   -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
799   -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
800   -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
801   -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
802   -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
803   -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
804   -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
805   -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
806   -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
807   -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
808   -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
809   -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
810   -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
811   ------END CERTIFICATE-----
812   ------BEGIN CERTIFICATE-----
813   -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
814   -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
815   -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
816   -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
817   -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
818   -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
819   -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
820   -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
821   -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
822   -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
823   -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
824   -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
825   -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
826   -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
827   -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
828   -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
829   -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
830   ------END CERTIFICATE-----
831   ------BEGIN CERTIFICATE-----
832   -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
833   -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
834   -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
835   -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
836   -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
837   -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
838   -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
839   -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
840   -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
841   -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
842   -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
843   -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
844   -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
845   -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
846   ------END CERTIFICATE-----
847   ------BEGIN CERTIFICATE-----
848   -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
849   -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
850   -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
851   -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
852   -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
853   -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
854   -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
855   -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
856   -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
857   -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
858   -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
859   -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
860   -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
861   -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
862   -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
863   -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
864   -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
865   -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
866   ------END CERTIFICATE-----
867   ------BEGIN CERTIFICATE-----
868   -MIIDIzCCAgugAwIBAgIQMDAwMTAwMDQ0ODczMzAwMDANBgkqhkiG9w0BAQUFADAf
869   -MQswCQYDVQQGEwJGUjEQMA4GA1UEChMHR0lQLUNQUzAeFw0wMTA2MjYwMDAwMDBa
870   -Fw0xMDEyMzEwMDAwMDBaMB8xCzAJBgNVBAYTAkZSMRAwDgYDVQQKEwdHSVAtQ1BT
871   -MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBvz+ogB2ovWM18JmOtizrL
872   -Y2KgEZ8TpU6H7zu+r6cT1Q8xgLm8BPOfeW3eI/e0PLmZN+Sp+LZ4wyFMecJmp/FT
873   -M9/9Gp23vpMePge/tJctwu0mihabVcUHFoIMtpKgSJ2+Xlywk16AjsHN3DONcWBa
874   -xV4wa4Tt/BtaEkf9148pDn074lZZ2mKmANu9zNDm/buSgRkqqS1eVCbLxkRaMBSp
875   -dwGAjsBYEqPjmI4So915ab3Eqqz5zawQwC4T+O41wRgpD9bDTo+9xAFiZz8PqYs9
876   -pc2tHOKhIlRxJbQqcWQW+St9I7Y+rRx2lTMrt6DD7CMoxrt1TuGzxdN777w1GSfx
877   -AgMBAAGjXDBaMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEBMB0G
878   -A1UdDgQWBBTnqP2NPQkWlq78dWMnkCN5XlvZtDAVBgNVHSAEDjAMMAoGCCqBegFH
879   -AwcDMA0GCSqGSIb3DQEBBQUAA4IBAQAc9sFFWGgFJ14VGI91Cf1h9KYuuh1m2y2u
880   -xF/mVb58IYBDE0fwG371XwpOHd6d9cM3ANSpK51V5EOmwgFDGkNGtDYcPXR+Ndli
881   -rhD8aSq0Yv2p3h78o5O6y4GMRycFPsTfWpE9h7fGmsfZXWnYJGRAGM2iKYn7x3f7
882   -+kOrtbVj+XAvws7PqO2lLh/HjWCek4efnU9EaG6SDqu7srTuhyILFRBJ+sfOr68t
883   -5bwyjufk391dbPBYcQ1AK9CQrnaorhPo+S7iNekX1e5iJShETVrZJkH/AAido34c
884   -3ohHWmmZPyNW+5CpxZlRL6J6mlcAxIDqkXXsxj/r5zxGrW/jGwxo
885   ------END CERTIFICATE-----
886   ------BEGIN CERTIFICATE-----
887   -MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG
888   -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
889   -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
890   -MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
891   -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
892   -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
893   -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
894   -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
895   -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
896   -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
897   -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
898   -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU
899   -YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
900   -AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7
901   -5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q
902   -gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR
903   -rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7
904   -ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o
905   -Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
906   ------END CERTIFICATE-----
907   ------BEGIN CERTIFICATE-----
908   -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
909   -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
910   -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
911   -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
912   -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
913   -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
914   -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
915   -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
916   -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
917   -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
918   -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
919   -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
920   -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
921   -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
922   -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
923   -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
924   -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
925   -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
926   -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
927   -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
928   -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
929   -ReYNnyicsbkqWletNw+vHX/bvZ8=
930   ------END CERTIFICATE-----
931   ------BEGIN CERTIFICATE-----
932   -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
933   -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
934   -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
935   -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
936   -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
937   -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
938   -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
939   -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
940   -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
941   -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
942   -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
943   -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
944   -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
945   ------END CERTIFICATE-----
946   ------BEGIN CERTIFICATE-----
947   -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
948   -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
949   -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
950   -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
951   -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
952   -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
953   -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
954   -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
955   -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
956   -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
957   -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
958   -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
959   -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
960   -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
961   -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
962   -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
963   ------END CERTIFICATE-----
964   ------BEGIN CERTIFICATE-----
965   -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
966   -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
967   -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
968   -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
969   -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
970   -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
971   -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
972   -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
973   -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
974   -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
975   -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
976   -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
977   -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
978   -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
979   -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
980   -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
981   ------END CERTIFICATE-----
982   ------BEGIN CERTIFICATE-----
983   -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
984   -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
985   -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
986   -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
987   -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
988   -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
989   -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
990   -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
991   -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
992   -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
993   -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
994   -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
995   -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
996   -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
997   -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
998   -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
999   ------END CERTIFICATE-----
1000   ------BEGIN CERTIFICATE-----
1001   -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
1002   -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
1003   -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1004   -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq
1005   -SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD
1006   -VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
1007   -HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMzExMTE0NTRa
1008   -Fw0yNTEyMjkxMTE0NTRaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
1009   -bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg
1010   -cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu
1011   -ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD
1012   -QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp
1013   -bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP
1014   -aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpOZZJ
1015   -iHAzKHzoV9xIki3eLXp56UjxFehnY+c+Dh1nUiVO0t//vmGMP6B2LTFfx9FBKRBi
1016   -kYcW7raIcSDi62Or0sAG5UUgG4ruGLE7XtCnnx4xjgbFZ4tTjdgi5Wh9GVhfP7Oo
1017   -9ahi8Eqao+alFbhvB6LD3xZZqM2j9cmD8GzYAQIDAQABo4IESzCCBEcwHQYDVR0O
1018   -BBYEFAeUqHBsCqTumbhV3S5MRXf2Nq+5MIIBTgYDVR0jBIIBRTCCAUGAFAeUqHBs
1019   -CqTumbhV3S5MRXf2Nq+5oYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
1020   -CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ
1021   -bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt
1022   -YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD
1023   -aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT
1024   -IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
1025   -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
1026   -BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
1027   -CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB
1028   -BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
1029   -EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBD
1030   -BglghkgBhvhCAQ0ENhY0Q2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
1031   -aHR0cHM6Ly93d3cuaXBzLmVzLzAqBglghkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cu
1032   -aXBzLmVzL2lwczIwMDIvMDgGCWCGSAGG+EIBBAQrFilodHRwczovL3d3dy5pcHMu
1033   -ZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA9BglghkgBhvhCAQMEMBYuaHR0cHM6
1034   -Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNBQy5odG1sPzA6BglghkgB
1035   -hvhCAQcELRYraHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENBQy5o
1036   -dG1sPzA4BglghkgBhvhCAQgEKxYpaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIv
1037   -cG9saWN5Q0FDLmh0bWwwbwYDVR0fBGgwZjAvoC2gK4YpaHR0cHM6Ly93d3cuaXBz
1038   -LmVzL2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwM6AxoC+GLWh0dHBzOi8vd3d3YmFj
1039   -ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAvBggrBgEFBQcBAQQjMCEw
1040   -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
1041   -gYEATiRvY2nro9B6QNgTOgojWSrXMKpXHa6hLRxL2GZPEFg059x2ERs3pw7RlJJZ
1042   -ctupZam06zvBnGfQL4ZhevXl6ST6RAAmOikuj8kbiFSgujjCJY1wv5/7zzgBWzdL
1043   -NzqKC18p1T2KZa8B2qKfQCqzV/J3fgI/725+9ekqKNLiE5Q=
1044   ------END CERTIFICATE-----
1045   ------BEGIN CERTIFICATE-----
1046   -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
1047   -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
1048   -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1049   -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
1050   -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
1051   -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
1052   -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTEwM1oXDTI1MTIyOTEx
1053   -MTEwM1owggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
1054   -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
1055   -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
1056   -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
1057   -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
1058   -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
1059   -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA55+R7+voFuF0vIkTodduR8ZfPxKU5u/h
1060   -M+GrgqufAwHmdG+KF5fPVy8Mdi7mbqfK2veLFBVADbNq2e2+s2q8Ai0chS3vl//P
1061   -l9rrR10eU79dVN4ndGMZfpXUMZblz0/Kq3Uvk5AsWUwfv1YokIhi4RMeBtOCVv3j
1062   -LSV1rDsiap8CAwEAAaOCBFIwggROMB0GA1UdDgQWBBRtW6MBjmE3nQR4tq+blh0C
1063   -QeXbeTCCAUQGA1UdIwSCATswggE3gBRtW6MBjmE3nQR4tq+blh0CQeXbeaGCARqk
1064   -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1065   -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
1066   -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
1067   -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
1068   -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
1069   -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
1070   -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
1071   -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1072   -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
1073   -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
1074   -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UxIENBIENlcnRp
1075   -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB
1076   -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W
1077   -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMEAG
1078   -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
1079   -aW9uQ0xBU0UxLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu
1080   -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UxLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo
1081   -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDB1BgNV
1082   -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1083   -Q0xBU0UxLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy
1084   -L2lwczIwMDJDTEFTRTEuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT
1085   -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQBacEdMbCU0z2bO
1086   -X+iyJafrUbjPE+5KzJz2jB1YXC2d7kMy2Hhbp8gVyfUFQpd+F2IgBBj9z3IRNkDN
1087   -foHhdse5j2cUUH+fno9jj8EPE2GPhXVmCjIP6KuPp8yzz89gC+ry+bkfSFzjHUQt
1088   -K15I/jRAHfyJywwUrwtmklZIX0E5Og==
1089   ------END CERTIFICATE-----
1090   ------BEGIN CERTIFICATE-----
1091   -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
1092   -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
1093   -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1094   -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
1095   -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
1096   -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
1097   -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTkzMVoXDTI1MTIyOTEx
1098   -MTkzMVowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
1099   -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
1100   -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
1101   -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
1102   -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
1103   -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
1104   -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAve2QhYLxoN2P3DVo4Xw+6Gyb2vDjfzvB
1105   -JRvH+WFIXO3KItC1dJk2W7iFnsZJnb65Q6NDKxhwfQ4XnLuBSPqMVJ6EHB++I1p2
1106   -pg0j7YOtec++o3ysS6zf1r01HSh8i85+AcGcgLO4Z79w9jtEGlSdrFhCLUjJJSEs
1107   -XdzSbkEFrkMCAwEAAaOCBFIwggROMB0GA1UdDgQWBBT7o4z3Z4tAqk02rzCA6po7
1108   -4C9o6DCCAUQGA1UdIwSCATswggE3gBT7o4z3Z4tAqk02rzCA6po74C9o6KGCARqk
1109   -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1110   -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
1111   -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
1112   -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
1113   -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
1114   -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
1115   -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
1116   -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1117   -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
1118   -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
1119   -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UzIENBIENlcnRp
1120   -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB
1121   -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W
1122   -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMEAG
1123   -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
1124   -aW9uQ0xBU0UzLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu
1125   -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UzLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo
1126   -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDB1BgNV
1127   -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1128   -Q0xBU0UzLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy
1129   -L2lwczIwMDJDTEFTRTMuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT
1130   -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQAiu2FuR8MoQlYw
1131   -3QtFc/BI7DgkUUeSIM49JoMU0H3a4Y+JbQxQ4q/n6yAbEuMETUyqob/HmS/NkLJq
1132   -ur3RvGBseDXgxNyePGjFc97ITNWf5X1+4CXtBf+TTKNEMg1UpPbCz+9EkjzTcYj1
1133   -5tjLbAp/mmLLZmCOV7cCGuXGSTBNzA==
1134   ------END CERTIFICATE-----
1135   ------BEGIN CERTIFICATE-----
1136   -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
1137   -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
1138   -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1139   -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
1140   -SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
1141   -JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
1142   -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMTQxWhcNMjUxMjI5
1143   -MTEyMTQxWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1144   -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
1145   -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
1146   -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
1147   -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
1148   -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
1149   -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM8g89BgSKoCxBXZ5C+NnlURLSnM
1150   -UWZoAGXaFFWf6q7f69uN1nXaUfTEzPstvTUfE7fpZmF8lEDz+2AvjBg086hVnra0
1151   -b0APA0VnanJyW2ZIlkKFGMCB4WJqh7JB7i45jITVXthPV2vsjlKM97Pnnhimz8Fb
1152   -r+RZcsz69vRptMqxAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQUL8zsbGe+T/iqPIiN
1153   -EvvHnUxb9F4wggFGBgNVHSMEggE9MIIBOYAUL8zsbGe+T/iqPIiNEvvHnUxb9F6h
1154   -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1155   -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
1156   -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
1157   -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
1158   -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
1159   -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
1160   -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
1161   -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
1162   -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
1163   -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
1164   -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMSBD
1165   -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg
1166   -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG
1167   -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB
1168   -MS5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
1169   -L3Jldm9jYXRpb25DTEFTRUExLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov
1170   -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMS5odG1sPzA8BglghkgB
1171   -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB
1172   -MS5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy
1173   -MDAyL2lwczIwMDJDTEFTRUExLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw
1174   -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUExLmNybDAvBggrBgEFBQcBAQQjMCEw
1175   -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
1176   -gYEAGY2khC4v4mlenqRcy8Mn8mcWca88t4CY9LCJMqlIt7i559BNkMMB66tXsNp9
1177   -N2QhnTordKOjkdgZJmCb7DUdMJEQQT0Y5W7JA6WvHatAFu8feRJ4ImaTjI0Xz3Dd
1178   -Jbz6O++igCw0l4EY5gayn2BFpAm+7ZpEcdpR/OCOH80lNDo=
1179   ------END CERTIFICATE-----
1180   ------BEGIN CERTIFICATE-----
1181   -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
1182   -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
1183   -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1184   -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
1185   -SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
1186   -JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
1187   -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMzU5WhcNMjUxMjI5
1188   -MTEyMzU5WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1189   -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
1190   -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
1191   -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
1192   -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
1193   -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
1194   -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFh+lWUEmnBK5F6da6IALvvPO6f
1195   -MWYw9LFAmwJsjcdKTVElPugUKLwgPLHxjO19kdmXIqPVzGOxq9krIwvdppffBYRU
1196   -Fro6y8xja40gpdaeBXFGdVj19mR7C2adPoeVPTy1OTdSVLsWF8W/rdiLMy/p+PrV
1197   -gTP/t56Fpu9MOeDjAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQU/J6FGtwGJXEh8C+L
1198   -ElXQxYDuBq4wggFGBgNVHSMEggE9MIIBOYAU/J6FGtwGJXEh8C+LElXQxYDuBq6h
1199   -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1200   -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
1201   -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
1202   -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
1203   -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
1204   -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
1205   -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
1206   -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
1207   -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
1208   -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
1209   -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMyBD
1210   -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg
1211   -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG
1212   -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB
1213   -My5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
1214   -L3Jldm9jYXRpb25DTEFTRUEzLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov
1215   -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMy5odG1sPzA8BglghkgB
1216   -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB
1217   -My5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy
1218   -MDAyL2lwczIwMDJDTEFTRUEzLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw
1219   -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUEzLmNybDAvBggrBgEFBQcBAQQjMCEw
1220   -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
1221   -gYEAGG8JN0Ca0pQR0X/Lg33qtKfi2JPe2iRqdRswDoL3CTn+bRN20V/wbKDAwyxc
1222   -7eJOroysytPkEF4wZhipaKCjaWJROZGCeU1jM7mZe9pQPzeofT//VLi8zKaUA4lZ
1223   -BvYI44gntZQoaFxJna5NHHde+mbbPYlHb8c6g0mf9S3tODs=
1224   ------END CERTIFICATE-----
1225   ------BEGIN CERTIFICATE-----
1226   -MIIIQTCCB6qgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
1227   -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
1228   -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1229   -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr
1230   -SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG
1231   -A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1232   -eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMjY0
1233   -M1oXDTI1MTIyOTExMjY0M1owggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy
1234   -Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l
1235   -dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw
1236   -cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh
1237   -bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU
1238   -aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B
1239   -CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
1240   -0umTdn+FPP2gAb0RL0ZCDyt/BZvGa/VRcayaUh8flSfMkO+WP45RNv0WAM43pSGU
1241   -Rmvt5P+hfuqf0aKbOPMTxLmYumVFQ/nXvRWdlC4AYN6YGrk8yfXh/NbEJN/n48iE
1242   -GRK0HFyz9eIWYSdg8vAt5PDzrPigeYSdReL2AfBE5ZECAwEAAaOCBIkwggSFMB0G
1243   -A1UdDgQWBBSR2UK8nKnK0Bw3E1JXFqANHikdPjCCAVAGA1UdIwSCAUcwggFDgBSR
1244   -2UK8nKnK0Bw3E1JXFqANHikdPqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
1245   -BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ
1246   -UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp
1247   -cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg
1248   -Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD
1249   -EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w
1250   -HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
1251   -BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
1252   -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
1253   -FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD
1254   -VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw
1255   -cy5lczBIBglghkgBhvhCAQ0EOxY5VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
1256   -IGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIBAgQdFhto
1257   -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wQQYJYIZIAYb4QgEEBDQWMmh0dHBz
1258   -Oi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEYG
1259   -CWCGSAGG+EIBAwQ5FjdodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
1260   -aW9uVGltZXN0YW1waW5nLmh0bWw/MEMGCWCGSAGG+EIBBwQ2FjRodHRwczovL3d3
1261   -dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsVGltZXN0YW1waW5nLmh0bWw/MEEGCWCG
1262   -SAGG+EIBCAQ0FjJodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1l
1263   -c3RhbXBpbmcuaHRtbDCBgQYDVR0fBHoweDA4oDagNIYyaHR0cHM6Ly93d3cuaXBz
1264   -LmVzL2lwczIwMDIvaXBzMjAwMlRpbWVzdGFtcGluZy5jcmwwPKA6oDiGNmh0dHBz
1265   -Oi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNy
1266   -bDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
1267   -cy8wDQYJKoZIhvcNAQEFBQADgYEAxKMCdGABCUwYXU900W1zDCfTSDC1TxFVGRnH
1268   -I4soqfp4D34sJ/adkgD2GMgkAMVf+C1MY/yQFV4nmOal9K7SNrG1JR8OeDoRjpM4
1269   -rtO9qYbuHD3TW47/y/aZSZxP4ccocGpPOkvqfrnndKRKY0WUk/7Qg5aqpIXni2Gg
1270   -olkTZbQ=
1271   ------END CERTIFICATE-----
1272   ------BEGIN CERTIFICATE-----
1273   -MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD
1274   -VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT
1275   -IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD
1276   -Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz
1277   -MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT
1278   -MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE
1279   -ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw
1280   -FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu
1281   -aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY
1282   -XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1
1283   -gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4
1284   -Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY
1285   -JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU
1286   -dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14
1287   -cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC
1288   ------END CERTIFICATE-----
1289   ------BEGIN CERTIFICATE-----
1290   -MIICeTCCAeKgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJVUzEY
1291   -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
1292   -A1BLSTElMCMGA1UEAxMcSklUQyBEb0QgUEtJIENsYXNzIDMgUm9vdCBDQTAeFw0w
1293   -MDAzMjExODU4NDBaFw0xMDAzMTkxODU4NDBaMGoxCzAJBgNVBAYTAlVTMRgwFgYD
1294   -VQQKEw9VLlMuIEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJ
1295   -MSUwIwYDVQQDExxKSVRDIERvRCBQS0kgQ2xhc3MgMyBSb290IENBMIGfMA0GCSqG
1296   -SIb3DQEBAQUAA4GNADCBiQKBgQDRUOCEGYuPE/hkf/1670GY5DbacmoHjcfVOUNC
1297   -HvEYvrUbF/V62q+oY63BWDeAMWoVSjsTYFGLW9VPLhpDh0QeKhBNrpjOhTGEsJE0
1298   -ijKnolTQx/LsR00ZIWyZBGsQH0s3cu4QsM8uWKiBBuV9C5sMmJXFwMlarhfJToAg
1299   -/ViPKQIDAQABoy8wLTAdBgNVHQ4EFgQUa5/49j2w6Ko9iPJjHSDv3Gwbd04wDAYD
1300   -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCU8gI7V8QVwl4lMkGPJ3SaEqZB
1301   -g2p/aFqmAYoRjZoun2CYUl6Zy/dJMYaWIC8lVedDui2u9v6/4JNmx8yU6JtpDjGW
1302   -/HpLAwEuZjiWPIm+Wqiuz9LWDGXCLSS7XraHliW6YgPkgxeGoZllwdwFLZQ/j5fX
1303   -UxtL7uDwQbYehVaw4g==
1304   ------END CERTIFICATE-----
1305   ------BEGIN CERTIFICATE-----
1306   -MIIDdjCCAl6gAwIBAgIEOhsEBTANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJE
1307   -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExIzAhBgNVBAMTGktNRC1D
1308   -QSBLdmFsaWZpY2VyZXQgUGVyc29uMB4XDTAwMTEyMTIzMjQ1OVoXDTE1MTEyMjIz
1309   -MjQ1OVowUTELMAkGA1UEBhMCREsxDDAKBgNVBAoTA0tNRDEPMA0GA1UECxMGS01E
1310   -LUNBMSMwIQYDVQQDExpLTUQtQ0EgS3ZhbGlmaWNlcmV0IFBlcnNvbjCCASIwDQYJ
1311   -KoZIhvcNAQEBBQADggEPADCCAQoCggEBANriF4Xd6yD7ZlBE317UBDObn+vRMVc6
1312   -p3wNQODdEDJe2z1ncCz9NJvhoLGdOJhyg7VVPh0P2c+KZ9WI9mWOKZI2bp2WkLju
1313   -jCcxbhTrurY3Wfc6gwLBqqFV8wWgaZKmvVWizjw9Kyi25f3yX4fOho6Qq2lvVbub
1314   -tvVFXAd51GJ+/2Yed+a4Or2bz2RcqHS81B3pywsD4mgJR5xREv5jqPfwNP+V7bkc
1315   -X+pfO4kVhZ/V+8MSPdQHgcV/iB3wP2mwgWyIBNc1reBidGTiz8unnWu55hcNfsvt
1316   -LJbTs9OHhsR7naRuy+S402nDnD5vnONOFEsiHn46w+T0rtu7h6j4OvkCAwEAAaNW
1317   -MFQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUeWLqmhI42Jxj7DifDsW+
1318   -DlQhKD0wHwYDVR0jBBgwFoAUeWLqmhI42Jxj7DifDsW+DlQhKD0wDQYJKoZIhvcN
1319   -AQEFBQADggEBANML/P42OuJ9aUV/0fItuIyc1JhqWvSqn5bXj+9eyEegcp8bHLHY
1320   -42D1O+z0lNipdjYPSdMJ0wZOEUhr+150SdDQ1P/zQL8AUaLEBkRt7ZdzXPVH3PER
1321   -qnf9IrpYBknZKfCAoVchA6Rr9WU3Sd8bMoRfMLKg8c0M8G6EPwCTcOFriSkbtvNG
1322   -zd8r8I+WfUYIN/p8DI9JT9qfjVODnYPRMUm6KPvq27TsrGruKrqyaV94kWc8co8A
1323   -v3zFLeCtghvUiRBdx+8Q7m5t4CkuSr0WINrqjIPFW2QrM1r82y09Fd16RkqL4LOg
1324   -Lh6vB5KnTApv62rWdw7zWwYnjY6/vXYY1Aw=
1325   ------END CERTIFICATE-----
1326   ------BEGIN CERTIFICATE-----
1327   -MIIDWjCCAkKgAwIBAgIEO8rJUjANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJE
1328   -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExFjAUBgNVBAMTDUtNRC1D
1329   -QSBTZXJ2ZXIxIDAeBgoJkiaJk/IsZAEDFBBpbmZvY2FAa21kLWNhLmRrMB4XDTk4
1330   -MTAxNjE5MTkyMVoXDTE4MTAxMjE5MTkyMVowZjELMAkGA1UEBhMCREsxDDAKBgNV
1331   -BAoTA0tNRDEPMA0GA1UECxMGS01ELUNBMRYwFAYDVQQDEw1LTUQtQ0EgU2VydmVy
1332   -MSAwHgYKCZImiZPyLGQBAxQQaW5mb2NhQGttZC1jYS5kazCCASIwDQYJKoZIhvcN
1333   -AQEBBQADggEPADCCAQoCggEBAJsLpbSgFxQ7IhFgf5f+RfBxnbCkx5C7yTjfCZvp
1334   -/BP2LBD3OKjgLRwvASoCU3I5NMhccho6uhZVf1HC+Ac5HmXUUd+v92a7gDnohPPy
1335   -Rgv8c6f/+R2fFen37SBemYFDtZveamVXZ2To7xAxNiMKgPTPs/Rl7F6LDsYgv1bD
1336   -36FrjahNoSTmTbYRoK21eIOVwrZeNSzo9w3W8fj0n+V2IB1jsOh+AvjXkjbvAVky
1337   -0/57GMlyBNKP7JIGP7LXqwWfrBXuAph1DUMz467KlHZOMkPwCjTZOab7CcLQXCCY
1338   -12s5c5QAkwpf35hQRuOaNo6d/XFM6J9mofiWlGTT3Px1EX0CAwEAAaMQMA4wDAYD
1339   -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAPlA6VZ2C2cJbsI0SBIe9v+M9
1340   -GxI45QI7P0D7QGyrqM7oNqGq7hJdN6NFb0LyPcF3/pVzmtYVJzaGKF6spaxOEveB
1341   -9ki1xRoXUKpaCxSweBpTzEktWa43OytRy0sbryEmHJCQkz8MPufWssf2yXHzgFFo
1342   -XMQpcMyT7JwxPlfYVvab9Kp+nW7fIyDOG0wdmBerZ+GEQJxJEkri1HskjigxhGze
1343   -ziocJatBuOWgqw5KRylgGIQjUGRTCbODVta+Kmqb9d+cB7FStbYtt2HebOXzBIY3
1344   -XUM5KtGC++We7DqgU5Firek7brw8i2XsHPLKJTceb6Xo6DsSxLfBAWV6+8DCkQ==
1345   ------END CERTIFICATE-----
1346   ------BEGIN CERTIFICATE-----
1347   -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
1348   -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
1349   -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
1350   -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
1351   -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
1352   -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
1353   -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
1354   -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
1355   -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
1356   -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
1357   -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
1358   -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
1359   -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
1360   -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
1361   -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
1362   -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
1363   -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
1364   -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
1365   -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
1366   -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
1367   -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
1368   -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
1369   -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
1370   -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
1371   -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
1372   -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
1373   -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
1374   -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
1375   -Fp1hBWeAyNDYpQcCNJgEjTME1A==
1376   ------END CERTIFICATE-----
1377   ------BEGIN CERTIFICATE-----
1378   -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
1379   -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
1380   -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
1381   -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
1382   -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
1383   -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
1384   -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
1385   -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
1386   -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
1387   -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
1388   -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
1389   -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
1390   -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
1391   -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
1392   -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
1393   -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
1394   -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
1395   -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
1396   -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
1397   -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
1398   -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
1399   -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
1400   -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
1401   -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
1402   -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
1403   -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
1404   -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
1405   -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
1406   -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
1407   -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
1408   -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
1409   -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
1410   -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
1411   -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
1412   -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
1413   ------END CERTIFICATE-----
1414   ------BEGIN CERTIFICATE-----
1415   -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
1416   -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
1417   -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
1418   -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
1419   -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
1420   -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
1421   -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
1422   -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
1423   -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
1424   -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
1425   -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
1426   -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
1427   -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
1428   -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
1429   -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
1430   -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
1431   -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
1432   -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
1433   -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
1434   -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
1435   -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
1436   -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
1437   -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
1438   -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
1439   -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
1440   -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
1441   -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
1442   -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
1443   -NitjrFgBazMpUIaD8QFI
1444   ------END CERTIFICATE-----
1445   ------BEGIN CERTIFICATE-----
1446   -MIIEajCCA1KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJKUDEN
1447   -MAsGA1UECgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24g
1448   -Rm9yIEpQS0kxETAPBgNVBAsMCEJyaWRnZUNBMB4XDTAzMTIyNzA1MDgxNVoXDTEz
1449   -MTIyNjE0NTk1OVowWjELMAkGA1UEBhMCSlAxDTALBgNVBAoMBEpQS0kxKTAnBgNV
1450   -BAsMIFByZWZlY3R1cmFsIEFzc29jaWF0aW9uIEZvciBKUEtJMREwDwYDVQQLDAhC
1451   -cmlkZ2VDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTnUmg7K3m8
1452   -52vd77kwkq156euwoWm5no8E8kmaTSc7x2RABPpqNTlMKdZ6ttsyYrqREeDkcvPL
1453   -yF7yf/I8+innasNtsytcTAy8xY8Avsbd4JkCGW9dyPjk9pzzc3yLQ64Rx2fujRn2
1454   -agcEVdPCr/XpJygX8FD5bbhkZ0CVoiASBmlHOcC3YpFlfbT1QcpOSOb7o+VdKVEi
1455   -MMfbBuU2IlYIaSr/R1nO7RPNtkqkFWJ1/nKjKHyzZje7j70qSxb+BTGcNgTHa1YA
1456   -UrogKB+UpBftmb4ds+XlkEJ1dvwokiSbCDaWFKD+YD4B2s0bvjCbw8xuZFYGhNyR
1457   -/2D5XfN1s2MCAwEAAaOCATkwggE1MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
1458   -BTADAQH/MG0GA1UdHwRmMGQwYqBgoF6kXDBaMQswCQYDVQQGEwJKUDENMAsGA1UE
1459   -CgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24gRm9yIEpQ
1460   -S0kxETAPBgNVBAsMCEJyaWRnZUNBMIGDBgNVHREEfDB6pHgwdjELMAkGA1UEBhMC
1461   -SlAxJzAlBgNVBAoMHuWFrOeahOWAi+S6uuiqjeiovOOCteODvOODk+OCuTEeMBwG
1462   -A1UECwwV6YO96YGT5bqc55yM5Y2U6K2w5LyaMR4wHAYDVQQLDBXjg5bjg6rjg4Pj
1463   -grjoqo3oqLzlsYAwHQYDVR0OBBYEFNQXMiCqQNkR2OaZmQgLtf8mR8p8MA0GCSqG
1464   -SIb3DQEBBQUAA4IBAQATjJo4reTNPC5CsvAKu1RYT8PyXFVYHbKsEpGt4GR8pDCg
1465   -HEGAiAhHSNrGh9CagZMXADvlG0gmMOnXowriQQixrtpkmx0TB8tNAlZptZWkZC+R
1466   -8TnjOkHrk2nFAEC3ezbdK0R7MR4tJLDQCnhEWbg50rf0wZ/aF8uAaVeEtHXa6W0M
1467   -Xq3dSe0XAcrLbX4zZHQTaWvdpLAIjl6DZ3SCieRMyoWUL+LXaLFdTP5WBCd+No58
1468   -IounD9X4xxze2aeRVaiV/WnQ0OSPNS7n7YXy6xQdnaOU4KRW/Lne1EDf5IfWC/ih
1469   -bVAmhZMbcrkWWcsR6aCPG+2mV3zTD6AUzuKPal8Y
1470   ------END CERTIFICATE-----
1471   ------BEGIN CERTIFICATE-----
1472   -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
1473   -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
1474   -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
1475   -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
1476   -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
1477   -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
1478   -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
1479   -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
1480   -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
1481   -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
1482   -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
1483   -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
1484   -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
1485   -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
1486   -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
1487   -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
1488   -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
1489   -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
1490   -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
1491   -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
1492   -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
1493   -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
1494   -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
1495   -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
1496   -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
1497   -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
1498   -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
1499   -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
1500   -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
1501   -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
1502   -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
1503   -SnQ2+Q==
1504   ------END CERTIFICATE-----
1505   ------BEGIN CERTIFICATE-----
1506   -MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
1507   -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
1508   -dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
1509   -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
1510   -MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
1511   -isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
1512   -78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
1513   -zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
1514   -A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
1515   -BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
1516   -Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
1517   -T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
1518   -mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
1519   ------END CERTIFICATE-----
1520   ------BEGIN CERTIFICATE-----
1521   -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
1522   -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
1523   -dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
1524   -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
1525   -MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
1526   -eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
1527   -/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
1528   -wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
1529   -AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
1530   -PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
1531   -AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
1532   -BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
1533   -MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
1534   -HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
1535   -Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
1536   -f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
1537   -rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
1538   -6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
1539   -7CAFYd4=
1540   ------END CERTIFICATE-----
1541   ------BEGIN CERTIFICATE-----
1542   -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
1543   -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
1544   -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
1545   -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
1546   -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
1547   -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
1548   -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
1549   -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
1550   -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
1551   -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
1552   -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
1553   -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
1554   -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
1555   -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
1556   -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
1557   -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
1558   -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
1559   -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
1560   -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
1561   -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
1562   -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
1563   -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
1564   -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
1565   ------END CERTIFICATE-----
1566   ------BEGIN CERTIFICATE-----
1567   -MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
1568   -A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
1569   -VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
1570   -MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
1571   -BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
1572   -dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
1573   -ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
1574   -0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
1575   -uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
1576   -hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
1577   -YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
1578   -1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
1579   ------END CERTIFICATE-----
1580   ------BEGIN CERTIFICATE-----
1581   -MIID+zCCAuOgAwIBAgIENuWNnjANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMC
1582   -VVkxKzApBgNVBAoTIkFETUlOSVNUUkFDSU9OIE5BQ0lPTkFMIERFIENPUlJFT1Mx
1583   -HzAdBgNVBAsTFlNFUlZJQ0lPUyBFTEVDVFJPTklDT1MxLDAqBgNVBAMTI1NFUlZJ
1584   -Q0lPUyBERSBDRVJUSUZJQ0FDSU9OIC0gQS5OLkMuMSkwJwYKCZImiZPyLGQBAxQZ
1585   -Y29ycmVvX2NlcnRAY29ycmVvLmNvbS51eTAeFw05OTAzMDkyMTA4MDdaFw0wOTAz
1586   -MDkyMTA4MDdaMIG0MQswCQYDVQQGEwJVWTErMCkGA1UEChMiQURNSU5JU1RSQUNJ
1587   -T04gTkFDSU9OQUwgREUgQ09SUkVPUzEfMB0GA1UECxMWU0VSVklDSU9TIEVMRUNU
1588   -Uk9OSUNPUzEsMCoGA1UEAxMjU0VSVklDSU9TIERFIENFUlRJRklDQUNJT04gLSBB
1589   -Lk4uQy4xKTAnBgoJkiaJk/IsZAEDFBljb3JyZW9fY2VydEBjb3JyZW8uY29tLnV5
1590   -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsiov7CtZakOTiUYqiuXs
1591   -+gX64sjeQWuvA9sAWu9IN89XifvdyZIQ3ncDlRyQPse2ZyU7VZjv2Tz+JuSKO0Sp
1592   -dDeDCncndLipca3dlxPSyqIuuLqdyb5Z6Nly8oqFZhxHXrSHgtYP32cmpr02sfNd
1593   -kFBRdjIsOy+qX2Fe41TVEl3/DY0Rx4J6Nt/hTBbEdN0tau/QsfAzp/6/N2dDEi55
1594   -SpSvhPsHEQhOMJN16QFUzsXeFIbwrq6bciUPRHfi82yveZwuSceemHYyFpq8AN7g
1595   -tCAFkRfdgBUU7jZBxCGP7tkAShnGcWGlEV0AO+SndGw6Sm6D4HoxXCFl+AiHQodn
1596   -5QIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCZ
1597   -H0kiXPhlf4NukGYvAs+09lY6Zjaht5INNsNFWDZL5szxWsxzMp6aqK7Tduvv/oAs
1598   -4xA0skefHCVq6ES1j0y+gfPQwMELzQMWoEJVVk7B47QgrV+btlVfSBAS7ySzVnzM
1599   -BRuyySqpaBGSfi/pP0Tx0MaQG0vd92Ei7GmGFUCz4qVqd/Oz8lQn2kkqZBn0Od58
1600   -dobZnHJXCjT19S/QOWgb20WlGOOAVDuTEJAUwhQBqqV2LX0P5Fbz/3Mqb47B2ID7
1601   -u5AdGxpJnARjxEId82+7s0lK3UftSboCLSqMxwNWueJo0MGwhrWMSzqujRyIhEz9
1602   -UK+ZJnYIwoCtKHlV0y3m
1603   ------END CERTIFICATE-----
1604   ------BEGIN CERTIFICATE-----
1605   -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
1606   -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
1607   -MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
1608   -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
1609   -hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
1610   -29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
1611   -oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
1612   -3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
1613   -qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
1614   -nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
1615   -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
1616   -MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
1617   -ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
1618   -DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
1619   -TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
1620   -kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
1621   -zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
1622   ------END CERTIFICATE-----
1623   ------BEGIN CERTIFICATE-----
1624   -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
1625   -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
1626   -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
1627   -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
1628   -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
1629   -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
1630   -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
1631   -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
1632   -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
1633   -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
1634   -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
1635   -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
1636   -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
1637   -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
1638   -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
1639   -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
1640   -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
1641   ------END CERTIFICATE-----
1642   ------BEGIN CERTIFICATE-----
1643   -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
1644   -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
1645   -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
1646   -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
1647   -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
1648   -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
1649   -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
1650   -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
1651   -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
1652   -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
1653   -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
1654   -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
1655   -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
1656   -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
1657   -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
1658   -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
1659   -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
1660   -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
1661   -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1662   -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
1663   -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
1664   -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
1665   ------END CERTIFICATE-----
1666   ------BEGIN CERTIFICATE-----
1667   -MIIDXDCCAsWgAwIBAgICA+kwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
1668   -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
1669   -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
1670   -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcN
1671   -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
1672   -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
1673   -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
1674   -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
1675   -c3RDZW50ZXIgQ2xhc3MgMSBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
1676   -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALAp67R2
1677   -s67Xtlu0Xue947GcSQRXW6Gr2X8TG/26YavY53HfLQCUXVFIfSPvdWKEkDwKH1kR
1678   -dC+OgKX9MAI9KVLNchpJIZy8y1KOSKFjlsgQhTBpV3RFwFqGxtU94GhXfTFqJI1F
1679   -lz4xfmhmMm4kbewyNslByvAxRMijYcoboDYfAgMBAAGjazBpMA8GA1UdEwEB/wQF
1680   -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
1681   -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
1682   -CSqGSIb3DQEBBAUAA4GBAE+ZWYXIZFaCxW892EYJLzxRwadwWIGSEur01BYAll5y
1683   -KOfWNl8anK8fwoMatAVVmaZYXDco8lce612/sdNFD3IcA9IAxyxV2v5fiXaL4tR3
1684   -9U0JF6/EuqswK0+4HerZ/1nwUHRGul7qNrDrknsPWNoy4VK9IzcP9fMASq6wXt5u
1685   ------END CERTIFICATE-----
1686   ------BEGIN CERTIFICATE-----
1687   -MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
1688   -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
1689   -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
1690   -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN
1691   -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
1692   -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
1693   -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
1694   -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
1695   -c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
1696   -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y
1697   -AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw
1698   -TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8
1699   -/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF
1700   -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
1701   -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
1702   -CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/
1703   -jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms
1704   -Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk
1705   ------END CERTIFICATE-----
1706   ------BEGIN CERTIFICATE-----
1707   -MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
1708   -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
1709   -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
1710   -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN
1711   -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
1712   -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
1713   -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
1714   -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
1715   -c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
1716   -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF
1717   -Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw
1718   -Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW
1719   -w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF
1720   -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
1721   -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
1722   -CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE
1723   -Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD
1724   -2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0
1725   ------END CERTIFICATE-----
1726   ------BEGIN CERTIFICATE-----
1727   -MIIDXDCCAsWgAwIBAgICA+wwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
1728   -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
1729   -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
1730   -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcN
1731   -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
1732   -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
1733   -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
1734   -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
1735   -c3RDZW50ZXIgQ2xhc3MgNCBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
1736   -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL8vY9Y2
1737   -e7IN01X1ZGzmJV3GtMgUuiU4g+tWYqVVqWWj9COZwku50M1UZ6ajoKOpMyt25L2t
1738   -d7LtXBJ0w8W2D1KacpNDkGJmFQ9Fpd3g3bhvQG5XwXlyo2CqunYdEolTWvwCvuEJ
1739   -E8VKL9w9ixmt14skRftM9M1cNR0pTFHz8mxVAgMBAAGjazBpMA8GA1UdEwEB/wQF
1740   -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
1741   -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
1742   -CSqGSIb3DQEBBAUAA4GBAHIR5ZVBRTK6HPiAFPtmt+uums51g1HAroq7F9Eo53Yf
1743   -E8YrRnGmFXcEmedespEkbwMMc+cjnnbKvgzFy8SQGPxtOm7gVoAbw9+MNhNH+WXB
1744   -g1LVXFy92UJm4TUhaBIQpGCQPj+B6MOMobAVBFrO6yxUVkv5BHktneqMWS+teb1I
1745   ------END CERTIFICATE-----
1746   ------BEGIN CERTIFICATE-----
1747   -MIIDQzCCAqygAwIBAgICA/EwDQYJKoZIhvcNAQEEBQAwgcExCzAJBgNVBAYTAkRF
1748   -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
1749   -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
1750   -MSgwJgYDVQQLEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYD
1751   -VQQDEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMB4XDTk4MDMwOTEx
1752   -NTk1OVoXDTExMDEwMTExNTk1OVowgcExCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdI
1753   -YW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRl
1754   -ciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSgwJgYDVQQLEx9U
1755   -QyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYDVQQDEx9UQyBUcnVz
1756   -dENlbnRlciBUaW1lIFN0YW1waW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1757   -iQKBgQC2S+Q2apwDjOkZb76H+fcwjD4vGE1U3ujMLAg9fEYvhAyd6+/7EZRj5+y0
1758   -zRP9mvYwZcWKfciC0aO9EXsefr8v3GeBBFtwS+rhs7aYPbW+cNM+eV0LN5hYisP6
1759   -mSiPAQRjHoB/d3LEXX//T1f/qslWd0Ot/BY3ajgvdEEZN6f/wwIDAQABo0gwRjAP
1760   -BgNVHRMBAf8EBTADAQH/MDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0
1761   -Y2VudGVyLmRlL2d1aWRlbGluZXMwDQYJKoZIhvcNAQEEBQADgYEALqyPthmgpIxe
1762   -AbsJadYuBft2K2k118hvBqgb8tVfC8xL88FT9JW/nI5ss197C8bmnKfQLAM+1Tnh
1763   -nG7rQfjJZEO4PaJK4R5PhZLXG0duPxfar+wWPo4aiS1BidZpL0OqXS7y6NBU7g0W
1764   -xdpw2BJ0RK4WS3TtjAurNQpIaOxpAyk=
1765   ------END CERTIFICATE-----
1766   ------BEGIN CERTIFICATE-----
1767   -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
1768   -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
1769   -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
1770   -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
1771   -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
1772   -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
1773   -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
1774   -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
1775   -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
1776   -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
1777   -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
1778   -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
1779   -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
1780   -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
1781   -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
1782   -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
1783   -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
1784   -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
1785   -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
1786   -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
1787   -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
1788   -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
1789   -aQNiuJkFBT1reBK9sG9l
1790   ------END CERTIFICATE-----
1791   ------BEGIN CERTIFICATE-----
1792   -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
1793   -SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
1794   -ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
1795   -REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1796   -MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
1797   -2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
1798   -2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
1799   -GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
1800   -dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
1801   -TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
1802   -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
1803   -AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
1804   -c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
1805   -ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
1806   -MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
1807   -T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
1808   -HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
1809   -VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
1810   -bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
1811   -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
1812   -J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
1813   -SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
1814   -JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
1815   -inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
1816   -caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
1817   -mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
1818   -YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
1819   -BKNDLdr8C2LqL19iUw==
1820   ------END CERTIFICATE-----
1821   ------BEGIN CERTIFICATE-----
1822   -MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
1823   -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
1824   -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
1825   -ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
1826   -IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
1827   -DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
1828   -EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
1829   -ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
1830   -dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
1831   -QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
1832   -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
1833   -dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
1834   -wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
1835   -G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
1836   -AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
1837   -c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
1838   -9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
1839   ------END CERTIFICATE-----
1840   ------BEGIN CERTIFICATE-----
1841   -MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
1842   -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
1843   -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
1844   -ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
1845   -YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
1846   -Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
1847   -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
1848   -MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
1849   -b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
1850   -cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
1851   -d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
1852   -DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
1853   -rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
1854   -uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
1855   -BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
1856   -MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
1857   -/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
1858   -gQ==
1859   ------END CERTIFICATE-----
1860   ------BEGIN CERTIFICATE-----
1861   -MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
1862   -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
1863   -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
1864   -ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
1865   -dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
1866   -bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
1867   -QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
1868   -BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
1869   -IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
1870   -bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
1871   -Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
1872   -Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
1873   -Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
1874   -ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
1875   -SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
1876   -b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
1877   -KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
1878   ------END CERTIFICATE-----
1879   ------BEGIN CERTIFICATE-----
1880   -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
1881   -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
1882   -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
1883   -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
1884   -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
1885   -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
1886   -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
1887   -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
1888   -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
1889   -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
1890   -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
1891   -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
1892   -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
1893   -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
1894   -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
1895   -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
1896   -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
1897   ------END CERTIFICATE-----
1898   ------BEGIN CERTIFICATE-----
1899   -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
1900   -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
1901   -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
1902   -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
1903   -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
1904   -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
1905   -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
1906   -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
1907   -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
1908   -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
1909   -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
1910   -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
1911   -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
1912   -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
1913   -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
1914   -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
1915   -qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
1916   ------END CERTIFICATE-----
1917   ------BEGIN CERTIFICATE-----
1918   -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
1919   -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
1920   -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
1921   -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
1922   -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
1923   -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
1924   -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
1925   -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
1926   -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
1927   -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
1928   -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
1929   -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
1930   -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
1931   -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
1932   -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
1933   -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
1934   -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
1935   -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
1936   -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
1937   -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
1938   -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
1939   -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
1940   -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
1941   ------END CERTIFICATE-----
1942   ------BEGIN CERTIFICATE-----
1943   -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
1944   -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
1945   -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1946   -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
1947   -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
1948   -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
1949   -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
1950   -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
1951   -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
1952   -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
1953   -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
1954   -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
1955   -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
1956   -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
1957   -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
1958   -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
1959   -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
1960   -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
1961   -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
1962   -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
1963   -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
1964   -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
1965   -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
1966   -mfnGV/TJVTl4uix5yaaIK/QI
1967   ------END CERTIFICATE-----
1968   ------BEGIN CERTIFICATE-----
1969   -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
1970   -rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
1971   -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1972   -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
1973   -Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
1974   -Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
1975   -BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
1976   -dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
1977   -AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
1978   -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
1979   -YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
1980   -hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
1981   -L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
1982   -SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
1983   -1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
1984   -6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
1985   -DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
1986   -Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
1987   -aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
1988   -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
1989   -7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
1990   -xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
1991   -rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
1992   -eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
1993   -USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
1994   ------END CERTIFICATE-----
1995   ------BEGIN CERTIFICATE-----
1996   -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
1997   -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
1998   -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1999   -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
2000   -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
2001   -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
2002   -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
2003   -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
2004   -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
2005   -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
2006   -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
2007   -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
2008   -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
2009   -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
2010   -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
2011   -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
2012   -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
2013   -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
2014   -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
2015   -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
2016   -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
2017   -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
2018   -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
2019   -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
2020   ------END CERTIFICATE-----
2021   ------BEGIN CERTIFICATE-----
2022   -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
2023   -ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
2024   -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
2025   -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
2026   -TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
2027   -NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
2028   -IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
2029   -VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
2030   -Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
2031   -DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
2032   -N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
2033   -iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
2034   -YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
2035   -axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
2036   -yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
2037   -AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
2038   -ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
2039   -VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
2040   -BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
2041   -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
2042   -QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
2043   -ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
2044   -YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
2045   -QErNaLly7HF27FSOH4UMAWr6pjisH8SE
2046   ------END CERTIFICATE-----
2047   ------BEGIN CERTIFICATE-----
2048   -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB
2049   -lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
2050   -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
2051   -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt
2052   -T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV
2053   -BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc
2054   -BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3
2055   -dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC
2056   -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP
2057   -HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO
2058   -KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo
2059   -5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+
2060   -pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb
2061   -kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC
2062   -AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
2063   -FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov
2064   -L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV
2065   -HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN
2066   -AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
2067   -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB
2068   -mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU
2069   -4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5
2070   -81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR
2071   -Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
2072   ------END CERTIFICATE-----
2073   ------BEGIN CERTIFICATE-----
2074   -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
2075   -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
2076   -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
2077   -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
2078   -aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
2079   -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
2080   -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
2081   -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
2082   -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
2083   -IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
2084   -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
2085   -nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
2086   -8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
2087   -ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
2088   -PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
2089   -6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
2090   -n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
2091   -qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
2092   -wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
2093   -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
2094   -pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
2095   -E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
2096   ------END CERTIFICATE-----
2097   ------BEGIN CERTIFICATE-----
2098   -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
2099   -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
2100   -aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
2101   -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
2102   -Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
2103   -eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
2104   -BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
2105   -Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
2106   -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
2107   -Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
2108   -IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
2109   -J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
2110   -JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
2111   -wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
2112   -koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
2113   -qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
2114   -Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
2115   -xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
2116   -7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
2117   -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
2118   -sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
2119   -cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
2120   ------END CERTIFICATE-----
2121   ------BEGIN CERTIFICATE-----
2122   -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
2123   -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
2124   -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
2125   -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
2126   -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
2127   -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
2128   -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
2129   -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
2130   -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
2131   -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
2132   -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
2133   -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
2134   -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
2135   -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
2136   -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
2137   -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
2138   -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
2139   -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
2140   -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
2141   -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
2142   -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
2143   -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
2144   ------END CERTIFICATE-----
2145   ------BEGIN CERTIFICATE-----
2146   -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
2147   -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
2148   -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
2149   -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
2150   -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
2151   -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
2152   -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
2153   -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
2154   -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
2155   -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
2156   -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
2157   -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
2158   -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
2159   -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
2160   -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
2161   -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
2162   -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
2163   -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
2164   -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
2165   -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
2166   -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
2167   -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
2168   ------END CERTIFICATE-----
2169   ------BEGIN CERTIFICATE-----
2170   -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
2171   -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
2172   -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
2173   -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
2174   -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
2175   -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
2176   -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
2177   -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
2178   -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
2179   -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
2180   -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
2181   -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
2182   -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
2183   -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
2184   -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
2185   -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
2186   -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
2187   -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
2188   -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
2189   -398znM/jra6O1I7mT1GvFpLgXPYHDw==
2190   ------END CERTIFICATE-----
2191   ------BEGIN CERTIFICATE-----
2192   -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
2193   -VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
2194   -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
2195   -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
2196   -MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
2197   -KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
2198   -A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
2199   -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
2200   -5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
2201   -SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
2202   -JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
2203   -ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
2204   -AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
2205   -AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
2206   -CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
2207   -b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
2208   -7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
2209   -0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
2210   -nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
2211   -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
2212   -33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
2213   ------END CERTIFICATE-----
2214   ------BEGIN CERTIFICATE-----
2215   -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
2216   -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
2217   -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
2218   -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
2219   -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
2220   -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
2221   -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
2222   -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
2223   -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
2224   -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
2225   -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
2226   -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
2227   -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
2228   -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
2229   -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
2230   -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
2231   -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
2232   -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
2233   -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
2234   -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
2235   -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
2236   -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
2237   -O+7ETPTsJ3xCwnR8gooJybQDJbw=
2238   ------END CERTIFICATE-----
2239   ------BEGIN CERTIFICATE-----
2240   -MIIEQTCCA6qgAwIBAgICAQQwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
2241   -bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
2242   -Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
2243   -QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
2244   -BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDExNDIxMDUyMVoX
2245   -DTI0MDEwOTIxMDUyMVowgewxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25h
2246   -MRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5v
2247   -bG9naWVzLCBJbmMuMTAwLgYDVQQLEydodHRwOi8vd3d3LnN0YXJmaWVsZHRlY2gu
2248   -Y29tL3JlcG9zaXRvcnkxMTAvBgNVBAMTKFN0YXJmaWVsZCBTZWN1cmUgQ2VydGlm
2249   -aWNhdGlvbiBBdXRob3JpdHkxKjAoBgkqhkiG9w0BCQEWG3ByYWN0aWNlc0BzdGFy
2250   -ZmllbGR0ZWNoLmNvbTCBnTANBgkqhkiG9w0BAQEFAAOBiwAwgYcCgYEA2xFDa9zR
2251   -aXhZSehudBQIdBFsfrcqqCLYQjx6z59QskaupmcaIyK+D7M0+6yskKpbKMJw9raK
2252   -gCrgm5xS4JGocqAW4cROfREJs5651POyUMRtSAi9vCqXDG2jimo8ms9KNNwe3upa
2253   -JsChooKpSvuGIhKQOrKC1JKRn6lFn8Ok2/sCAQOjggEhMIIBHTAMBgNVHRMEBTAD
2254   -AQH/MAsGA1UdDwQEAwIBBjBKBgNVHR8EQzBBMD+gPaA7hjlodHRwOi8vY2VydGlm
2255   -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvcm9vdC5jcmwwTwYD
2256   -VR0gBEgwRjBEBgtghkgBhvhFAQcXAzA1MDMGCCsGAQUFBwIBFidodHRwOi8vd3d3
2257   -LnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkwOQYIKwYBBQUHAQEELTArMCkG
2258   -CCsGAQUFBzABhh1odHRwOi8vb2NzcC5zdGFyZmllbGR0ZWNoLmNvbTAdBgNVHQ4E
2259   -FgQUrFXet+oT6/yYaOJTYB7xJT6M7ucwCQYDVR0jBAIwADANBgkqhkiG9w0BAQUF
2260   -AAOBgQB+HJi+rQONJYXufJCIIiv+J/RCsux/tfxyaAWkfZHvKNF9IDk7eQg3aBhS
2261   -1Y8D0olPHhHR6aV0S/xfZ2WEcYR4WbfWydfXkzXmE6uUPI6TQImMwNfy5wdS0XCP
2262   -mIzroG3RNlOQoI8WMB7ew79/RqWVKvnI3jvbd/TyMrEzYaIwNQ==
2263   ------END CERTIFICATE-----
2264   ------BEGIN CERTIFICATE-----
2265   -MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
2266   -IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
2267   -IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
2268   -Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
2269   -BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
2270   -MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
2271   -ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
2272   -CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
2273   -8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
2274   -zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
2275   -fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
2276   -w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
2277   -G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
2278   -epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
2279   -laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
2280   -QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
2281   -fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
2282   -YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
2283   -ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
2284   -gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
2285   -MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
2286   -IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
2287   -dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
2288   -czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
2289   -dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
2290   -aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
2291   -AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
2292   -b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
2293   -ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
2294   -nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
2295   -18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
2296   -gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
2297   -Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
2298   -sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
2299   -SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
2300   -CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
2301   -GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
2302   -zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
2303   -omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
2304   ------END CERTIFICATE-----
2305   ------BEGIN CERTIFICATE-----
2306   -MIIFEjCCBHugAwIBAgICAQwwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
2307   -bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
2308   -Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
2309   -QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
2310   -BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MzkxNloX
2311   -DTI0MDYyOTE3MzkxNlowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVs
2312   -ZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAy
2313   -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0A
2314   -MIIBCAKCAQEAtzLI/ulxpgSFrQwRZN/OTe/IAxiHP6Gr+zymn/DDodrU2G4rU5D7
2315   -JKQ+hPCe6F/s5SdE9SimP3ve4CrwyK9TL57KBQGTHo9mHDmnTfpatnMEJWbrd3/n
2316   -WcZKmSUUVOsmx/N/GdUwcI+vsEYq/63rKe3Xn6oEh6PU+YmlNF/bQ5GCNtlmPLG4
2317   -uYL9nDo+EMg77wZlZnqbGRg9/3FRPDAuX749d3OyXQZswyNWmiuFJpIcpwKz5D8N
2318   -rwh5grg2Peqc0zWzvGnK9cyd6P1kjReAM25eSl2ZyR6HtJ0awNVuEzUjXt+bXz3v
2319   -1vd2wuo+u3gNHEJnawTY+Nbab4vyRKABqwIBA6OCAfMwggHvMB0GA1UdDgQWBBS/
2320   -X7fRzt0fhvRbVazc1xDCDqmI5zCB0gYDVR0jBIHKMIHHoYHBpIG+MIG7MSQwIgYD
2321   -VQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD
2322   -ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAyIFBvbGljeSBWYWxp
2323   -ZGF0aW9uIEF1dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5j
2324   -b20vMSAwHgYJKoZIhvcNAQkBFhFpbmZvQHZhbGljZXJ0LmNvbYIBATAPBgNVHRMB
2325   -Af8EBTADAQH/MDkGCCsGAQUFBwEBBC0wKzApBggrBgEFBQcwAYYdaHR0cDovL29j
2326   -c3Auc3RhcmZpZWxkdGVjaC5jb20wSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2Nl
2327   -cnRpZmljYXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5L3Jvb3QuY3Js
2328   -MFEGA1UdIARKMEgwRgYEVR0gADA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY2VydGlm
2329   -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkwDgYDVR0PAQH/BAQD
2330   -AgEGMA0GCSqGSIb3DQEBBQUAA4GBAKVi8afCXSWlcD284ipxs33kDTcdVWptobCr
2331   -mADkhWBKIMuh8D1195TaQ39oXCUIuNJ9MxB73HZn8bjhU3zhxoNbKXuNSm8uf0So
2332   -GkVrMgfHeMpkksK0hAzc3S1fTbvdiuo43NlmouxBulVtWmQ9twPMHOKRUJ7jCUSV
2333   -FxdzPcwl
2334   ------END CERTIFICATE-----
2335   ------BEGIN CERTIFICATE-----
2336   -MIIFBzCCA++gAwIBAgICAgEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCVVMx
2337   -JTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsT
2338   -KVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2
2339   -MTExNjAxMTU0MFoXDTI2MTExNjAxMTU0MFowgdwxCzAJBgNVBAYTAlVTMRAwDgYD
2340   -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
2341   -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTkwNwYDVQQLEzBodHRwOi8vY2VydGlm
2342   -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkxMTAvBgNVBAMTKFN0
2343   -YXJmaWVsZCBTZWN1cmUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxETAPBgNVBAUT
2344   -CDEwNjg4NDM1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4qddo+1m
2345   -72ovKzYf3Y3TBQKgyg9eGa44cs8W2lRKy0gK9KFzEWWFQ8lbFwyaK74PmFF6YCkN
2346   -bN7i6OUVTVb/kNGnpgQ/YAdKym+lEOez+FyxvCsq3AF59R019Xoog/KTc4KJrGBt
2347   -y8JIwh3UBkQXPKwBR6s+cIQJC7ggCEAgh6FjGso+g9I3s5iNMj83v6G3W1/eXDOS
2348   -zz4HzrlIS+LwVVAv+HBCidGTlopj2WYN5lhuuW2QvcrchGbyOY5bplhVc8tibBvX
2349   -IBY7LFn1y8hWMkpQJ7pV06gBy3KpdIsMrTrlFbYq32X43or174Q7+edUZQuAvUdF
2350   -pfBE2FM7voDxLwIDAQABo4IBRDCCAUAwHQYDVR0OBBYEFElLUifRG7zyoSFqYntR
2351   -QnqK19VWMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtVrNzXEMIOqYjnMBIGA1UdEwEB
2352   -/wQIMAYBAf8CAQAwOQYIKwYBBQUHAQEELTArMCkGCCsGAQUFBzABhh1odHRwOi8v
2353   -b2NzcC5zdGFyZmllbGR0ZWNoLmNvbTBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8v
2354   -Y2VydGlmaWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvc2Zyb290
2355   -LmNybDBRBgNVHSAESjBIMEYGBFUdIAAwPjA8BggrBgEFBQcCARYwaHR0cDovL2Nl
2356   -cnRpZmljYXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5MA4GA1UdDwEB
2357   -/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAhlK6sx+mXmuQpmQq/EWyrp8+s2Kv
2358   -2x9nxL3KoS/HnA0hV9D4NiHOOiU+eHaz2d283vtshF8Mow0S6xE7cV+AHvEfbQ5f
2359   -wezUpfdlux9MlQETsmqcC+sfnbHn7RkNvIV88xe9WWOupxoFzUfjLZZiUTIKCGhL
2360   -Indf90XcYd70yysiKUQl0p8Ld3qhJnxK1w/C0Ty6DqeVmlsFChD5VV/Bl4t0zF4o
2361   -aRN+0AqNnQ9gVHrEjBs1D3R6cLKCzx214orbKsayUWm/EheSYBeqPVsJ+IdlHaek
2362   -KOUiAgOCRJo0Y577KM/ozS4OUiDtSss4fJ2ubnnXlSyokfOGASGRS7VApA==
2363   ------END CERTIFICATE-----
vendor/ezcrypto-0.7.2/rakefile
... ... @@ -1,200 +0,0 @@
1   -require 'rubygems'
2   -require 'rake'
3   -require 'rake/testtask'
4   -require 'rake/rdoctask'
5   -require 'rake/packagetask'
6   -require 'rake/gempackagetask'
7   -require 'rake/contrib/rubyforgepublisher'
8   -
9   -PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
10   -PKG_NAME = 'ezcrypto'
11   -PKG_VERSION = '0.7.2' + PKG_BUILD
12   -PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
13   -
14   -RELEASE_NAME = "REL #{PKG_VERSION}"
15   -
16   -RUBY_FORGE_PROJECT = "ezcrypto"
17   -RUBY_FORGE_USER = "pelleb"
18   -
19   -desc "Default Task"
20   -task :default => [ :test ]
21   -
22   -# Run the unit tests
23   -Rake::TestTask.new { |t|
24   - t.libs << "test"
25   - t.pattern = 'test/*_test.rb'
26   - t.verbose = true
27   -}
28   -
29   -
30   -# Genereate the RDoc documentation
31   -Rake::RDocTask.new { |rdoc|
32   - rdoc.rdoc_dir = 'doc'
33   - rdoc.title = "EzCrypto - Simplified Crypto Library"
34   -# rdoc.options << '--line-numbers --inline-source --main README #--template=jamis'
35   - rdoc.template = "#{ENV['template']}.rb" if ENV['template']
36   - rdoc.rdoc_files.include('README.rdoc')
37   - rdoc.rdoc_files.include('README_ACTIVE_CRYPTO')
38   - rdoc.rdoc_files.include('README_DIGITAL_SIGNATURES')
39   - rdoc.rdoc_files.include('CHANGELOG')
40   - rdoc.rdoc_files.include('lib/*.rb')
41   -}
42   -
43   -
44   -# Create compressed packages
45   -spec = Gem::Specification.new do |s|
46   - s.platform = Gem::Platform::RUBY
47   - s.name = PKG_NAME
48   - s.summary = "Simplified encryption library."
49   - s.description = %q{Makes it easier and safer to write crypto code.}
50   - s.version = PKG_VERSION
51   -
52   - s.author = "Pelle Braendgaard"
53   - s.email = "pelle@stakeventures.com"
54   - s.rubyforge_project = "ezcrypto"
55   - s.homepage = "http://ezcrypto.rubyforge.org"
56   -
57   -
58   - s.has_rdoc = true
59   - s.requirements << 'none'
60   - s.require_path = 'lib'
61   -
62   - s.files = [ "rakefile", "README.rdoc", "README_ACTIVE_CRYPTO", "README_DIGITAL_SIGNATURES", "MIT-LICENSE","CHANGELOG","init.rb" ]
63   - ["lib","test"].each do |dir|
64   - s.files = s.files + Dir.glob( "#{dir}/*" )
65   - end
66   - s.extra_rdoc_files = ["CHANGELOG", "README.rdoc","README_ACTIVE_CRYPTO","README_DIGITAL_SIGNATURES"]
67   - s.test_files = Dir.glob("test/*")
68   -end
69   -
70   -Rake::GemPackageTask.new(spec) do |p|
71   - p.gem_spec = spec
72   - p.need_tar = true
73   - p.need_zip = true
74   -end
75   -
76   -
77   -desc "Publish the GEM"
78   -task :pgem => [:package] do
79   - Rake::SshFilePublisher.new("pelleb@rubyforge.org", "/var/www/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
80   -end
81   -
82   -desc "Publish the API documentation"
83   -task :pdoc => [:rdoc] do
84   - Rake::SshDirPublisher.new("pelleb@rubyforge.org", "/var/www/gforge-projects/ezcrypto", "doc").upload
85   -end
86   -
87   -desc "Publish the release files to RubyForge."
88   -task :rubyforge_upload => :package do
89   - files = %w(gem tgz zip).map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
90   -
91   - if RUBY_FORGE_PROJECT then
92   - require 'net/http'
93   - require 'open-uri'
94   -
95   - project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
96   - project_data = open(project_uri) { |data| data.read }
97   - group_id = project_data[/[?&]group_id=(\d+)/, 1]
98   - raise "Couldn't get group id" unless group_id
99   -
100   - # This echos password to shell which is a bit sucky
101   - if ENV["RUBY_FORGE_PASSWORD"]
102   - password = ENV["RUBY_FORGE_PASSWORD"]
103   - else
104   - print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
105   - password = STDIN.gets.chomp
106   - end
107   -
108   - login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
109   - data = [
110   - "login=1",
111   - "form_loginname=#{RUBY_FORGE_USER}",
112   - "form_pw=#{password}"
113   - ].join("&")
114   - http.post("/account/login.php", data)
115   - end
116   -
117   - cookie = login_response["set-cookie"]
118   - raise "Login failed" unless cookie
119   - headers = { "Cookie" => cookie }
120   -
121   - release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
122   - release_data = open(release_uri, headers) { |data| data.read }
123   - package_id = release_data[/[?&]package_id=(\d+)/, 1]
124   - raise "Couldn't get package id" unless package_id
125   -
126   - first_file = true
127   - release_id = ""
128   -
129   - files.each do |filename|
130   - basename = File.basename(filename)
131   - file_ext = File.extname(filename)
132   - file_data = File.open(filename, "rb") { |file| file.read }
133   -
134   - puts "Releasing #{basename}..."
135   -
136   - release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
137   - release_date = Time.now.strftime("%Y-%m-%d %H:%M")
138   - type_map = {
139   - ".zip" => "3000",
140   - ".tgz" => "3110",
141   - ".gz" => "3110",
142   - ".gem" => "1400"
143   - }; type_map.default = "9999"
144   - type = type_map[file_ext]
145   - boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
146   -
147   - query_hash = if first_file then
148   - {
149   - "group_id" => group_id,
150   - "package_id" => package_id,
151   - "release_name" => PKG_FILE_NAME,
152   - "release_date" => release_date,
153   - "type_id" => type,
154   - "processor_id" => "8000", # Any
155   - "release_notes" => "",
156   - "release_changes" => "",
157   - "preformatted" => "1",
158   - "submit" => "1"
159   - }
160   - else
161   - {
162   - "group_id" => group_id,
163   - "release_id" => release_id,
164   - "package_id" => package_id,
165   - "step2" => "1",
166   - "type_id" => type,
167   - "processor_id" => "8000", # Any
168   - "submit" => "Add This File"
169   - }
170   - end
171   -
172   - query = "?" + query_hash.map do |(name, value)|
173   - [name, URI.encode(value)].join("=")
174   - end.join("&")
175   -
176   - data = [
177   - "--" + boundary,
178   - "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
179   - "Content-Type: application/octet-stream",
180   - "Content-Transfer-Encoding: binary",
181   - "", file_data, ""
182   - ].join("\x0D\x0A")
183   -
184   - release_headers = headers.merge(
185   - "Content-Type" => "multipart/form-data; boundary=#{boundary}"
186   - )
187   -
188   - target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
189   - http.post(target + query, data, release_headers)
190   - end
191   -
192   - if first_file then
193   - release_id = release_response.body[/release_id=(\d+)/, 1]
194   - raise("Couldn't get release id") unless release_id
195   - end
196   -
197   - first_file = false
198   - end
199   - end
200   -end
vendor/ezcrypto-0.7.2/test/._active_crypto_test.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._dsig_test.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._encrypt_test.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._sf-class2-root.crt
No preview for this file type
vendor/ezcrypto-0.7.2/test/._sf_intermediate.crt
No preview for this file type
vendor/ezcrypto-0.7.2/test/._test_helper.rb
No preview for this file type
vendor/ezcrypto-0.7.2/test/._testsigner.pem
No preview for this file type
vendor/ezcrypto-0.7.2/test/active_crypto_test.rb
... ... @@ -1,211 +0,0 @@
1   -$:.unshift(File.dirname(__FILE__) + "/../lib/")
2   -require File.join(File.dirname(__FILE__), 'test_helper')
3   -require 'test/unit'
4   -require 'active_crypto'
5   -
6   -
7   -class User < ActiveRecord::Base
8   - has_many :secrets
9   - has_many :groups
10   - keyholder
11   -end
12   -
13   -class Secret < ActiveRecord::Base
14   - encrypt :name,:email, :key=>:user, :base64=>true
15   - belongs_to :user
16   - has_many :children
17   -end
18   -
19   -class Child < ActiveRecord::Base
20   - encrypt :email, :key=>:secret, :base64=>true
21   - belongs_to :secret
22   -end
23   -
24   -class Asset<ActiveRecord::Base
25   - encrypt :title, :base64=>true
26   - has_many :caps,:dependent=>:destroy
27   -
28   - def self.create(title,email)
29   - asset=Asset.new
30   - asset.set_session_key(EzCrypto::Key.generate)
31   - asset.title=title
32   - if asset.save
33   - asset.share(email)
34   - else
35   - nil
36   - end
37   - end
38   -
39   - def share(email=nil)
40   - Cap.create_for_asset(self,email)
41   - end
42   -
43   -end
44   -
45   -class AssetRaw<ActiveRecord::Base
46   - set_table_name "assets"
47   -end
48   -
49   -class Cap < ActiveRecord::Base
50   - belongs_to :asset
51   - encrypt :shared_key, :base64=>true
52   -
53   - def self.find_by_key(cap_key)
54   - cap_key.chop
55   - hash=Digest::SHA1.hexdigest(cap_key)
56   - if (cap_key.length>=20) # Sanity check
57   - cap=self.find_by_key_hash(hash)
58   - if cap
59   - cap.set_encoded_key(cap_key)
60   - cap.asset.set_encoded_key(cap.shared_key)
61   - cap
62   - end
63   - else
64   - nil
65   - end
66   - end
67   -
68   - def self.create_for_asset(asset,email=nil)
69   - cap=Cap.new
70   - cap.email=email if email
71   - cap.asset=asset
72   - if cap.save
73   - cap.set_session_key(EzCrypto::Key.generate)
74   - cap_key=cap.session_key.encode
75   - cap.key_hash=Digest::SHA1.hexdigest(cap_key)
76   - cap.shared_key=asset.session_key.encode
77   - cap.save
78   - cap_key
79   - else
80   - nil
81   - end
82   - end
83   -
84   -end
85   -
86   -class Group < ActiveRecord::Base
87   - belongs_to :user
88   - has_many :group_secrets
89   -
90   - encrypt :name,:group_key, :key=>:user , :base64=>true
91   -end
92   -
93   -class GroupSecret < ActiveRecord::Base
94   - belongs_to :group
95   -
96   - encrypt :title,:body, :key=>:group, :base64=>true
97   -
98   -end
99   -
100   -class ActiveCryptoTest < Test::Unit::TestCase
101   -
102   - def setup
103   - end
104   -
105   - def test_key_holder_in_record
106   - user=User.new
107   - user.name="bob"
108   - user.save
109   - assert user.kind_of?(ActiveCrypto::KeyHolder)
110   - assert user.kind_of?(ActiveRecord::Base)
111   - assert user.kind_of?(User)
112   - assert_nil user.session_key
113   - user.enter_password "shhcccc"
114   - assert_not_nil user.session_key
115   - assert_not_nil user.session_key.encrypt("test")
116   - end
117   -
118   - def test_encrypted_child
119   - user=User.new
120   - user.save
121   - assert_nil user.session_key
122   - user.enter_password "shhcccc"
123   - assert_not_nil user.session_key
124   - assert user.kind_of?(ActiveCrypto::KeyHolder)
125   - assert user.kind_of?(ActiveRecord::Base)
126   - assert user.kind_of?(User)
127   -
128   - jill=user.secrets.create
129   -
130   - assert_not_nil jill
131   - assert jill.kind_of?(ActiveCrypto::AssociationKeyHolder)
132   - assert jill.kind_of?(ActiveCrypto::KeyHolder)
133   - assert jill.kind_of?(ActiveCrypto::Encrypted)
134   - assert jill.kind_of?(ActiveRecord::Base)
135   - assert jill.kind_of?(Secret)
136   -
137   - assert jill.respond_to?(:session_key)
138   -
139   - assert_not_nil jill.user
140   - assert_not_nil jill.user.session_key
141   -
142   -
143   - assert_not_nil jill.session_key
144   - assert_equal user.session_key,jill.session_key
145   -
146   - jill.name="jill"
147   - jill.save
148   -
149   -
150   - assert_equal "jill",jill.name
151   -
152   - jill=user.secrets.first
153   - assert_not_nil jill.session_key
154   - assert_equal user.session_key,jill.session_key
155   - assert_equal "jill",jill.name
156   -
157   - child=jill.children.create
158   - child.email="pelle@neubia.com"
159   - child.save
160   -
161   - assert_not_nil child.secret
162   - assert_not_nil child.secret.session_key
163   -
164   -
165   - assert_not_nil child.session_key
166   - assert_equal user.session_key,child.session_key
167   -
168   - assert_equal "pelle@neubia.com",child.email
169   -
170   - child=jill.children.first
171   -
172   - assert_not_nil child.secret
173   - assert_not_nil child.secret.session_key
174   -
175   -
176   - assert_not_nil child.session_key
177   - assert_equal user.session_key,child.session_key
178   -
179   - assert_equal "pelle@neubia.com",child.email
180   -
181   - end
182   -
183   - def test_caps
184   - key=Asset.create("title","pelle@neubia.com")
185   - assert_not_nil key
186   - cap=Cap.find_by_key key
187   - assert_not_nil cap
188   - assert_not_nil cap.asset
189   -
190   - assert_equal "title",cap.asset.title
191   - assert_equal "title",cap.asset["title"]
192   - assert_equal "pelle@neubia.com",cap.email
193   - assert_equal "pelle@neubia.com",cap["email"]
194   -
195   - # Non decrypting version
196   - raw=AssetRaw.find cap.asset.id
197   - assert_not_equal "title",raw.title
198   - assert_not_equal "title",raw["title"]
199   -
200   - bob_key=cap.asset.share("bob@bob.com")
201   - bob_cap=Cap.find_by_key bob_key
202   -
203   - assert_not_equal key,bob_key
204   - assert_not_nil bob_cap
205   - assert_not_nil bob_cap.asset
206   - assert_equal "title",bob_cap.asset.title
207   - assert_equal "bob@bob.com",bob_cap.email
208   - end
209   -end
210   -
211   -
vendor/ezcrypto-0.7.2/test/agree2.com.cert
... ... @@ -1,31 +0,0 @@
1   ------BEGIN CERTIFICATE-----
2   -MIIFIzCCBAugAwIBAgIEdjTPCDANBgkqhkiG9w0BAQUFADCB3DELMAkGA1UEBhMC
3   -VVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNV
4   -BAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOTA3BgNVBAsTMGh0dHA6
5   -Ly9jZXJ0aWZpY2F0ZXMuc3RhcmZpZWxkdGVjaC5jb20vcmVwb3NpdG9yeTExMC8G
6   -A1UEAxMoU3RhcmZpZWxkIFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTER
7   -MA8GA1UEBRMIMTA2ODg0MzUwHhcNMDkwMzEwMTUyMzQ1WhcNMTAwMzExMjAzNzE0
8   -WjB6MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
9   -U2FuIEZyYW5jaXNjbzEYMBYGA1UEChMPRXh0cmEgRWFnbGUgTExDMQ8wDQYDVQQL
10   -EwZBZ3JlZTIxEzARBgNVBAMTCmFncmVlMi5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
11   -gY0AMIGJAoGBAPNfoI6m+NIm69qkuOgOwlRI64W6SmJ+xlxz/fduK/0XtqRlANL9
12   -aENxkAEvJz6tpsinNOAry96ucajZP9WUMWfy+wmXkTWLQN1jVPZUJs2mBBw6ajgm
13   -8xLgPWn3czRve0Q34poWGLFb+CZdcZScbnHcn6Dkt8SwMsFFBhLB0FM/AgMBAAGj
14   -ggHQMIIBzDAPBgNVHRMBAf8EBTADAQEAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
15   -BgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwOAYDVR0fBDEwLzAtoCugKYYnaHR0cDov
16   -L2NybC5zdGFyZmllbGR0ZWNoLmNvbS9zZnMyLTAuY3JsMFkGA1UdIARSMFAwTgYL
17   -YIZIAYb9bgEHFwIwPzA9BggrBgEFBQcCARYxaHR0cDovL2NlcnRpZmljYXRlcy5z
18   -dGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5LzCBjQYIKwYBBQUHAQEEgYAwfjAq
19   -BggrBgEFBQcwAYYeaHR0cDovL29jc3Auc3RhcmZpZWxkdGVjaC5jb20vMFAGCCsG
20   -AQUFBzAChkRodHRwOi8vY2VydGlmaWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3Jl
21   -cG9zaXRvcnkvc2ZfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSMEGDAWgBRJS1In0Ru8
22   -8qEhamJ7UUJ6itfVVjAlBgNVHREEHjAcggphZ3JlZTIuY29tgg53d3cuYWdyZWUy
23   -LmNvbTAdBgNVHQ4EFgQU8U68CbJHeGRhPSl2LRtx9IaocA4wDQYJKoZIhvcNAQEF
24   -BQADggEBACFngInbvv6YmtiwHFWZswcY7eoqMpUggXC2jmX9ZT+w9CcdgVlygow6
25   -jeR2HY7FPSKkm0YaDEAYYIoYeFHwaG6E4B6ykGvw5OQ4FESsQT/lxVlbeF0J1ERh
26   -YEpvwrVrVK/ppRd5En2hvl6kKvRyqjTcHKT/MKZ2xQXUZ6JEVKIME3HLS+IHR/Sc
27   -uo1aH3dXS73lFmWLH4P12KIfqnzQ938FDynW875bvKgl4HAzJj66wnMOoL5INOuK
28   -d+r9xUBD/uWXJPaXLzC8vuORHInLWNE4M2cpNeVNsU8siX4c9mC/Hj+Ss1nYBW0D
29   -4b8GcJ+tY+2Y+ODBKJn/s0qhB6TXoKM=
30   ------END CERTIFICATE-----
31   -
vendor/ezcrypto-0.7.2/test/association_key_holder_test.rb
... ... @@ -1,38 +0,0 @@
1   -require 'key_holder_test'
2   -
3   -class User < ActiveRecord::Base
4   - keyholder
5   -end
6   -
7   -class AssociationKeyHolderTest < KeyHolderTest
8   - def setup
9   - @key_holder=User.create
10   - end
11   -
12   - def test_should_retain_session_key_on_reload
13   - key=EzCrypto::Key.generate
14   - key_holder.set_session_key key
15   - assert_not_nil key_holder.session_key
16   - assert_equal key.raw,key_holder.session_key.raw
17   -
18   - reloaded=User.find key_holder.id
19   - assert_not_nil reloaded.session_key
20   - assert_equal key.raw,reloaded.session_key.raw
21   - end
22   -
23   - def test_should_retain_session_key_on_reload_for_record_with_key_set_before_create
24   - key=EzCrypto::Key.generate
25   - key_holder=User.new
26   - assert_nil key_holder.session_key
27   -
28   - key_holder.set_session_key key
29   - assert_not_nil key_holder.session_key
30   -
31   - assert_equal key.raw,key_holder.session_key.raw
32   - key_holder.save
33   -
34   - reloaded=User.find key_holder.id
35   - assert_not_nil reloaded.session_key
36   - assert_equal key.raw,reloaded.session_key.raw
37   - end
38   -end
vendor/ezcrypto-0.7.2/test/database.yml
... ... @@ -1,18 +0,0 @@
1   -sqlite:
2   - :adapter: sqlite
3   - :dbfile: crypto_test.sqlite.db
4   -sqlite3:
5   - :adapter: sqlite3
6   - :dbfile: crypto_test.sqlite3.db
7   -postgresql:
8   - :adapter: postgresql
9   - :username: postgres
10   - :password: postgres
11   - :database: crypto_test
12   - :min_messages: ERROR
13   -mysql:
14   - :adapter: mysql
15   - :host: localhost
16   - :username: rails
17   - :password:
18   - :database: crypto_test
19 0 \ No newline at end of file
vendor/ezcrypto-0.7.2/test/debug.log
No preview for this file type
vendor/ezcrypto-0.7.2/test/digest_test.rb
... ... @@ -1,51 +0,0 @@
1   -$:.unshift(File.dirname(__FILE__) + "/../lib/")
2   -
3   -require 'test/unit'
4   -require 'ezcrypto'
5   -require 'base64'
6   -require 'digest/sha1'
7   -
8   -class DigestTest < Test::Unit::TestCase
9   -
10   - def setup
11   - end
12   -
13   - def test_digest
14   - ["hello","","test"].each do |data|
15   - assert_equal Digest::SHA1.digest(data)[0..15],EzCrypto::Digester.digest(data)
16   - end
17   - end
18   -
19   - def test_digest64
20   - ["hello","","test"].each do |data|
21   - assert_equal Base64.encode64(Digest::SHA1.digest(data)[0..15]),EzCrypto::Digester.digest64(data)
22   - end
23   - end
24   -
25   - def test_hexdigest
26   - ["hello","","test"].each do |data|
27   - assert_equal Digest::SHA1.hexdigest(data)[0..40],EzCrypto::Digester.hexdigest(data)
28   - end
29   - end
30   -
31   - def test_generate_key
32   - key=EzCrypto::Digester.generate_key
33   - assert 16,key.size
34   - end
35   -
36   - def test_generate_key64
37   - key=EzCrypto::Digester.generate_key64
38   - assert 24,key.size
39   -
40   - end
41   -
42   - def test_generate_hexkey
43   - key=EzCrypto::Digester.generate_hexkey
44   - assert 40,key.size
45   -
46   - end
47   -
48   - def test_get_key
49   -
50   - end
51   -end
52 0 \ No newline at end of file
vendor/ezcrypto-0.7.2/test/dsakey.pem
... ... @@ -1,12 +0,0 @@
1   ------BEGIN DSA PRIVATE KEY-----
2   -MIIBugIBAAKBgQCGwFYmCsY6XeXmC2vB2VwGy7N4jV0vjwTh22VAXLlMtKrjJJ0k
3   -WW/QI7wYWqttUIDQ1//ETRlW5+uV9E9WF1EtMo/Dv48LU/c1YCDjA5EAp2Wu/CnU
4   -Qgd6ibLNTvkzSDdiZhryuq3nv0s1hLR6cysMOWg/l6usiwU5jgWDXrMK2wIVAJS8
5   -gadASb6W8ZL6Ua4EqIFdYCdbAoGAWzwV5WF157O/oZeOmNv6IuV8MLD0m3JkJNkZ
6   -DrY0G0M7YIVryCkmvCOuu8PLu7M+GGp9hEKV/wrpWJgiOlWAz0C0yxwxMyz3GFbx
7   -ipqEL0CqKkl4QVMpKAhL1h2iIL+yI7p/8whcfeMnQXb0iIMD7AVvF++AJ/LAzulb
8   -zZXdfP8CgYApedgToseniE9KWVrV3CMXrkwf3Er5CgcVF2JJWAfBbm8/PI2wX5GU
9   -zT5++k+2sPISPQV3RFZiVKwdFNdft41KNNdfFPEC/4KhgHbK4nCJ3ReLiy2+MkHi
10   -msgzvxAg8WRc+0aZKNFlNyqsIezE6ufs8e9YvKZJ2d30ggOqCHTBtgIUZ6jIgX60
11   -PmOeqfRh32svQkP1p/E=
12   ------END DSA PRIVATE KEY-----
vendor/ezcrypto-0.7.2/test/dsapubkey.pem
... ... @@ -1,12 +0,0 @@
1   ------BEGIN PUBLIC KEY-----
2   -MIIBtjCCASsGByqGSM44BAEwggEeAoGBAIbAViYKxjpd5eYLa8HZXAbLs3iNXS+P
3   -BOHbZUBcuUy0quMknSRZb9AjvBhaq21QgNDX/8RNGVbn65X0T1YXUS0yj8O/jwtT
4   -9zVgIOMDkQCnZa78KdRCB3qJss1O+TNIN2JmGvK6ree/SzWEtHpzKww5aD+Xq6yL
5   -BTmOBYNeswrbAhUAlLyBp0BJvpbxkvpRrgSogV1gJ1sCgYBbPBXlYXXns7+hl46Y
6   -2/oi5XwwsPSbcmQk2RkOtjQbQztghWvIKSa8I667w8u7sz4Yan2EQpX/CulYmCI6
7   -VYDPQLTLHDEzLPcYVvGKmoQvQKoqSXhBUykoCEvWHaIgv7Ijun/zCFx94ydBdvSI
8   -gwPsBW8X74An8sDO6VvNld18/wOBhAACgYApedgToseniE9KWVrV3CMXrkwf3Er5
9   -CgcVF2JJWAfBbm8/PI2wX5GUzT5++k+2sPISPQV3RFZiVKwdFNdft41KNNdfFPEC
10   -/4KhgHbK4nCJ3ReLiy2+MkHimsgzvxAg8WRc+0aZKNFlNyqsIezE6ufs8e9YvKZJ
11   -2d30ggOqCHTBtg==
12   ------END PUBLIC KEY-----
vendor/ezcrypto-0.7.2/test/dsig_test.rb
... ... @@ -1,288 +0,0 @@
1   -$:.unshift(File.dirname(__FILE__) + "/../lib/")
2   -
3   -require 'test/unit'
4   -require 'fileutils'
5   -require 'ezsig'
6   -require 'base64'
7   -
8   -class EzCryptoTest < Test::Unit::TestCase
9   -
10   - def setup
11   - end
12   -
13   - def _test_generate_key #very slow so not run by default
14   - signer=EzCrypto::Signer.generate
15   - assert signer.rsa?
16   - assert !signer.dsa?
17   -
18   - assert_signer(signer)
19   - end
20   -
21   - def test_from_file
22   - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem"
23   - assert signer.rsa?
24   - assert !signer.dsa?
25   - assert_signer(signer)
26   - end
27   -
28   - def test_dsa_from_file
29   - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/dsakey.pem"
30   - assert signer.dsa?
31   - assert !signer.rsa?
32   - assert_signer(signer)
33   - end
34   -
35   - def test_from_password_protected_file
36   - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/protectedsigner.pem","secret"
37   - assert signer.rsa?
38   - assert !signer.dsa?
39   - assert_signer(signer)
40   - end
41   -
42   - def test_public_key_read
43   - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem"
44   - verifier=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testpub.pem"
45   - assert verifier
46   - sig=signer.sign "test this rsa"
47   - assert sig
48   - assert verifier.verify( sig,"test this rsa")
49   -
50   - assert !verifier.cert?
51   - assert_equal signer.public_key.to_s, verifier.public_key.to_s
52   - end
53   -
54   - def test_dsa_public_key_read
55   - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/dsakey.pem"
56   - verifier=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/dsapubkey.pem"
57   -
58   - assert verifier
59   - sig=signer.sign "test this dsa"
60   - assert sig
61   - assert verifier.verify( sig,"test this dsa")
62   -
63   - assert !verifier.cert?
64   -
65   - # This fails as it seems like it returns an incorrect public key
66   -# assert_equal signer.public_key.to_s, verifier.public_key.to_s
67   - end
68   -
69   - def test_certificate_reader
70   - signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem"
71   - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
72   - assert cert
73   - assert cert.cert?
74   - assert_instance_of EzCrypto::Certificate, cert
75   - assert_equal signer.public_key.to_s, cert.public_key.to_s
76   -
77   - sig=signer.sign "hello"
78   - assert sig
79   - assert cert.verify( sig,"hello")
80   -
81   - assert_equal "/C=DK/ST=Denmark/L=Copenhagen/O=EzCrypto Test Certificate/OU=testing/CN=EzCrypto Testing/emailAddress=pelleb@gmail.com",cert.subject.to_s
82   - assert_equal "/C=DK/ST=Denmark/L=Copenhagen/O=EzCrypto Test Certificate/OU=testing/CN=EzCrypto Testing/emailAddress=pelleb@gmail.com",cert.issuer.to_s
83   -
84   - assert_kind_of EzCrypto::Name,cert.issuer
85   - assert_kind_of EzCrypto::Name,cert.subject
86   - assert cert.serial
87   - assert cert.not_after
88   - assert cert.not_before
89   - assert cert.valid?
90   -
91   -
92   - assert_equal cert.subject[:emailAddress],"pelleb@gmail.com"
93   - assert_equal cert.subject[:C],"DK"
94   - assert_equal cert.subject[:ST],"Denmark"
95   - assert_equal cert.subject[:L],"Copenhagen"
96   - assert_equal cert.subject[:OU],"testing"
97   - assert_equal cert.subject[:O],"EzCrypto Test Certificate"
98   - assert_equal cert.subject[:CN],"EzCrypto Testing"
99   -
100   - assert_equal cert.subject.emailAddress,"pelleb@gmail.com"
101   - assert_equal cert.subject.C,"DK"
102   - assert_equal cert.subject.ST,"Denmark"
103   - assert_equal cert.subject.L,"Copenhagen"
104   - assert_equal cert.subject.OU,"testing"
105   - assert_equal cert.subject.O,"EzCrypto Test Certificate"
106   - assert_equal cert.subject.CN,"EzCrypto Testing"
107   -
108   - assert_equal cert.subject.email,"pelleb@gmail.com"
109   - assert_equal cert.subject.c,"DK"
110   - assert_equal cert.subject.st,"Denmark"
111   - assert_equal cert.subject.l,"Copenhagen"
112   - assert_equal cert.subject.ou,"testing"
113   - assert_equal cert.subject.o,"EzCrypto Test Certificate"
114   - assert_equal cert.subject.cn,"EzCrypto Testing"
115   -
116   - assert_equal cert.subject.country,"DK"
117   - assert_equal cert.subject.state,"Denmark"
118   - assert_equal cert.subject.locality,"Copenhagen"
119   - assert_equal cert.subject.organisational_unit,"testing"
120   - assert_equal cert.subject.organisation,"EzCrypto Test Certificate"
121   - assert_equal cert.subject.organizational_unit,"testing"
122   - assert_equal cert.subject.organization,"EzCrypto Test Certificate"
123   - assert_equal cert.subject.name,"EzCrypto Testing"
124   - assert_equal cert.subject.common_name,"EzCrypto Testing"
125   -
126   - assert_equal cert.emailAddress,"pelleb@gmail.com"
127   - assert_equal cert.C,"DK"
128   - assert_equal cert.ST,"Denmark"
129   - assert_equal cert.L,"Copenhagen"
130   - assert_equal cert.OU,"testing"
131   - assert_equal cert.O,"EzCrypto Test Certificate"
132   - assert_equal cert.CN,"EzCrypto Testing"
133   -
134   - assert_equal cert.email,"pelleb@gmail.com"
135   - assert_equal cert.c,"DK"
136   - assert_equal cert.st,"Denmark"
137   - assert_equal cert.l,"Copenhagen"
138   - assert_equal cert.ou,"testing"
139   - assert_equal cert.o,"EzCrypto Test Certificate"
140   - assert_equal cert.cn,"EzCrypto Testing"
141   -
142   - assert_equal cert.country,"DK"
143   - assert_equal cert.state,"Denmark"
144   - assert_equal cert.locality,"Copenhagen"
145   - assert_equal cert.organisational_unit,"testing"
146   - assert_equal cert.organisation,"EzCrypto Test Certificate"
147   - assert_equal cert.organizational_unit,"testing"
148   - assert_equal cert.organization,"EzCrypto Test Certificate"
149   - assert_equal cert.name,"EzCrypto Testing"
150   - assert_equal cert.common_name,"EzCrypto Testing"
151   -
152   - assert_equal cert.issuer[:emailAddress],"pelleb@gmail.com"
153   - assert_equal cert.issuer[:C],"DK"
154   - assert_equal cert.issuer[:ST],"Denmark"
155   - assert_equal cert.issuer[:L],"Copenhagen"
156   - assert_equal cert.issuer[:OU],"testing"
157   - assert_equal cert.issuer[:O],"EzCrypto Test Certificate"
158   - assert_equal cert.issuer[:CN],"EzCrypto Testing"
159   -
160   - assert_equal cert.issuer.emailAddress,"pelleb@gmail.com"
161   - assert_equal cert.issuer.C,"DK"
162   - assert_equal cert.issuer.ST,"Denmark"
163   - assert_equal cert.issuer.L,"Copenhagen"
164   - assert_equal cert.issuer.OU,"testing"
165   - assert_equal cert.issuer.O,"EzCrypto Test Certificate"
166   - assert_equal cert.issuer.CN,"EzCrypto Testing"
167   -
168   - assert_equal cert.issuer.email,"pelleb@gmail.com"
169   - assert_equal cert.issuer.c,"DK"
170   - assert_equal cert.issuer.st,"Denmark"
171   - assert_equal cert.issuer.l,"Copenhagen"
172   - assert_equal cert.issuer.ou,"testing"
173   - assert_equal cert.issuer.o,"EzCrypto Test Certificate"
174   - assert_equal cert.issuer.cn,"EzCrypto Testing"
175   - assert_equal cert.issuer.country,"DK"
176   - assert_equal cert.issuer.state,"Denmark"
177   - assert_equal cert.issuer.locality,"Copenhagen"
178   - assert_equal cert.issuer.organisational_unit,"testing"
179   - assert_equal cert.issuer.organisation,"EzCrypto Test Certificate"
180   - assert_equal cert.issuer.organizational_unit,"testing"
181   - assert_equal cert.issuer.organization,"EzCrypto Test Certificate"
182   - assert_equal cert.issuer.name,"EzCrypto Testing"
183   - assert_equal cert.issuer.common_name,"EzCrypto Testing"
184   -
185   - ## Extensions
186   -
187   - assert cert.extensions
188   -
189   - end
190   -
191   - def test_in_memory_store
192   - trust=EzCrypto::TrustStore.new
193   - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
194   - assert !trust.verify(cert)
195   - trust.add cert
196   - assert trust.verify(cert)
197   -
198   - sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt"
199   - assert !trust.verify(sf_root)
200   - starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt"
201   - assert !trust.verify(starfield)
202   - agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
203   - assert !trust.verify(agree2)
204   -
205   - trust.add sf_root
206   - assert trust.verify(sf_root)
207   - assert trust.verify(starfield)
208   - assert !trust.verify(agree2)
209   -
210   - trust.add starfield
211   - assert trust.verify(agree2)
212   - end
213   -
214   - def test_disk_store
215   - trust=EzCrypto::TrustStore.new File.dirname(__FILE__) + "/store"
216   - sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt"
217   - trust.add(sf_root)
218   - assert trust.verify(sf_root)
219   - starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt"
220   - assert trust.verify(starfield)
221   - trust.add(starfield)
222   - agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
223   - assert trust.verify(agree2)
224   -
225   - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
226   - assert !trust.verify(cert)
227   - trust.add cert
228   - assert trust.verify(cert)
229   - end
230   -
231   - def test_load_combined
232   - certs=EzCrypto::Verifier.load_all_from_file File.dirname(__FILE__) + "/../lib/trusted.pem"
233   - assert certs.is_a?( Array)
234   - assert certs.size>1
235   - certs.each do |cert|
236   - assert_instance_of EzCrypto::Certificate, cert
237   - end
238   - end
239   -
240   - def test_load_trusted_truststore
241   - trust=EzCrypto::TrustStore.default_trusted
242   - sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt"
243   - assert trust.verify(sf_root)
244   - starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt"
245   - assert trust.verify(starfield)
246   - agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
247   - assert trust.verify(agree2)
248   -
249   - cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
250   - assert !trust.verify(cert)
251   - trust.add cert
252   - assert trust.verify(cert)
253   - end
254   -
255   -# Disabling these until pkyp is back up
256   -# def test_public_key_load_from_pkyp
257   -# verifier=EzCrypto::Verifier.from_pkyp "e93e18114cbefaaa89fda908b09df63d3662879a"
258   -# agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
259   -# assert_equal agree2.cert.to_s,verifier.cert.to_s
260   -# assert verifier
261   -# end
262   -#
263   -# def test_register_public_key_at_pkyp
264   -# pub=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
265   -# assert_equal pub.digest,pub.register_with_pkyp
266   -# end
267   -#
268   -# def test_create_register_and_fetch_public_key
269   -# signer=EzCrypto::Signer.generate
270   -# assert_equal signer.verifier.digest,signer.verifier.register_with_pkyp
271   -# verifier=EzCrypto::Verifier.from_pkyp signer.verifier.digest
272   -# sig=signer.sign "hello"
273   -# assert sig
274   -# assert verifier.verify( sig,"hello")
275   -# end
276   -#
277   -
278   - def assert_signer(signer)
279   - assert signer
280   - assert signer.public_key
281   -
282   - sig=signer.sign "hello"
283   - assert sig
284   - assert signer.verifier
285   - assert signer.verifier.verify( sig,"hello")
286   - end
287   -
288   -end
289 0 \ No newline at end of file
vendor/ezcrypto-0.7.2/test/encrypt_test.rb
... ... @@ -1,41 +0,0 @@
1   -require 'association_key_holder_test'
2   -
3   -class EncUser < ActiveRecord::Base
4   - set_table_name "users"
5   - encrypt :name, :base64=>true
6   -end
7   -
8   -class RawUser < ActiveRecord::Base
9   - set_table_name "users"
10   -end
11   -
12   -class EncryptTest < AssociationKeyHolderTest
13   - def setup
14   - @key_holder=EncUser.create
15   - end
16   -
17   - def test_should_be_base64
18   - assert EncUser.ezcrypto_base64?
19   - end
20   -
21   - def test_should_retain_session_key_on_reload
22   - key=EzCrypto::Key.generate
23   - key_holder.set_session_key key
24   - assert_not_nil key_holder.session_key
25   - assert_equal key.raw,key_holder.session_key.raw
26   -
27   - key_holder.name="bob"
28   - key_holder.save
29   -
30   - assert_equal "bob",key_holder.name
31   -
32   - found=EncUser.find key_holder.id
33   - assert_equal key_holder.name,found.name
34   -
35   - raw=RawUser.find key_holder.id
36   - assert_not_nil raw.name
37   - assert_not_equal key_holder.name,raw.name
38   -
39   - end
40   -
41   -end
vendor/ezcrypto-0.7.2/test/ezcrypto_test.rb
... ... @@ -1,212 +0,0 @@
1   -$:.unshift(File.dirname(__FILE__) + "/../lib/")
2   -
3   -require 'test/unit'
4   -require 'fileutils'
5   -require 'ezcrypto'
6   -require 'base64'
7   -
8   -class EzCryptoTest < Test::Unit::TestCase
9   -
10   - def setup
11   - end
12   -
13   - def test_generate_alg_key
14   - assert_generate_alg_key "aes-128-cbc",16
15   - assert_generate_alg_key "aes-192-cbc",24
16   - assert_generate_alg_key "aes-256-cbc",32
17   - assert_generate_alg_key "rc2-40-cbc",5
18   - assert_generate_alg_key "rc2-64-cbc",8
19   - assert_generate_alg_key "rc4-64" ,8
20   - assert_generate_alg_key "blowfish" ,16
21   - assert_generate_alg_key "des" ,8
22   - end
23   -
24   - def test_with_password
25   - assert_with_password "","secret","aes-128-cbc",16
26   - assert_with_password "test","secret","aes-128-cbc",16
27   - assert_with_password "password","secret","aes-128-cbc",16
28   - assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-128-cbc",16
29   -
30   - assert_with_password "","secret","aes-192-cbc",24
31   - assert_with_password "test","secret","aes-192-cbc",24
32   - assert_with_password "password","secret","aes-192-cbc",24
33   - assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-192-cbc",24
34   -
35   - assert_with_password "","secret","aes-256-cbc",32
36   - assert_with_password "test","secret","aes-256-cbc",32
37   - assert_with_password "password","secret","aes-256-cbc",32
38   - assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-256-cbc",32
39   -
40   - end
41   -
42   - def test_encoded
43   - 0.upto 32 do |size|
44   - assert_encoded_keys size
45   - end
46   - end
47   -
48   - def test_encrypt
49   - 0.upto(CLEAR_TEXT.size-1) do |size|
50   - assert_encrypt CLEAR_TEXT[0..size]
51   - end
52   - end
53   -
54   - def test_decrypt
55   - 0.upto(CLEAR_TEXT.size) do |size|
56   - assert_decrypt CLEAR_TEXT[0..size]
57   - end
58   - end
59   -
60   - def test_decrypt64
61   - 0.upto(CLEAR_TEXT.size) do |size|
62   - assert_decrypt64 CLEAR_TEXT[0..size]
63   - end
64   - end
65   -
66   - def test_keyfile_store_load
67   -
68   - algo, size = "aes-256-cbc", 32
69   - keyfile = 'ezcrypto-test.key'
70   -
71   - FileUtils.rm [keyfile], :force => true
72   - key = EzCrypto::Key.generate :algorithm => algo
73   - assert_file_not_exists keyfile
74   - key.store keyfile
75   - assert_file_exists keyfile
76   - assert_file_permissions keyfile, 0100400
77   -
78   - key2 = EzCrypto::Key.load(keyfile)
79   - assert_equal key.raw, key2.raw
80   -
81   - FileUtils.rm [keyfile], :force => true
82   - end
83   -
84   - def test_filestuff_with_defaults
85   -
86   - clearfile = 'lorem_ipsum.txt'
87   - keyfile = 'lorem_ipsum.key'
88   - algo, size = "aes-256-cbc", 32
89   -
90   - File.open(clearfile, 'w') { |f| f.write(CLEAR_TEXT) }
91   - assert_file_contains clearfile, CLEAR_TEXT
92   -
93   - key = EzCrypto::Key.generate :algorithm => algo
94   -
95   - # default behaviour: remove clearfile, append '.ez' suffix
96   - cryptfile = key.encrypt_file(clearfile)
97   - assert_equal cryptfile, clearfile + ".ez"
98   - assert_file_not_exists clearfile
99   - assert_file_exists cryptfile
100   - assert_file_contains cryptfile, key.encrypt(CLEAR_TEXT)
101   -
102   - # default behaviour: unlink cryptfile and remove suffix from filename
103   - clearfile = key.decrypt_file cryptfile
104   - assert_file_exists clearfile
105   - assert_file_not_exists cryptfile
106   - assert_file_contains clearfile, CLEAR_TEXT
107   - FileUtils.rm [keyfile, clearfile, cryptfile], :force => true
108   - end
109   -
110   - def test_filestuff_with_options
111   -
112   - clearfile = 'lorem_ipsum.txt'
113   - keyfile = 'lorem_ipsum.key'
114   - algo, size = "aes-256-cbc", 32
115   -
116   - File.open(clearfile, 'w') { |f| f.write(CLEAR_TEXT) }
117   - assert_file_contains clearfile, CLEAR_TEXT
118   -
119   - key = EzCrypto::Key.generate :algorithm => algo
120   -
121   - # with options: keep the original file, auto-create a
122   - # new filename with a user-defined suffix
123   - cryptfile = key.encrypt_file(clearfile, nil, :autoclean => false, :suffix => '.Encrypted')
124   - assert_equal cryptfile, clearfile + ".Encrypted", 'suffix was added'
125   - assert_file_exists clearfile
126   - assert_file_exists cryptfile
127   - assert_file_permissions cryptfile, 0100600
128   -
129   - assert_raises(Errno::EEXIST, "the original file would not be overwritten") {
130   - key.decrypt_file(cryptfile, nil, :autoclean => false, :suffix => '.Encrypted')
131   - }
132   - FileUtils.rm [clearfile], :force => true
133   -
134   - clearfile = key.decrypt_file(cryptfile, nil, :autoclean => false, :suffix => '.Encrypted')
135   - assert_equal cryptfile, clearfile + ".Encrypted", 'suffix was removed'
136   - assert_file_exists clearfile
137   - assert_file_exists cryptfile
138   - assert_file_permissions cryptfile, 0100600
139   - assert_file_contains clearfile, CLEAR_TEXT
140   -
141   - FileUtils.rm [keyfile, clearfile, cryptfile], :force => true
142   - end
143   -
144   - def assert_file_permissions(filename, mode, msg='')
145   - fmode = File.stat(filename).mode
146   - assert_equal fmode, mode, msg
147   - end
148   -
149   - def assert_file_exists(filename)
150   - assert File.exists?(filename)
151   - end
152   -
153   - def assert_file_not_exists(filename)
154   - assert !File.exists?(filename)
155   - end
156   -
157   - def assert_file_contains(filename, expected)
158   - assert_file_exists(filename)
159   - content = File.open(filename,'r').read
160   - assert_equal expected, content
161   - end
162   -
163   - def assert_key_size(size,key)
164   - assert_equal size,key.raw.size
165   - end
166   -
167   - def assert_generate_alg_key(algorithm,size)
168   - key=EzCrypto::Key.generate :algorithm=>algorithm
169   - assert_key_size size,key
170   - end
171   -
172   - def assert_with_password(password,salt,algorithm,size)
173   - key=EzCrypto::Key.with_password password,salt,:algorithm=>algorithm
174   - assert_key_size size,key
175   - assert_equal key.raw,EzCrypto::Key.with_password( password,salt,:algorithm=>algorithm).raw
176   - end
177   -
178   - def assert_encoded_keys(size)
179   - key=EzCrypto::Key.generate size
180   - key2=EzCrypto::Key.decode(key.encode)
181   - assert_equal key.raw, key2.raw
182   - end
183   -
184   - def assert_encrypt(clear)
185   - ALGORITHMS.each do |alg|
186   - key=EzCrypto::Key.generate :algorithm=>alg
187   - encrypted=key.encrypt clear
188   - assert_not_nil encrypted
189   - end
190   - end
191   -
192   - def assert_decrypt(clear)
193   - ALGORITHMS.each do |alg|
194   - key=EzCrypto::Key.generate :algorithm=>alg
195   - encrypted=key.encrypt clear
196   - assert_not_nil encrypted
197   - assert_equal clear,key.decrypt(encrypted)
198   - end
199   - end
200   -
201   - def assert_decrypt64(clear)
202   - key=EzCrypto::Key.generate
203   - encrypted=key.encrypt64 clear
204   - assert_not_nil encrypted
205   - assert_equal clear,key.decrypt64(encrypted)
206   - end
207   -
208   - ALGORITHMS=["aes128","bf","blowfish","des","des3","rc4","rc2"]
209   - CLEAR_TEXT="Lorem ipsum dolor sit amet, suspendisse id interdum mus leo id. Sapien tempus consequat nullam, platea vitae sociis sed elementum et fermentum, vel praesent eget. Sed blandit augue, molestie mus sed habitant, semper voluptatibus neque, nullam a augue. Aptent imperdiet curabitur, quam quis laoreet. Dolor magna. Quis vestibulum amet eu arcu fringilla nibh, mi urna sunt dictumst nulla, elit quisque purus eros, sem hendrerit. Vulputate tortor rhoncus ac nonummy tortor nulla. Nunc id nunc luctus ligula."
210   -end
211   -
212   -
vendor/ezcrypto-0.7.2/test/key_holder_test.rb
... ... @@ -1,44 +0,0 @@
1   -$:.unshift(File.dirname(__FILE__) + "/../lib/")
2   -require File.join(File.dirname(__FILE__), 'test_helper')
3   -require 'test/unit'
4   -require 'active_crypto'
5   -class KeyHolderSubject
6   - include ActiveCrypto::KeyHolder
7   -end
8   -
9   -class KeyHolderTest < Test::Unit::TestCase
10   -
11   - attr :key_holder
12   -
13   - def setup
14   - @key_holder=KeyHolderSubject.new
15   - end
16   -
17   - def test_session_key_should_not_be_set_on_new
18   - assert_nil key_holder.session_key
19   - end
20   -
21   - def test_set_session_key_should_set_session_key
22   - key=EzCrypto::Key.generate
23   - key_holder.set_session_key key
24   - assert_not_nil key_holder.session_key
25   - assert_equal key.raw,key_holder.session_key.raw
26   - end
27   -
28   - def test_set_encoded_key_should_set_session_key
29   - key=EzCrypto::Key.generate
30   - key_holder.set_encoded_key key.encode
31   - assert_not_nil key_holder.session_key
32   - assert_equal key.raw,key_holder.session_key.raw
33   - end
34   -
35   - def test_enter_password_should_set_session_key
36   - key=EzCrypto::Key.with_password "test","onetwothree"
37   - key_holder.enter_password "test"
38   - assert_not_nil key_holder.session_key
39   - assert_equal key.raw,key_holder.session_key.raw
40   - end
41   -
42   -
43   -end
44   -
vendor/ezcrypto-0.7.2/test/protectedsigner.pem
... ... @@ -1,12 +0,0 @@
1   ------BEGIN RSA PRIVATE KEY-----
2   -Proc-Type: 4,ENCRYPTED
3   -DEK-Info: DES-EDE3-CBC,C730C2D8284C5EC8
4   -
5   -DU3RsKWpbDaiFA4DUu+5VBCbF5FQvNxQJXZ9s7qw8Odk/gTbI3WFWygaZSS1FGxr
6   -lFYz04hQB6Zm31EKqwBlvhJdEkDlpWAI1VCTOHFjfzA/fmiv1W5v0Cj7jm3KHQqo
7   -lmmDyIT9fbUKgiHBb9oCLn0N34DhbqQ4lSsGzwI9bTl+CWd593f+SFqq2SLAZ+gw
8   -wfaedG0PSjdylXMyUuLQtOe5T1F0Y+MfFmVE4CvBYlKl/qnVz3nn8iL1RkdQkvHB
9   -Z/JZEhjtu/FD0AvjCZD8frO+Le1vBxBCO+vx+tKiDeFpJTxWZM6kLBHvvFYtdvce
10   -ktQhyLLn40LiP4lj7Dq/IbqW+OWEge91ioC8uOAACTqmxLVyKPE9IiOHqoDb3gfw
11   -jCgYGLJdDhYdnD/f/8nuDJErflhKyAHh6OdbqREMRMg=
12   ------END RSA PRIVATE KEY-----
vendor/ezcrypto-0.7.2/test/sf-class2-root.crt
... ... @@ -1,24 +0,0 @@
1   ------BEGIN CERTIFICATE-----
2   -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
3   -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
4   -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
5   -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
6   -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
7   -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
8   -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
9   -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
10   -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
11   -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
12   -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
13   -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
14   -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
15   -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
16   -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
17   -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
18   -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
19   -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
20   -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
21   -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
22   -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
23   -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
24   ------END CERTIFICATE-----
vendor/ezcrypto-0.7.2/test/sf_intermediate.crt
... ... @@ -1,29 +0,0 @@
1   ------BEGIN CERTIFICATE-----
2   -MIIFBzCCA++gAwIBAgICAgEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCVVMx
3   -JTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsT
4   -KVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2
5   -MTExNjAxMTU0MFoXDTI2MTExNjAxMTU0MFowgdwxCzAJBgNVBAYTAlVTMRAwDgYD
6   -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
7   -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTkwNwYDVQQLEzBodHRwOi8vY2VydGlm
8   -aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkxMTAvBgNVBAMTKFN0
9   -YXJmaWVsZCBTZWN1cmUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxETAPBgNVBAUT
10   -CDEwNjg4NDM1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4qddo+1m
11   -72ovKzYf3Y3TBQKgyg9eGa44cs8W2lRKy0gK9KFzEWWFQ8lbFwyaK74PmFF6YCkN
12   -bN7i6OUVTVb/kNGnpgQ/YAdKym+lEOez+FyxvCsq3AF59R019Xoog/KTc4KJrGBt
13   -y8JIwh3UBkQXPKwBR6s+cIQJC7ggCEAgh6FjGso+g9I3s5iNMj83v6G3W1/eXDOS
14   -zz4HzrlIS+LwVVAv+HBCidGTlopj2WYN5lhuuW2QvcrchGbyOY5bplhVc8tibBvX
15   -IBY7LFn1y8hWMkpQJ7pV06gBy3KpdIsMrTrlFbYq32X43or174Q7+edUZQuAvUdF
16   -pfBE2FM7voDxLwIDAQABo4IBRDCCAUAwHQYDVR0OBBYEFElLUifRG7zyoSFqYntR
17   -QnqK19VWMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtVrNzXEMIOqYjnMBIGA1UdEwEB
18   -/wQIMAYBAf8CAQAwOQYIKwYBBQUHAQEELTArMCkGCCsGAQUFBzABhh1odHRwOi8v
19   -b2NzcC5zdGFyZmllbGR0ZWNoLmNvbTBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8v
20   -Y2VydGlmaWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvc2Zyb290
21   -LmNybDBRBgNVHSAESjBIMEYGBFUdIAAwPjA8BggrBgEFBQcCARYwaHR0cDovL2Nl
22   -cnRpZmljYXRlcy5zdGFyZmllbGR0ZWNoLmNvbS9yZXBvc2l0b3J5MA4GA1UdDwEB
23   -/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAhlK6sx+mXmuQpmQq/EWyrp8+s2Kv
24   -2x9nxL3KoS/HnA0hV9D4NiHOOiU+eHaz2d283vtshF8Mow0S6xE7cV+AHvEfbQ5f
25   -wezUpfdlux9MlQETsmqcC+sfnbHn7RkNvIV88xe9WWOupxoFzUfjLZZiUTIKCGhL
26   -Indf90XcYd70yysiKUQl0p8Ld3qhJnxK1w/C0Ty6DqeVmlsFChD5VV/Bl4t0zF4o
27   -aRN+0AqNnQ9gVHrEjBs1D3R6cLKCzx214orbKsayUWm/EheSYBeqPVsJ+IdlHaek
28   -KOUiAgOCRJo0Y577KM/ozS4OUiDtSss4fJ2ubnnXlSyokfOGASGRS7VApA==
29   ------END CERTIFICATE-----
30 0 \ No newline at end of file
vendor/ezcrypto-0.7.2/test/test_helper.rb
... ... @@ -1,35 +0,0 @@
1   -$:.unshift(File.dirname(__FILE__) + '/../lib')
2   -
3   -require 'test/unit'
4   -require 'rubygems'
5   -require 'action_pack'
6   -require 'active_record'
7   -#require 'active_support/binding_of_caller'
8   -#require 'active_support/breakpoint'
9   -
10   -
11   -unless defined?(Rails.root)
12   - root_path = File.join(File.dirname(__FILE__), '..')
13   - unless RUBY_PLATFORM =~ /mswin32/
14   - require 'pathname'
15   - root_path = Pathname.new(root_path).cleanpath.to_s
16   - end
17   - Rails.root = root_path
18   -end
19   -
20   -
21   -require 'active_record/fixtures'
22   -require 'initializer'
23   -
24   -Rails::Initializer.run(:set_load_path)
25   -
26   -ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
27   -ActiveRecord::Base.establish_connection(
28   - :adapter => "mysql",
29   - :host => "localhost",
30   - :username => "root",
31   - :password => "",
32   - :database => "crypto_test"
33   - )
34   -#load(File.dirname(__FILE__) + "/schema.rb")
35   -
vendor/ezcrypto-0.7.2/test/testchild.pem
... ... @@ -1,15 +0,0 @@
1   ------BEGIN RSA PRIVATE KEY-----
2   -MIICXgIBAAKBgQC6tQ2LfDcjyqlOLodJUUux+l4Gw/jkacpW6kwhfvV03QJzRaz8
3   -OrGkf+WKLPfQnCLma40aL2hpleTTd7SEiLSd3d77hySJ842rcYFlBfj0ldFyf9D3
4   -PUf1qpK/9f24C19bQwcSIDHBJOj7vlaW8rWtk0J5YOfRCTKD+tqTA400eQIDAQAB
5   -AoGBAJWqgxQYW78mOvfAFpSwRWSDVZJI0CCRqTBpGuQS+MJYVBmBdfyvNC2wlJli
6   -GLkyIEvjVTXzYNia3tahc6R2TYmL/9vQxXfoOOgbhJ0VgNofvXsU0vEcuomqDhHS
7   -ZeH1EJnM27/Yk5o2/WOY3iexRY1urjrpBMNWLiH7wizfmM9tAkEA5x0ViHInGzv5
8   -X2GB3TpJNhE2+5Kxw+keuBWsEiyBjOarJfHOPMHGBlssIIKM0k24pDOPuyhc5N6h
9   -F4XOMPdLXwJBAM7P2v0d2cVJTENi8OK7DjbBu/YBv/AHPyC5bz7cHySlUeNewWYy
10   -HXYBdSnpdVHJizMYjajjO+TQ+9BKsYHi5ycCQDm/0rmdjJgJjG6A9upIvjJ8arjC
11   -FxlVDxAAmlaQOG701J9OpLIZ2VmNPqGA/Z8vPIwLNkcV9uBZoPc3wCYMJRECQQDJ
12   -1rBaIjz8P4oPpkuEbJz1seRYtuJ1Rw1ESdYZmklGwZYG+t5zd+uq1MddTTyzwqh5
13   -CLiQoJ0+tvtcENnm8uU3AkEA2EIbaxJaadxUO71+banckjCFmv8H2fKAA391ev1/
14   -HTI088ych8V3sIUIAELhEo2K83fticAGgIdf7nPhDVgdpQ==
15   ------END RSA PRIVATE KEY-----
vendor/ezcrypto-0.7.2/test/testchild.req
... ... @@ -1,12 +0,0 @@
1   ------BEGIN CERTIFICATE REQUEST-----
2   -MIIBujCCASMCAQAwejELMAkGA1UEBhMCREsxEDAOBgNVBAgTB0Rlbm1hcmsxEzAR
3   -BgNVBAcTCkNvcGVuaGFnZW4xETAPBgNVBAoTCEV6Q3J5cHRvMRAwDgYDVQQLEwdU
4   -ZXN0aW5nMR8wHQYDVQQDExZUZXN0IENoaWxkIENlcnRpZmljYXRlMIGfMA0GCSqG
5   -SIb3DQEBAQUAA4GNADCBiQKBgQC6tQ2LfDcjyqlOLodJUUux+l4Gw/jkacpW6kwh
6   -fvV03QJzRaz8OrGkf+WKLPfQnCLma40aL2hpleTTd7SEiLSd3d77hySJ842rcYFl
7   -Bfj0ldFyf9D3PUf1qpK/9f24C19bQwcSIDHBJOj7vlaW8rWtk0J5YOfRCTKD+tqT
8   -A400eQIDAQABoAAwDQYJKoZIhvcNAQEFBQADgYEAYKpGkiS4mXsD9SWtS0bvaMG8
9   -4UzHnZmhL4B6x3f45r5guy4c7/xIJUkxixFr/oAkOF86MGiFxNY4sZjBnrckWNzD
10   -CWirSMYmrc1XQwA3C9Nu5LYqUzJ6bVlXh1ySzXJo08+9JJb1vklBh5QMl/KvGsee
11   -RFW1LcQJ7XdwRxPyUlo=
12   ------END CERTIFICATE REQUEST-----
vendor/ezcrypto-0.7.2/test/testpub.pem
... ... @@ -1,4 +0,0 @@
1   ------BEGIN PUBLIC KEY-----
2   -MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMGB7PmHYNEUqzxptHfNDTzLxLRa7iIj
3   -7aEKOn+ozqLUDCFo5UTS5SkZTdUv/FCYXANfzSZgDZLGLZB8ZHJuCkECAwEAAQ==
4   ------END PUBLIC KEY-----
5 0 \ No newline at end of file
vendor/ezcrypto-0.7.2/test/testsigner.cert
... ... @@ -1,20 +0,0 @@
1   ------BEGIN CERTIFICATE-----
2   -MIIDWDCCAwKgAwIBAgIJAKV7PmO5YH5XMA0GCSqGSIb3DQEBBQUAMIGmMQswCQYD
3   -VQQGEwJESzEQMA4GA1UECBMHRGVubWFyazETMBEGA1UEBxMKQ29wZW5oYWdlbjEi
4   -MCAGA1UEChMZRXpDcnlwdG8gVGVzdCBDZXJ0aWZpY2F0ZTEQMA4GA1UECxMHdGVz
5   -dGluZzEZMBcGA1UEAxMQRXpDcnlwdG8gVGVzdGluZzEfMB0GCSqGSIb3DQEJARYQ
6   -cGVsbGViQGdtYWlsLmNvbTAeFw0wOTAzMTAxNjUwMjVaFw0xOTAzMDgxNjUwMjVa
7   -MIGmMQswCQYDVQQGEwJESzEQMA4GA1UECBMHRGVubWFyazETMBEGA1UEBxMKQ29w
8   -ZW5oYWdlbjEiMCAGA1UEChMZRXpDcnlwdG8gVGVzdCBDZXJ0aWZpY2F0ZTEQMA4G
9   -A1UECxMHdGVzdGluZzEZMBcGA1UEAxMQRXpDcnlwdG8gVGVzdGluZzEfMB0GCSqG
10   -SIb3DQEJARYQcGVsbGViQGdtYWlsLmNvbTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
11   -QQDBgez5h2DRFKs8abR3zQ08y8S0Wu4iI+2hCjp/qM6i1AwhaOVE0uUpGU3VL/xQ
12   -mFwDX80mYA2Sxi2QfGRybgpBAgMBAAGjggEPMIIBCzAdBgNVHQ4EFgQUNdcj4z5p
13   -YRKfpdfN+Y+EeklG7n0wgdsGA1UdIwSB0zCB0IAUNdcj4z5pYRKfpdfN+Y+EeklG
14   -7n2hgaykgakwgaYxCzAJBgNVBAYTAkRLMRAwDgYDVQQIEwdEZW5tYXJrMRMwEQYD
15   -VQQHEwpDb3BlbmhhZ2VuMSIwIAYDVQQKExlFekNyeXB0byBUZXN0IENlcnRpZmlj
16   -YXRlMRAwDgYDVQQLEwd0ZXN0aW5nMRkwFwYDVQQDExBFekNyeXB0byBUZXN0aW5n
17   -MR8wHQYJKoZIhvcNAQkBFhBwZWxsZWJAZ21haWwuY29tggkApXs+Y7lgflcwDAYD
18   -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAGF11JQ6+PaaklljorNsSMsvikM4
19   -xD8CiqYnM/TueQR6N5eWHL5L7tElfM2SxecwBtwiHpCzhPoXXBfRjCzj3Dg=
20   ------END CERTIFICATE-----
vendor/ezcrypto-0.7.2/test/testsigner.pem
... ... @@ -1,9 +0,0 @@
1   ------BEGIN RSA PRIVATE KEY-----
2   -MIIBOgIBAAJBAMGB7PmHYNEUqzxptHfNDTzLxLRa7iIj7aEKOn+ozqLUDCFo5UTS
3   -5SkZTdUv/FCYXANfzSZgDZLGLZB8ZHJuCkECAwEAAQJBAK9EHb54xtE49ku2tjWY
4   -LPg228g7X9reTdoBqLB91gMVlXwNAVyHMTHakhIC73K3qq9k4H1D59w1wjzx4nXJ
5   -/v0CIQD1R0vhhdlY2GqC+1EFCm+rPjamixcszDF2XSNp4WcwXwIhAMn3Td4aIpf6
6   -A9O4SIbisZaOm0DlfO2O5GMkaF+eqElfAiBHcjcmQCjpelC8Spx1DW8twHeG16ku
7   -gWQ/CC5SnzfBnQIgIvo3fB2enB9qhkJGHUYpZ1+vN6AG8MVsfFcT1GuPzZUCIEbx
8   -VUGyBYwuUfvCG88KM0NznR8xFtWD4WQ8SQejX5AN
9   ------END RSA PRIVATE KEY-----
vendor/ezcrypto-0.7.2/test/valicert_class2_root.crt
... ... @@ -1,18 +0,0 @@
1   ------BEGIN CERTIFICATE-----
2   -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
3   -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
4   -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
5   -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
6   -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
7   -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
8   -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
9   -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
10   -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
11   -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
12   -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
13   -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
14   -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
15   -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
16   -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
17   -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
18   ------END CERTIFICATE-----