From ed831549458c73015d3ef10613fc1ef3308ee99f Mon Sep 17 00:00:00 2001 From: tdreyno Date: Tue, 17 Nov 2009 11:13:32 -0800 Subject: [PATCH] add smusher dep --- .gitignore | 1 + Gemfile | 1 + Rakefile | 1 + lib/middleman/template/init.rbt | 6 +- vendor/gems/cache/httpclient-2.1.5.2.gem | Bin 0 -> 147456 bytes vendor/gems/cache/smusher-0.4.2.gem | Bin 0 -> 21504 bytes vendor/gems/environment.rb | 98 +- .../httpclient-2.1.5.2/lib/http-access2.rb | 53 + .../lib/http-access2/cookie.rb | 1 + .../lib/http-access2/http.rb | 1 + .../gems/httpclient-2.1.5.2/lib/httpclient.rb | 1020 +++++++++++ .../httpclient-2.1.5.2/lib/httpclient/auth.rb | 522 ++++++ .../lib/httpclient/cacert.p7s | 1579 +++++++++++++++++ .../lib/httpclient/cacert_sha1.p7s | 1579 +++++++++++++++++ .../lib/httpclient/connection.rb | 84 + .../lib/httpclient/cookie.rb | 562 ++++++ .../httpclient-2.1.5.2/lib/httpclient/http.rb | 867 +++++++++ .../lib/httpclient/session.rb | 863 +++++++++ .../lib/httpclient/ssl_config.rb | 417 +++++ .../lib/httpclient/timeout.rb | 136 ++ .../httpclient-2.1.5.2/lib/httpclient/util.rb | 86 + vendor/gems/gems/httpclient-2.1.5.2/lib/tags | 908 ++++++++++ vendor/gems/gems/smusher-0.4.2/.gitignore | 2 + .../gems/gems/smusher-0.4.2/README.markdown | 73 + vendor/gems/gems/smusher-0.4.2/Rakefile | 31 + vendor/gems/gems/smusher-0.4.2/VERSION | 1 + vendor/gems/gems/smusher-0.4.2/bin/smusher | 39 + vendor/gems/gems/smusher-0.4.2/lib/smusher.rb | 97 + .../smusher-0.4.2/lib/smusher/puny_png.rb | 17 + .../smusher-0.4.2/lib/smusher/smush_it.rb | 22 + .../gems/gems/smusher-0.4.2/smusher.gemspec | 79 + .../gems/smusher-0.4.2/spec/empty/.gitignore | 0 .../gems/smusher-0.4.2/spec/images/ad.gif | Bin 0 -> 371 bytes .../gems/smusher-0.4.2/spec/images/add.png | Bin 0 -> 733 bytes .../smusher-0.4.2/spec/images/drink_empty.png | Bin 0 -> 433 bytes .../gems/smusher-0.4.2/spec/images/logo.gif | Bin 0 -> 945 bytes .../gems/smusher-0.4.2/spec/images/people.jpg | Bin 0 -> 2458 bytes .../gems/smusher-0.4.2/spec/images/water.JPG | Bin 0 -> 4719 bytes .../gems/smusher-0.4.2/spec/images/woman.jpeg | Bin 0 -> 2572 bytes .../gems/gems/smusher-0.4.2/spec/out/ad.gif | Bin 0 -> 371 bytes .../gems/smusher-0.4.2/spec/out/people.jpg | Bin 0 -> 2458 bytes .../gems/smusher-0.4.2/spec/reduced/add.png | Bin 0 -> 680 bytes .../smusher-0.4.2/spec/reduced/add_puny.png | Bin 0 -> 733 bytes .../gems/smusher-0.4.2/spec/reduced/fam.png | Bin 0 -> 381 bytes .../spec/smusher/puny_png_spec.rb | 12 + .../spec/smusher/smush_it_spec.rb | 12 + .../gems/smusher-0.4.2/spec/smusher_spec.rb | 181 ++ .../gems/smusher-0.4.2/spec/spec_helper.rb | 8 + .../specifications/httpclient-2.1.5.2.gemspec | 26 + .../gems/specifications/smusher-0.4.2.gemspec | 41 + 50 files changed, 9376 insertions(+), 50 deletions(-) create mode 100644 vendor/gems/cache/httpclient-2.1.5.2.gem create mode 100644 vendor/gems/cache/smusher-0.4.2.gem create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/cookie.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/http.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/auth.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert.p7s create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert_sha1.p7s create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/connection.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cookie.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/http.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/session.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/ssl_config.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/timeout.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/util.rb create mode 100644 vendor/gems/gems/httpclient-2.1.5.2/lib/tags create mode 100644 vendor/gems/gems/smusher-0.4.2/.gitignore create mode 100644 vendor/gems/gems/smusher-0.4.2/README.markdown create mode 100644 vendor/gems/gems/smusher-0.4.2/Rakefile create mode 100644 vendor/gems/gems/smusher-0.4.2/VERSION create mode 100755 vendor/gems/gems/smusher-0.4.2/bin/smusher create mode 100644 vendor/gems/gems/smusher-0.4.2/lib/smusher.rb create mode 100644 vendor/gems/gems/smusher-0.4.2/lib/smusher/puny_png.rb create mode 100644 vendor/gems/gems/smusher-0.4.2/lib/smusher/smush_it.rb create mode 100644 vendor/gems/gems/smusher-0.4.2/smusher.gemspec create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/empty/.gitignore create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/images/ad.gif create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/images/add.png create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/images/drink_empty.png create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/images/logo.gif create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/images/people.jpg create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/images/water.JPG create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/images/woman.jpeg create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/out/ad.gif create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/out/people.jpg create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/reduced/add.png create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/reduced/add_puny.png create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/reduced/fam.png create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/smusher/puny_png_spec.rb create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/smusher/smush_it_spec.rb create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/smusher_spec.rb create mode 100644 vendor/gems/gems/smusher-0.4.2/spec/spec_helper.rb create mode 100644 vendor/gems/specifications/httpclient-2.1.5.2.gemspec create mode 100644 vendor/gems/specifications/smusher-0.4.2.gemspec diff --git a/.gitignore b/.gitignore index 33eed9a3..7122d122 100755 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ bin/spec bin/sprocketize bin/thin bin/tt +bin/smusher \ No newline at end of file diff --git a/Gemfile b/Gemfile index c3b8af8e..deebcaee 100755 --- a/Gemfile +++ b/Gemfile @@ -11,6 +11,7 @@ gem "rack-test" gem "yui-compressor" gem "haml" gem "compass" +gem "smusher" gem "rspec" gem "sdoc" diff --git a/Rakefile b/Rakefile index 8d4f54c5..88104e72 100644 --- a/Rakefile +++ b/Rakefile @@ -21,6 +21,7 @@ begin gem.add_dependency("sinatra-content-for") gem.add_dependency("rack-test") gem.add_dependency("yui-compressor") + gem.add_dependency("smusher") gem.add_dependency("haml", ">=2.1.0") gem.add_dependency("compass") gem.add_development_dependency("rspec") diff --git a/lib/middleman/template/init.rbt b/lib/middleman/template/init.rbt index c4939c45..efcb876f 100755 --- a/lib/middleman/template/init.rbt +++ b/lib/middleman/template/init.rbt @@ -26,9 +26,9 @@ configure :build do # Shrink/smush PNG/JPEGs on build # enable :smush_pngs + # Enable cache buster + # enable :cache_buster + # Or use a different image path # set :http_path, "/Content/images/" - - # Disable cache buster - # disable :cache_buster end \ No newline at end of file diff --git a/vendor/gems/cache/httpclient-2.1.5.2.gem b/vendor/gems/cache/httpclient-2.1.5.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..69093072848a212e76f64d8bdee1c2d680a38341 GIT binary patch literal 147456 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 Zf70vxpT7JDf&U=z9|Zn`!2cow{}=rv(Pc7(w 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. + +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + +# http-access2.rb is based on http-access.rb in http-access/0.0.4. Some part +# of code in http-access.rb was recycled in http-access2.rb. Those part is +# copyrighted by Maehashi-san. + + +require 'httpclient' + + +module HTTPAccess2 + VERSION = ::HTTPClient::VERSION + RUBY_VERSION_STRING = ::HTTPClient::RUBY_VERSION_STRING + SSLEnabled = ::HTTPClient::SSLEnabled + SSPIEnabled = ::HTTPClient::SSPIEnabled + DEBUG_SSL = true + + Util = ::HTTPClient::Util + + class Client < ::HTTPClient + class RetryableResponse < StandardError + end + end + + SSLConfig = ::HTTPClient::SSLConfig + BasicAuth = ::HTTPClient::BasicAuth + DigestAuth = ::HTTPClient::DigestAuth + NegotiateAuth = ::HTTPClient::NegotiateAuth + AuthFilterBase = ::HTTPClient::AuthFilterBase + WWWAuth = ::HTTPClient::WWWAuth + ProxyAuth = ::HTTPClient::ProxyAuth + Site = ::HTTPClient::Site + Connection = ::HTTPClient::Connection + SessionManager = ::HTTPClient::SessionManager + SSLSocketWrap = ::HTTPClient::SSLSocketWrap + DebugSocket = ::HTTPClient::DebugSocket + + class Session < ::HTTPClient::Session + class Error < StandardError + end + class InvalidState < Error + end + class BadResponse < Error + end + class KeepAliveDisconnected < Error + end + end +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/cookie.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/cookie.rb new file mode 100644 index 00000000..56f78842 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/cookie.rb @@ -0,0 +1 @@ +require 'httpclient/cookie' diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/http.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/http.rb new file mode 100644 index 00000000..fc9b23c8 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/http-access2/http.rb @@ -0,0 +1 @@ +require 'httpclient/http' diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient.rb new file mode 100644 index 00000000..e83d1d01 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient.rb @@ -0,0 +1,1020 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + + +require 'uri' +require 'stringio' +require 'digest/sha1' + +# Extra library +require 'httpclient/util' +require 'httpclient/ssl_config' +require 'httpclient/connection' +require 'httpclient/session' +require 'httpclient/http' +require 'httpclient/auth' +require 'httpclient/cookie' + + +# The HTTPClient class provides several methods for accessing Web resources +# via HTTP. +# +# HTTPClient instance is designed to be MT-safe. You can call a HTTPClient +# instance from several threads without synchronization after setting up an +# instance. +# +# clnt = HTTPClient.new +# clnt.set_cookie_store('/home/nahi/cookie.dat') +# urls.each do |url| +# Thread.new(url) do |u| +# p clnt.head(u).status +# end +# end +# +# == How to use +# +# At first, how to create your client. See initialize for more detail. +# +# 1. Create simple client. +# +# clnt = HTTPClient.new +# +# 2. Accessing resources through HTTP proxy. You can use environment +# variable 'http_proxy' or 'HTTP_PROXY' instead. +# +# clnt = HTTPClient.new('http://myproxy:8080') +# +# === How to retrieve web resources +# +# See get_content. +# +# 1. Get content of specified URL. It returns a String of whole result. +# +# puts clnt.get_content('http://dev.ctor.org/') +# +# 2. Get content as chunks of String. It yields chunks of String. +# +# clnt.get_content('http://dev.ctor.org/') do |chunk| +# puts chunk +# end +# +# === Invoking other HTTP methods +# +# See head, get, post, put, delete, options, propfind, proppatch and trace. +# It returns a HTTP::Message instance as a response. +# +# 1. Do HEAD request. +# +# res = clnt.head(uri) +# p res.header['Last-Modified'][0] +# +# 2. Do GET request with query. +# +# query = { 'keyword' => 'ruby', 'lang' => 'en' } +# res = clnt.get(uri, query) +# p res.status +# p res.contenttype +# p res.header['X-Custom'] +# puts res.content +# +# === How to POST +# +# See post. +# +# 1. Do POST a form data. +# +# body = { 'keyword' => 'ruby', 'lang' => 'en' } +# res = clnt.post(uri, body) +# +# 2. Do multipart file upload with POST. No need to set extra header by +# yourself from httpclient/2.1.4. +# +# File.open('/tmp/post_data') do |file| +# body = { 'upload' => file, 'user' => 'nahi' } +# res = clnt.post(uri, body) +# end +# +# === Accessing via SSL +# +# Ruby needs to be compiled with OpenSSL. +# +# 1. Get content of specified URL via SSL. +# Just pass an URL which starts with 'https://'. +# +# https_url = 'https://www.rsa.com' +# clnt.get_content(https_url) +# +# 2. Getting peer certificate from response. +# +# res = clnt.get(https_url) +# p res.peer_cert #=> returns OpenSSL::X509::Certificate +# +# 3. Configuring OpenSSL options. See HTTPClient::SSLConfig for more details. +# +# user_cert_file = 'cert.pem' +# user_key_file = 'privkey.pem' +# clnt.ssl_config.set_client_cert_file(user_cert_file, user_key_file) +# clnt.get_content(https_url) +# +# === Handling Cookies +# +# 1. Using volatile Cookies. Nothing to do. HTTPClient handles Cookies. +# +# clnt = HTTPClient.new +# clnt.get_content(url1) # receives Cookies. +# clnt.get_content(url2) # sends Cookies if needed. +# +# 2. Saving non volatile Cookies to a specified file. Need to set a file at +# first and invoke save method at last. +# +# clnt = HTTPClient.new +# clnt.set_cookie_store('/home/nahi/cookie.dat') +# clnt.get_content(url) +# ... +# clnt.save_cookie_store +# +# 3. Disabling Cookies. +# +# clnt = HTTPClient.new +# clnt.cookie_manager = nil +# +# === Configuring authentication credentials +# +# 1. Authentication with Web server. Supports BasicAuth, DigestAuth, and +# Negotiate/NTLM (requires ruby/ntlm module). +# +# clnt = HTTPClient.new +# domain = 'http://dev.ctor.org/http-access2/' +# user = 'user' +# password = 'user' +# clnt.set_auth(domain, user, password) +# p clnt.get_content('http://dev.ctor.org/http-access2/login').status +# +# 2. Authentication with Proxy server. Supports BasicAuth and NTLM +# (requires win32/sspi) +# +# clnt = HTTPClient.new(proxy) +# user = 'proxy' +# password = 'proxy' +# clnt.set_proxy_auth(user, password) +# p clnt.get_content(url) +# +# === Invoking HTTP methods with custom header +# +# Pass a Hash or an Array for extheader argument. +# +# extheader = { 'Accept' => '*/*' } +# clnt.get_content(uri, query, extheader) +# +# extheader = [['Accept', 'image/jpeg'], ['Accept', 'image/png']] +# clnt.get_content(uri, query, extheader) +# +# === Invoking HTTP methods asynchronously +# +# See head_async, get_async, post_async, put_async, delete_async, +# options_async, propfind_async, proppatch_async, and trace_async. +# It immediately returns a HTTPClient::Connection instance as a returning value. +# +# connection = clnt.post_async(url, body) +# print 'posting.' +# while true +# break if connection.finished? +# print '.' +# sleep 1 +# end +# puts '.' +# res = connection.pop +# p res.status +# p res.content.read # res.content is an IO for the res of async method. +# +# === Shortcut methods +# +# You can invoke get_content, get, etc. without creating HTTPClient instance. +# +# ruby -rhttpclient -e 'puts HTTPClient.get_content(ARGV.shift)' http://dev.ctor.org/ +# ruby -rhttpclient -e 'p HTTPClient.head(ARGV.shift).header["last-modified"]' http://dev.ctor.org/ +# +class HTTPClient + VERSION = '2.1.5' + RUBY_VERSION_STRING = "ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]" + /: (\S+) (\S+)/ =~ %q$Id: httpclient.rb 280 2009-06-02 15:44:28Z nahi $ + LIB_NAME = "(#{$1}/#{$2}, #{RUBY_VERSION_STRING})" + + include Util + + # Raised for indicating running environment configuration error for example + # accessing via SSL under the ruby which is not compiled with OpenSSL. + class ConfigurationError < StandardError + end + + # Raised for indicating HTTP response error. + class BadResponseError < RuntimeError + # HTTP::Message:: a response + attr_reader :res + + def initialize(msg, res = nil) # :nodoc: + super(msg) + @res = res + end + end + + # Raised for indicating a timeout error. + class TimeoutError < RuntimeError + end + + # Raised for indicating a connection timeout error. + # You can configure connection timeout via HTTPClient#connect_timeout=. + class ConnectTimeoutError < TimeoutError + end + + # Raised for indicating a request sending timeout error. + # You can configure request sending timeout via HTTPClient#send_timeout=. + class SendTimeoutError < TimeoutError + end + + # Raised for indicating a response receiving timeout error. + # You can configure response receiving timeout via + # HTTPClient#receive_timeout=. + class ReceiveTimeoutError < TimeoutError + end + + # Deprecated. just for backward compatibility + class Session + BadResponse = ::HTTPClient::BadResponseError + end + + class << self + %w(get_content post_content head get post put delete options propfind proppatch trace).each do |name| + eval <<-EOD + def #{name}(*arg, &block) + clnt = new + begin + clnt.#{name}(*arg, &block) + ensure + clnt.reset_all + end + end + EOD + end + + private + + def attr_proxy(symbol, assignable = false) + name = symbol.to_s + define_method(name) { + @session_manager.__send__(name) + } + if assignable + aname = name + '=' + define_method(aname) { |rhs| + reset_all + @session_manager.__send__(aname, rhs) + } + end + end + end + + # HTTPClient::SSLConfig:: SSL configurator. + attr_reader :ssl_config + # WebAgent::CookieManager:: Cookies configurator. + attr_accessor :cookie_manager + # An array of response HTTP message body String which is used for loop-back + # test. See test/* to see how to use it. If you want to do loop-back test + # of HTTP header, use test_loopback_http_response instead. + attr_reader :test_loopback_response + # An array of request filter which can trap HTTP request/response. + # See HTTPClient::WWWAuth to see how to use it. + attr_reader :request_filter + # HTTPClient::ProxyAuth:: Proxy authentication handler. + attr_reader :proxy_auth + # HTTPClient::WWWAuth:: WWW authentication handler. + attr_reader :www_auth + # How many times get_content and post_content follows HTTP redirect. + # 10 by default. + attr_accessor :follow_redirect_count + + # Set HTTP version as a String:: 'HTTP/1.0' or 'HTTP/1.1' + attr_proxy(:protocol_version, true) + # Connect timeout in sec. + attr_proxy(:connect_timeout, true) + # Request sending timeout in sec. + attr_proxy(:send_timeout, true) + # Response receiving timeout in sec. + attr_proxy(:receive_timeout, true) + # Negotiation retry count for authentication. 5 by default. + attr_proxy(:protocol_retry_count, true) + # if your ruby is older than 2005-09-06, do not set socket_sync = false to + # avoid an SSL socket blocking bug in openssl/buffering.rb. + attr_proxy(:socket_sync, true) + # User-Agent header in HTTP request. + attr_proxy(:agent_name, true) + # From header in HTTP request. + attr_proxy(:from, true) + # An array of response HTTP String (not a HTTP message body) which is used + # for loopback test. See test/* to see how to use it. + attr_proxy(:test_loopback_http_response) + + # Default extheader for PROPFIND request. + PROPFIND_DEFAULT_EXTHEADER = { 'Depth' => '0' } + + # Creates a HTTPClient instance which manages sessions, cookies, etc. + # + # HTTPClient.new takes 3 optional arguments for proxy url string, + # User-Agent String and From header String. User-Agent and From are embedded + # in HTTP request Header if given. No User-Agent and From header added + # without setting it explicitly. + # + # proxy = 'http://myproxy:8080' + # agent_name = 'MyAgent/0.1' + # from = 'from@example.com' + # HTTPClient.new(proxy, agent_name, from) + # + # You can use a keyword argument style Hash. Keys are :proxy, :agent_name + # and :from. + # + # HTTPClient.new(:agent_name = 'MyAgent/0.1') + def initialize(*args) + proxy, agent_name, from = keyword_argument(args, :proxy, :agent_name, :from) + @proxy = nil # assigned later. + @no_proxy = nil + @www_auth = WWWAuth.new + @proxy_auth = ProxyAuth.new + @request_filter = [@proxy_auth, @www_auth] + @debug_dev = nil + @redirect_uri_callback = method(:default_redirect_uri_callback) + @test_loopback_response = [] + @session_manager = SessionManager.new(self) + @session_manager.agent_name = agent_name + @session_manager.from = from + @session_manager.ssl_config = @ssl_config = SSLConfig.new(self) + @cookie_manager = WebAgent::CookieManager.new + @follow_redirect_count = 10 + load_environment + self.proxy = proxy if proxy + end + + # Returns debug device if exists. See debug_dev=. + def debug_dev + @debug_dev + end + + # Sets debug device. Once debug device is set, all HTTP requests and + # responses are dumped to given device. dev must respond to << for dump. + # + # Calling this method resets all existing sessions. + def debug_dev=(dev) + @debug_dev = dev + reset_all + @session_manager.debug_dev = dev + end + + # Returns URI object of HTTP proxy if exists. + def proxy + @proxy + end + + # Sets HTTP proxy used for HTTP connection. Given proxy can be an URI, + # a String or nil. You can set user/password for proxy authentication like + # HTTPClient#proxy = 'http://user:passwd@myproxy:8080' + # + # You can use environment variable 'http_proxy' or 'HTTP_PROXY' for it. + # You need to use 'cgi_http_proxy' or 'CGI_HTTP_PROXY' instead if you run + # HTTPClient from CGI environment from security reason. (HTTPClient checks + # 'REQUEST_METHOD' environment variable whether it's CGI or not) + # + # Calling this method resets all existing sessions. + def proxy=(proxy) + if proxy.nil? + @proxy = nil + @proxy_auth.reset_challenge + else + @proxy = urify(proxy) + if @proxy.scheme == nil or @proxy.scheme.downcase != 'http' or + @proxy.host == nil or @proxy.port == nil + raise ArgumentError.new("unsupported proxy #{proxy}") + end + @proxy_auth.reset_challenge + if @proxy.user || @proxy.password + @proxy_auth.set_auth(@proxy.user, @proxy.password) + end + end + reset_all + @session_manager.proxy = @proxy + @proxy + end + + # Returns NO_PROXY setting String if given. + def no_proxy + @no_proxy + end + + # Sets NO_PROXY setting String. no_proxy must be a comma separated String. + # Each entry must be 'host' or 'host:port' such as; + # HTTPClient#no_proxy = 'example.com,example.co.jp:443' + # + # 'localhost' is treated as a no_proxy site regardless of explicitly listed. + # HTTPClient checks given URI objects before accessing it. + # 'host' is tail string match. No IP-addr conversion. + # + # You can use environment variable 'no_proxy' or 'NO_PROXY' for it. + # + # Calling this method resets all existing sessions. + def no_proxy=(no_proxy) + @no_proxy = no_proxy + reset_all + end + + # Sets credential for Web server authentication. + # domain:: a String or an URI to specify where HTTPClient should use this + # credential. If you set uri to nil, HTTPClient uses this credential + # wherever a server requires it. + # user:: username String. + # passwd:: password String. + # + # You can set multiple credentials for each uri. + # + # clnt.set_auth('http://www.example.com/foo/', 'foo_user', 'passwd') + # clnt.set_auth('http://www.example.com/bar/', 'bar_user', 'passwd') + # + # Calling this method resets all existing sessions. + def set_auth(domain, user, passwd) + uri = urify(domain) + @www_auth.set_auth(uri, user, passwd) + reset_all + end + + # Deprecated. Use set_auth instead. + def set_basic_auth(domain, user, passwd) + uri = urify(domain) + @www_auth.basic_auth.set(uri, user, passwd) + reset_all + end + + # Sets credential for Proxy authentication. + # user:: username String. + # passwd:: password String. + # + # Calling this method resets all existing sessions. + def set_proxy_auth(user, passwd) + @proxy_auth.set_auth(user, passwd) + reset_all + end + + # Sets the filename where non-volatile Cookies be saved by calling + # save_cookie_store. + # This method tries to load and managing Cookies from the specified file. + # + # Calling this method resets all existing sessions. + def set_cookie_store(filename) + @cookie_manager.cookies_file = filename + @cookie_manager.load_cookies if filename + reset_all + end + + # Try to save Cookies to the file specified in set_cookie_store. Unexpected + # error will be raised if you don't call set_cookie_store first. + # (interface mismatch between WebAgent::CookieManager implementation) + def save_cookie_store + @cookie_manager.save_cookies + end + + # Sets callback proc when HTTP redirect status is returned for get_content + # and post_content. default_redirect_uri_callback is used by default. + # + # If you need strict implementation which does not allow relative URI + # redirection, set strict_redirect_uri_callback instead. + # + # clnt.redirect_uri_callback = clnt.method(:strict_redirect_uri_callback) + # + def redirect_uri_callback=(redirect_uri_callback) + @redirect_uri_callback = redirect_uri_callback + end + + # Retrieves a web resource. + # + # uri:: a String or an URI object which represents an URL of web resource. + # query:: a Hash or an Array of query part of URL. + # e.g. { "a" => "b" } => 'http://host/part?a=b'. + # Give an array to pass multiple value like + # [["a", "b"], ["a", "c"]] => 'http://host/part?a=b&a=c'. + # extheader:: a Hash or an Array of extra headers. e.g. + # { 'Accept' => '*/*' } or + # [['Accept', 'image/jpeg'], ['Accept', 'image/png']]. + # &block:: Give a block to get chunked message-body of response like + # get_content(uri) { |chunked_body| ... }. + # Size of each chunk may not be the same. + # + # get_content follows HTTP redirect status (see HTTP::Status.redirect?) + # internally and try to retrieve content from redirected URL. See + # redirect_uri_callback= how HTTP redirection is handled. + # + # If you need to get full HTTP response including HTTP status and headers, + # use get method. get returns HTTP::Message as a response and you need to + # follow HTTP redirect by yourself if you need. + def get_content(uri, query = nil, extheader = {}, &block) + follow_redirect(:get, uri, query, nil, extheader, &block).content + end + + # Posts a content. + # + # uri:: a String or an URI object which represents an URL of web resource. + # body:: a Hash or an Array of body part. + # e.g. { "a" => "b" } => 'a=b'. + # Give an array to pass multiple value like + # [["a", "b"], ["a", "c"]] => 'a=b&a=c'. + # When you pass a File as a value, it will be posted as a + # multipart/form-data. e.g. { 'upload' => file } + # extheader:: a Hash or an Array of extra headers. e.g. + # { 'Accept' => '*/*' } or + # [['Accept', 'image/jpeg'], ['Accept', 'image/png']]. + # &block:: Give a block to get chunked message-body of response like + # post_content(uri) { |chunked_body| ... }. + # Size of each chunk may not be the same. + # + # post_content follows HTTP redirect status (see HTTP::Status.redirect?) + # internally and try to post the content to redirected URL. See + # redirect_uri_callback= how HTTP redirection is handled. + # + # If you need to get full HTTP response including HTTP status and headers, + # use post method. + def post_content(uri, body = nil, extheader = {}, &block) + follow_redirect(:post, uri, nil, body, extheader, &block).content + end + + # A method for redirect uri callback. How to use: + # clnt.redirect_uri_callback = clnt.method(:strict_redirect_uri_callback) + # This callback does not allow relative redirect such as + # Location: ../foo/ + # in HTTP header. (raises BadResponseError instead) + def strict_redirect_uri_callback(uri, res) + newuri = URI.parse(res.header['location'][0]) + if https?(uri) && !https?(newuri) + raise BadResponseError.new("redirecting to non-https resource") + end + unless newuri.is_a?(URI::HTTP) + raise BadResponseError.new("unexpected location: #{newuri}", res) + end + puts "redirect to: #{newuri}" if $DEBUG + newuri + end + + # A default method for redirect uri callback. This method is used by + # HTTPClient instance by default. + # This callback allows relative redirect such as + # Location: ../foo/ + # in HTTP header. + def default_redirect_uri_callback(uri, res) + newuri = URI.parse(res.header['location'][0]) + if https?(uri) && !https?(newuri) + raise BadResponseError.new("redirecting to non-https resource") + end + unless newuri.is_a?(URI::HTTP) + newuri = uri + newuri + STDERR.puts("could be a relative URI in location header which is not recommended") + STDERR.puts("'The field value consists of a single absolute URI' in HTTP spec") + end + puts "redirect to: #{newuri}" if $DEBUG + newuri + end + + # Sends HEAD request to the specified URL. See request for arguments. + def head(uri, query = nil, extheader = {}) + request(:head, uri, query, nil, extheader) + end + + # Sends GET request to the specified URL. See request for arguments. + def get(uri, query = nil, extheader = {}, &block) + request(:get, uri, query, nil, extheader, &block) + end + + # Sends POST request to the specified URL. See request for arguments. + def post(uri, body = '', extheader = {}, &block) + request(:post, uri, nil, body, extheader, &block) + end + + # Sends PUT request to the specified URL. See request for arguments. + def put(uri, body = '', extheader = {}, &block) + request(:put, uri, nil, body, extheader, &block) + end + + # Sends DELETE request to the specified URL. See request for arguments. + def delete(uri, extheader = {}, &block) + request(:delete, uri, nil, nil, extheader, &block) + end + + # Sends OPTIONS request to the specified URL. See request for arguments. + def options(uri, extheader = {}, &block) + request(:options, uri, nil, nil, extheader, &block) + end + + # Sends PROPFIND request to the specified URL. See request for arguments. + def propfind(uri, extheader = PROPFIND_DEFAULT_EXTHEADER, &block) + request(:propfind, uri, nil, nil, extheader, &block) + end + + # Sends PROPPATCH request to the specified URL. See request for arguments. + def proppatch(uri, body = nil, extheader = {}, &block) + request(:proppatch, uri, nil, body, extheader, &block) + end + + # Sends TRACE request to the specified URL. See request for arguments. + def trace(uri, query = nil, body = nil, extheader = {}, &block) + request('TRACE', uri, query, body, extheader, &block) + end + + # Sends a request to the specified URL. + # + # method:: HTTP method to be sent. method.to_s.upcase is used. + # uri:: a String or an URI object which represents an URL of web resource. + # query:: a Hash or an Array of query part of URL. + # e.g. { "a" => "b" } => 'http://host/part?a=b' + # Give an array to pass multiple value like + # [["a", "b"], ["a", "c"]] => 'http://host/part?a=b&a=c' + # body:: a Hash or an Array of body part. + # e.g. { "a" => "b" } => 'a=b'. + # Give an array to pass multiple value like + # [["a", "b"], ["a", "c"]] => 'a=b&a=c'. + # When the given method is 'POST' and the given body contains a file + # as a value, it will be posted as a multipart/form-data. + # e.g. { 'upload' => file } + # See HTTP::Message.file? for actual condition of 'a file'. + # extheader:: a Hash or an Array of extra headers. e.g. + # { 'Accept' => '*/*' } or + # [['Accept', 'image/jpeg'], ['Accept', 'image/png']]. + # &block:: Give a block to get chunked message-body of response like + # get(uri) { |chunked_body| ... }. + # Size of each chunk may not be the same. + # + # You can also pass a String as a body. HTTPClient just sends a String as + # a HTTP request message body. + # + # When you pass an IO as a body, HTTPClient sends it as a HTTP request with + # chunked encoding (Transfer-Encoding: chunked in HTTP header). Bear in mind + # that some server application does not support chunked request. At least + # cgi.rb does not support it. + def request(method, uri, query = nil, body = nil, extheader = {}, &block) + uri = urify(uri) + if block + filtered_block = proc { |res, str| + block.call(str) + } + end + do_request(method, uri, query, body, extheader, &filtered_block) + end + + # Sends HEAD request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def head_async(uri, query = nil, extheader = {}) + request_async(:head, uri, query, nil, extheader) + end + + # Sends GET request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def get_async(uri, query = nil, extheader = {}) + request_async(:get, uri, query, nil, extheader) + end + + # Sends POST request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def post_async(uri, body = nil, extheader = {}) + request_async(:post, uri, nil, body, extheader) + end + + # Sends PUT request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def put_async(uri, body = nil, extheader = {}) + request_async(:put, uri, nil, body, extheader) + end + + # Sends DELETE request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def delete_async(uri, extheader = {}) + request_async(:delete, uri, nil, nil, extheader) + end + + # Sends OPTIONS request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def options_async(uri, extheader = {}) + request_async(:options, uri, nil, nil, extheader) + end + + # Sends PROPFIND request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def propfind_async(uri, extheader = PROPFIND_DEFAULT_EXTHEADER) + request_async(:propfind, uri, nil, nil, extheader) + end + + # Sends PROPPATCH request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def proppatch_async(uri, body = nil, extheader = {}) + request_async(:proppatch, uri, nil, body, extheader) + end + + # Sends TRACE request in async style. See request_async for arguments. + # It immediately returns a HTTPClient::Connection instance as a result. + def trace_async(uri, query = nil, body = nil, extheader = {}) + request_async(:trace, uri, query, body, extheader) + end + + # Sends a request in async style. request method creates new Thread for + # HTTP connection and returns a HTTPClient::Connection instance immediately. + # + # Arguments definition is the same as request. + def request_async(method, uri, query = nil, body = nil, extheader = {}) + uri = urify(uri) + do_request_async(method, uri, query, body, extheader) + end + + # Resets internal session for the given URL. Keep-alive connection for the + # site (host-port pair) is disconnected if exists. + def reset(uri) + uri = urify(uri) + @session_manager.reset(uri) + end + + # Resets all of internal sessions. Keep-alive connections are disconnected. + def reset_all + @session_manager.reset_all + end + +private + + class RetryableResponse < StandardError # :nodoc: + end + + class KeepAliveDisconnected < StandardError # :nodoc: + end + + def do_request(method, uri, query, body, extheader, &block) + conn = Connection.new + res = nil + if HTTP::Message.file?(body) + pos = body.pos rescue nil + end + retry_count = @session_manager.protocol_retry_count + proxy = no_proxy?(uri) ? nil : @proxy + while retry_count > 0 + body.pos = pos if pos + req = create_request(method, uri, query, body, extheader) + begin + protect_keep_alive_disconnected do + do_get_block(req, proxy, conn, &block) + end + res = conn.pop + break + rescue RetryableResponse + res = conn.pop + retry_count -= 1 + end + end + res + end + + def do_request_async(method, uri, query, body, extheader) + conn = Connection.new + t = Thread.new(conn) { |tconn| + if HTTP::Message.file?(body) + pos = body.pos rescue nil + end + retry_count = @session_manager.protocol_retry_count + proxy = no_proxy?(uri) ? nil : @proxy + while retry_count > 0 + body.pos = pos if pos + req = create_request(method, uri, query, body, extheader) + begin + protect_keep_alive_disconnected do + do_get_stream(req, proxy, tconn) + end + break + rescue RetryableResponse + retry_count -= 1 + end + end + } + conn.async_thread = t + conn + end + + def load_environment + # http_proxy + if getenv('REQUEST_METHOD') + # HTTP_PROXY conflicts with the environment variable usage in CGI where + # HTTP_* is used for HTTP header information. Unlike open-uri, we + # simply ignore http_proxy in CGI env and use cgi_http_proxy instead. + self.proxy = getenv('cgi_http_proxy') + else + self.proxy = getenv('http_proxy') + end + # no_proxy + self.no_proxy = getenv('no_proxy') + end + + def getenv(name) + ENV[name.downcase] || ENV[name.upcase] + end + + def follow_redirect(method, uri, query, body, extheader, &block) + uri = urify(uri) + if block + filtered_block = proc { |r, str| + block.call(str) if HTTP::Status.successful?(r.status) + } + end + if HTTP::Message.file?(body) + pos = body.pos rescue nil + end + retry_number = 0 + while retry_number < @follow_redirect_count + body.pos = pos if pos + res = do_request(method, uri, query, body, extheader, &filtered_block) + if HTTP::Status.successful?(res.status) + return res + elsif HTTP::Status.redirect?(res.status) + uri = urify(@redirect_uri_callback.call(uri, res)) + retry_number += 1 + else + raise BadResponseError.new("unexpected response: #{res.header.inspect}", res) + end + end + raise BadResponseError.new("retry count exceeded", res) + end + + def protect_keep_alive_disconnected + begin + yield + rescue KeepAliveDisconnected + yield + end + end + + def create_request(method, uri, query, body, extheader) + method = method.to_s.upcase + if extheader.is_a?(Hash) + extheader = extheader.to_a + else + extheader = extheader.dup + end + boundary = nil + if body + dummy, content_type = extheader.find { |key, value| + key.downcase == 'content-type' + } + if content_type + if /\Amultipart/ =~ content_type + if content_type =~ /boundary=(.+)\z/ + boundary = $1 + else + boundary = create_boundary + content_type = "#{content_type}; boundary=#{boundary}" + extheader = override_header(extheader, 'Content-Type', content_type) + end + end + elsif method == 'POST' + if file_in_form_data?(body) + boundary = create_boundary + content_type = "multipart/form-data; boundary=#{boundary}" + else + content_type = 'application/x-www-form-urlencoded' + end + extheader << ['Content-Type', content_type] + end + end + req = HTTP::Message.new_request(method, uri, query, body, boundary) + extheader.each do |key, value| + req.header.add(key, value) + end + if @cookie_manager && cookie = @cookie_manager.find(uri) + req.header.add('Cookie', cookie) + end + req + end + + def create_boundary + Digest::SHA1.hexdigest(Time.now.to_s) + end + + def file_in_form_data?(body) + HTTP::Message.multiparam_query?(body) && + body.any? { |k, v| HTTP::Message.file?(v) } + end + + def override_header(extheader, key, value) + result = [] + extheader.each do |k, v| + if k.downcase == key.downcase + result << [key, value] + else + result << [k, v] + end + end + result + end + + NO_PROXY_HOSTS = ['localhost'] + + def no_proxy?(uri) + if !@proxy or NO_PROXY_HOSTS.include?(uri.host) + return true + end + unless @no_proxy + return false + end + @no_proxy.scan(/([^:,]+)(?::(\d+))?/) do |host, port| + if /(\A|\.)#{Regexp.quote(host)}\z/i =~ uri.host && + (!port || uri.port == port.to_i) + return true + end + end + false + end + + def https?(uri) + uri.scheme.downcase == 'https' + end + + # !! CAUTION !! + # Method 'do_get*' runs under MT conditon. Be careful to change. + def do_get_block(req, proxy, conn, &block) + @request_filter.each do |filter| + filter.filter_request(req) + end + if str = @test_loopback_response.shift + dump_dummy_request_response(req.body.dump, str) if @debug_dev + conn.push(HTTP::Message.new_response(str)) + return + end + content = block ? nil : '' + res = HTTP::Message.new_response(content) + @debug_dev << "= Request\n\n" if @debug_dev + sess = @session_manager.query(req, proxy) + res.peer_cert = sess.ssl_peer_cert + @debug_dev << "\n\n= Response\n\n" if @debug_dev + do_get_header(req, res, sess) + conn.push(res) + sess.get_body do |part| + if block + block.call(res, part) + else + content << part + end + end + @session_manager.keep(sess) unless sess.closed? + commands = @request_filter.collect { |filter| + filter.filter_response(req, res) + } + if commands.find { |command| command == :retry } + raise RetryableResponse.new + end + end + + def do_get_stream(req, proxy, conn) + @request_filter.each do |filter| + filter.filter_request(req) + end + if str = @test_loopback_response.shift + dump_dummy_request_response(req.body.dump, str) if @debug_dev + conn.push(HTTP::Message.new_response(StringIO.new(str))) + return + end + piper, pipew = IO.pipe + res = HTTP::Message.new_response(piper) + @debug_dev << "= Request\n\n" if @debug_dev + sess = @session_manager.query(req, proxy) + res.peer_cert = sess.ssl_peer_cert + @debug_dev << "\n\n= Response\n\n" if @debug_dev + do_get_header(req, res, sess) + conn.push(res) + sess.get_body do |part| + pipew.syswrite(part) + end + pipew.close + @session_manager.keep(sess) unless sess.closed? + commands = @request_filter.collect { |filter| + filter.filter_response(req, res) + } + # ignore commands (not retryable in async mode) + end + + def do_get_header(req, res, sess) + res.version, res.status, res.reason, headers = sess.get_header + headers.each do |key, value| + res.header.add(key, value) + end + if @cookie_manager + res.header['set-cookie'].each do |cookie| + @cookie_manager.parse(cookie, req.header.request_uri) + end + end + end + + def dump_dummy_request_response(req, res) + @debug_dev << "= Dummy Request\n\n" + @debug_dev << req + @debug_dev << "\n\n= Dummy Response\n\n" + @debug_dev << res + end +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/auth.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/auth.rb new file mode 100644 index 00000000..571a16f7 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/auth.rb @@ -0,0 +1,522 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + + +require 'digest/md5' +require 'httpclient/session' + + +class HTTPClient + + begin + require 'net/ntlm' + NTLMEnabled = true + rescue LoadError + NTLMEnabled = false + end + + begin + require 'win32/sspi' + SSPIEnabled = true + rescue LoadError + SSPIEnabled = false + end + + + # Common abstract class for authentication filter. + # + # There are 2 authentication filters. + # WWWAuth:: Authentication filter for handling authentication negotiation + # between Web server. Parses 'WWW-Authentication' header in + # response and generates 'Authorization' header in request. + # ProxyAuth:: Authentication filter for handling authentication negotiation + # between Proxy server. Parses 'Proxy-Authentication' header in + # response and generates 'Proxy-Authorization' header in request. + class AuthFilterBase + private + + def parse_authentication_header(res, tag) + challenge = res.header[tag] + return nil unless challenge + challenge.collect { |c| parse_challenge_header(c) }.compact + end + + def parse_challenge_header(challenge) + scheme, param_str = challenge.scan(/\A(\S+)(?:\s+(.*))?\z/)[0] + return nil if scheme.nil? + return scheme, param_str + end + end + + + # Authentication filter for handling authentication negotiation between + # Web server. Parses 'WWW-Authentication' header in response and + # generates 'Authorization' header in request. + # + # Authentication filter is implemented using request filter of HTTPClient. + # It traps HTTP response header and maintains authentication state, and + # traps HTTP request header for inserting necessary authentication header. + # + # WWWAuth has sub filters (BasicAuth, DigestAuth, NegotiateAuth and + # SSPINegotiateAuth) and delegates some operations to it. + # NegotiateAuth requires 'ruby/ntlm' module. + # SSPINegotiateAuth requires 'win32/sspi' module. + class WWWAuth < AuthFilterBase + attr_reader :basic_auth + attr_reader :digest_auth + attr_reader :negotiate_auth + attr_reader :sspi_negotiate_auth + + # Creates new WWWAuth. + def initialize + @basic_auth = BasicAuth.new + @digest_auth = DigestAuth.new + @negotiate_auth = NegotiateAuth.new + @sspi_negotiate_auth = SSPINegotiateAuth.new + # sort authenticators by priority + @authenticator = [@negotiate_auth, @sspi_negotiate_auth, @digest_auth, @basic_auth] + end + + # Resets challenge state. See sub filters for more details. + def reset_challenge + @authenticator.each do |auth| + auth.reset_challenge + end + end + + # Set authentication credential. See sub filters for more details. + def set_auth(uri, user, passwd) + @authenticator.each do |auth| + auth.set(uri, user, passwd) + end + reset_challenge + end + + # Filter API implementation. Traps HTTP request and insert + # 'Authorization' header if needed. + def filter_request(req) + @authenticator.each do |auth| + if cred = auth.get(req) + req.header.set('Authorization', auth.scheme + " " + cred) + return + end + end + end + + # Filter API implementation. Traps HTTP response and parses + # 'WWW-Authenticate' header. + def filter_response(req, res) + command = nil + if res.status == HTTP::Status::UNAUTHORIZED + if challenge = parse_authentication_header(res, 'www-authenticate') + uri = req.header.request_uri + challenge.each do |scheme, param_str| + @authenticator.each do |auth| + if scheme.downcase == auth.scheme.downcase + challengeable = auth.challenge(uri, param_str) + command = :retry if challengeable + end + end + end + # ignore unknown authentication scheme + end + end + command + end + end + + + # Authentication filter for handling authentication negotiation between + # Proxy server. Parses 'Proxy-Authentication' header in response and + # generates 'Proxy-Authorization' header in request. + # + # Authentication filter is implemented using request filter of HTTPClient. + # It traps HTTP response header and maintains authentication state, and + # traps HTTP request header for inserting necessary authentication header. + # + # ProxyAuth has sub filters (BasicAuth, NegotiateAuth, and SSPINegotiateAuth) + # and delegates some operations to it. + # NegotiateAuth requires 'ruby/ntlm' module. + # SSPINegotiateAuth requires 'win32/sspi' module. + class ProxyAuth < AuthFilterBase + attr_reader :basic_auth + attr_reader :negotiate_auth + attr_reader :sspi_negotiate_auth + + # Creates new ProxyAuth. + def initialize + @basic_auth = BasicAuth.new + @negotiate_auth = NegotiateAuth.new + @sspi_negotiate_auth = SSPINegotiateAuth.new + # sort authenticators by priority + @authenticator = [@negotiate_auth, @sspi_negotiate_auth, @basic_auth] + end + + # Resets challenge state. See sub filters for more details. + def reset_challenge + @authenticator.each do |auth| + auth.reset_challenge + end + end + + # Set authentication credential. See sub filters for more details. + def set_auth(user, passwd) + @authenticator.each do |auth| + auth.set(nil, user, passwd) + end + reset_challenge + end + + # Filter API implementation. Traps HTTP request and insert + # 'Proxy-Authorization' header if needed. + def filter_request(req) + @authenticator.each do |auth| + if cred = auth.get(req) + req.header.set('Proxy-Authorization', auth.scheme + " " + cred) + return + end + end + end + + # Filter API implementation. Traps HTTP response and parses + # 'Proxy-Authenticate' header. + def filter_response(req, res) + command = nil + if res.status == HTTP::Status::PROXY_AUTHENTICATE_REQUIRED + if challenge = parse_authentication_header(res, 'proxy-authenticate') + uri = req.header.request_uri + challenge.each do |scheme, param_str| + @authenticator.each do |auth| + if scheme.downcase == auth.scheme.downcase + challengeable = auth.challenge(uri, param_str) + command = :retry if challengeable + end + end + end + # ignore unknown authentication scheme + end + end + command + end + end + + # Authentication filter for handling BasicAuth negotiation. + # Used in WWWAuth and ProxyAuth. + class BasicAuth + # Authentication scheme. + attr_reader :scheme + + # Creates new BasicAuth filter. + def initialize + @cred = nil + @auth = {} + @challengeable = {} + @scheme = "Basic" + end + + # Resets challenge state. Do not send '*Authorization' header until the + # server sends '*Authentication' again. + def reset_challenge + @challengeable.clear + end + + # Set authentication credential. + # uri == nil for generic purpose (allow to use user/password for any URL). + def set(uri, user, passwd) + if uri.nil? + @cred = ["#{user}:#{passwd}"].pack('m').tr("\n", '') + else + uri = Util.uri_dirname(uri) + @auth[uri] = ["#{user}:#{passwd}"].pack('m').tr("\n", '') + end + end + + # Response handler: returns credential. + # It sends cred only when a given uri is; + # * child page of challengeable(got *Authenticate before) uri and, + # * child page of defined credential + def get(req) + target_uri = req.header.request_uri + return nil unless @challengeable.find { |uri, ok| + Util.uri_part_of(target_uri, uri) and ok + } + return @cred if @cred + Util.hash_find_value(@auth) { |uri, cred| + Util.uri_part_of(target_uri, uri) + } + end + + # Challenge handler: remember URL for response. + def challenge(uri, param_str) + @challengeable[uri] = true + true + end + end + + + # Authentication filter for handling DigestAuth negotiation. + # Used in WWWAuth. + class DigestAuth + # Authentication scheme. + attr_reader :scheme + + # Creates new DigestAuth filter. + def initialize + @auth = {} + @challenge = {} + @nonce_count = 0 + @scheme = "Digest" + end + + # Resets challenge state. Do not send '*Authorization' header until the + # server sends '*Authentication' again. + def reset_challenge + @challenge.clear + end + + # Set authentication credential. + # uri == nil is ignored. + def set(uri, user, passwd) + if uri + uri = Util.uri_dirname(uri) + @auth[uri] = [user, passwd] + end + end + + # Response handler: returns credential. + # It sends cred only when a given uri is; + # * child page of challengeable(got *Authenticate before) uri and, + # * child page of defined credential + def get(req) + target_uri = req.header.request_uri + param = Util.hash_find_value(@challenge) { |uri, v| + Util.uri_part_of(target_uri, uri) + } + return nil unless param + user, passwd = Util.hash_find_value(@auth) { |uri, auth_data| + Util.uri_part_of(target_uri, uri) + } + return nil unless user + uri = req.header.request_uri + calc_cred(req.header.request_method, uri, user, passwd, param) + end + + # Challenge handler: remember URL and challenge token for response. + def challenge(uri, param_str) + @challenge[uri] = parse_challenge_param(param_str) + true + end + + private + + # this method is implemented by sromano and posted to + # http://tools.assembla.com/breakout/wiki/DigestForSoap + # Thanks! + # supported algorithm: MD5 only for now + def calc_cred(method, uri, user, passwd, param) + a_1 = "#{user}:#{param['realm']}:#{passwd}" + a_2 = "#{method}:#{uri.path}" + nonce = param['nonce'] + cnonce = generate_cnonce() + @nonce_count += 1 + message_digest = [] + message_digest << Digest::MD5.hexdigest(a_1) + message_digest << nonce + message_digest << ('%08x' % @nonce_count) + message_digest << cnonce + message_digest << param['qop'] + message_digest << Digest::MD5.hexdigest(a_2) + header = [] + header << "username=\"#{user}\"" + header << "realm=\"#{param['realm']}\"" + header << "nonce=\"#{nonce}\"" + header << "uri=\"#{uri.path}\"" + header << "cnonce=\"#{cnonce}\"" + header << "nc=#{'%08x' % @nonce_count}" + header << "qop=\"#{param['qop']}\"" + header << "response=\"#{Digest::MD5.hexdigest(message_digest.join(":"))}\"" + header << "algorithm=\"MD5\"" + header << "opaque=\"#{param['opaque']}\"" if param.key?('opaque') + header.join(", ") + end + + # cf. WEBrick::HTTPAuth::DigestAuth#generate_next_nonce(aTime) + def generate_cnonce + now = "%012d" % Time.now.to_i + pk = Digest::MD5.hexdigest([now, self.__id__, Process.pid, rand(65535)].join)[0, 32] + [now + ':' + pk].pack('m*').chop + end + + def parse_challenge_param(param_str) + param = {} + param_str.scan(/\s*([^\,]+(?:\\.[^\,]*)*)/).each do |str| + key, value = str[0].scan(/\A([^=]+)=(.*)\z/)[0] + if /\A"(.*)"\z/ =~ value + value = $1.gsub(/\\(.)/, '\1') + end + param[key] = value + end + param + end + end + + + # Authentication filter for handling Negotiate/NTLM negotiation. + # Used in WWWAuth and ProxyAuth. + # + # NegotiateAuth depends on 'ruby/ntlm' module. + class NegotiateAuth + # Authentication scheme. + attr_reader :scheme + # NTLM opt for ruby/ntlm. {:ntlmv2 => true} by default. + attr_reader :ntlm_opt + + # Creates new NegotiateAuth filter. + def initialize + @auth = {} + @auth_default = nil + @challenge = {} + @scheme = "Negotiate" + @ntlm_opt = { + :ntlmv2 => true + } + end + + # Resets challenge state. Do not send '*Authorization' header until the + # server sends '*Authentication' again. + def reset_challenge + @challenge.clear + end + + # Set authentication credential. + # uri == nil for generic purpose (allow to use user/password for any URL). + def set(uri, user, passwd) + if uri + uri = Util.uri_dirname(uri) + @auth[uri] = [user, passwd] + else + @auth_default = [user, passwd] + end + end + + # Response handler: returns credential. + # See ruby/ntlm for negotiation state transition. + def get(req) + return nil unless NTLMEnabled + target_uri = req.header.request_uri + domain_uri, param = @challenge.find { |uri, v| + Util.uri_part_of(target_uri, uri) + } + return nil unless param + user, passwd = Util.hash_find_value(@auth) { |uri, auth_data| + Util.uri_part_of(target_uri, uri) + } + unless user + user, passwd = @auth_default + end + return nil unless user + state = param[:state] + authphrase = param[:authphrase] + case state + when :init + t1 = Net::NTLM::Message::Type1.new + return t1.encode64 + when :response + t2 = Net::NTLM::Message.decode64(authphrase) + t3 = t2.response({:user => user, :password => passwd}, @ntlm_opt.dup) + @challenge.delete(domain_uri) + return t3.encode64 + end + nil + end + + # Challenge handler: remember URL and challenge token for response. + def challenge(uri, param_str) + return false unless NTLMEnabled + if param_str.nil? or @challenge[uri].nil? + c = @challenge[uri] = {} + c[:state] = :init + c[:authphrase] = "" + else + c = @challenge[uri] + c[:state] = :response + c[:authphrase] = param_str + end + true + end + end + + + # Authentication filter for handling Negotiate/NTLM negotiation. + # Used in ProxyAuth. + # + # SSPINegotiateAuth depends on 'win32/sspi' module. + class SSPINegotiateAuth + # Authentication scheme. + attr_reader :scheme + + # Creates new SSPINegotiateAuth filter. + def initialize + @challenge = {} + @scheme = "Negotiate" + end + + # Resets challenge state. Do not send '*Authorization' header until the + # server sends '*Authentication' again. + def reset_challenge + @challenge.clear + end + + # Set authentication credential. + # NOT SUPPORTED: username and necessary data is retrieved by win32/sspi. + # See win32/sspi for more details. + def set(uri, user, passwd) + # not supported + end + + # Response handler: returns credential. + # See win32/sspi for negotiation state transition. + def get(req) + return nil unless SSPIEnabled + target_uri = req.header.request_uri + domain_uri, param = @challenge.find { |uri, v| + Util.uri_part_of(target_uri, uri) + } + return nil unless param + state = param[:state] + authenticator = param[:authenticator] + authphrase = param[:authphrase] + case state + when :init + authenticator = param[:authenticator] = Win32::SSPI::NegotiateAuth.new + return authenticator.get_initial_token(@scheme) + when :response + @challenge.delete(domain_uri) + return authenticator.complete_authentication(authphrase) + end + nil + end + + # Challenge handler: remember URL and challenge token for response. + def challenge(uri, param_str) + return false unless SSPIEnabled + if param_str.nil? or @challenge[uri].nil? + c = @challenge[uri] = {} + c[:state] = :init + c[:authenticator] = nil + c[:authphrase] = "" + else + c = @challenge[uri] + c[:state] = :response + c[:authphrase] = param_str + end + true + end + end + + +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert.p7s b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert.p7s new file mode 100644 index 00000000..6a120d5f --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert.p7s @@ -0,0 +1,1579 @@ +MIME-Version: 1.0 +Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="----6E1446C08659E2DBCE5A94E3E5BD325D" + +This is an S/MIME signed message + +------6E1446C08659E2DBCE5A94E3E5BD325D +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw +MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD +VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul +CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n +tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl +dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch +PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC ++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O +BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl +MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk +ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X +7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz +43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl +pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA +WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 +MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK +EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh +BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq +xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G +87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i +2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U +WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 +0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G +A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr +pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL +ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm +aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv +hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm +hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 +P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y +iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no +xqE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP +bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 +MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft +ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk +hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym +1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW +OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb +2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko +O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU +AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF +Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb +LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir +oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C +MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP +bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 +MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft +ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC +206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci +KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 +JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 +BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e +Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B +PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 +Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq +Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ +o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 ++L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj +FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn +xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 +LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc +obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 +CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe +IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA +DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F +AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX +Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb +AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl +Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw +RY8mkaKO/qk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDpjCCAo6gAwIBAgIEAgAAvzANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MS8wLQYD +VQQDEyZCYWx0aW1vcmUgQ3liZXJUcnVzdCBDb2RlIFNpZ25pbmcgUm9vdDAeFw0w +MDA1MTcxNDAxMDBaFw0yNTA1MTcyMzU5MDBaMGcxCzAJBgNVBAYTAklFMRIwEAYD +VQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxLzAtBgNVBAMTJkJh +bHRpbW9yZSBDeWJlclRydXN0IENvZGUgU2lnbmluZyBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHGaGBKOetv5mvxBr9jy9AmOrT/+Zzc82skm +ULGxPsvoTnMA8rLc88VG+wnvGJbOp+CchF0gDnqgqjaL+ii2eC6z7OhH8wTwkCO0 +6q/lU7gF90ddK4bxp6TGOzW20g1SQdf0knXhogpQVoe+lwt7M4UQuSgY7jPqSBHX +W5FHdiLU7s9d56hOHJ2Wkd2cvXQJqHJhqrAhOvE9LANWCdLB3MO1x1Q3q+YmorJG +cXPKEYjuvOdk99ARGnNAWshJLA+375B/aIAEOAsbDzvU9aCzwo7hNLSAmW2edtSS +KUCxldI3pGcSf+Biu641xZk2gkS45ngYM2Fxk1stjZ94lYLrbQIDAQABo1owWDAT +BgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUyEE0XBUVBOVA8tGrmm8kknqH +QlowEgYDVR0TAQH/BAgwBgEB/wIBAzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN +AQEFBQADggEBAFJ0qpVLIozHPZak/l36L7W86/AL6VY4HdFtDaG8aIvwxYClJDT9 +8pYYEYahNvU351RA1WQfw19wQmstOceeUgXO52py0o1yP0dQg6vHjSXJsOOnUxaV +pmpT6hidj3ipd3ca+bSXR1mIJyi1yuEu1z4Oog24IkQD49FjsEE6ofWkLfd2HgRU +mXgyQNcrfE26ppyweW4Hvozs7tc4aVvBDFZon/7r0eHIiPnyzX++hbREZwBQPvQm +A2Tqd33oXj4cN0fI1uqk8zY8l8I5cgWUGSXD1zdBD8Efh4r9qr7psWRX5NuSoc/h +Seg7H5ETWsOP2SVYSYBHD8YDrqzjv7fAqio= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn +MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL +ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg +b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa +MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB +ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw +IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B +AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb +unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d +BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq +7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 +0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX +roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG +A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j +aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p +26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA +BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud +EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN +BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB +AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd +p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi +1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc +XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 +eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu +tGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E +jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo +ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI +ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu +Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg +AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 +HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA +uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa +TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg +xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q +CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x +O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs +6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy +MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA +vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G +CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA +WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ +h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 +f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN +B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy +vUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u +ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh +Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU +MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D +bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq +RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G +CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo +6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux +5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm +AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC +ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 +cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m +by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp +IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg +Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg +KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV +HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E +BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE +FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 +pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz +wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a +EkP/TOYGJqibGapEPHayXOw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy +MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny +Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0 +iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn +5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd +BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0 +MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy +ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l +dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy +MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF +fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w +AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS +hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/ +GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd +zmVml64mXg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML +RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu +Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg +RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl +IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa +Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE +CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p +dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk +MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp +b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO +8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB +bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2 +dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4 +QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT +C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw +IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy +ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw +KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD +VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud +DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2 +fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia +d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF +JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U +yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 +MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE +ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j +b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg +U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ +I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 +wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC +AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb +oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 +BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p +dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk +MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp +b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 +MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi +E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa +MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI +hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN +95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd +2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV +UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy +dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 +MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx +dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f +BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A +cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC +AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ +MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw +ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj +IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF +MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA +A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y +7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh +1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT +ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw +MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j +LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ +KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo +RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu +WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw +Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD +AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK +eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM +zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ +WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN +/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj +dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 +NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD +VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G +vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ +BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C +AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX +MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl +IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw +NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq +y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF +MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA +A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy +0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 +E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT +ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw +MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj +dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l +c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC +UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc +58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ +o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr +aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA +A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA +Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv +8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx +GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1 +c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290 +IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv +b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe +uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf +lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48 +mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+ +D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8 +0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03 +ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC +AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE +ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH +9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv +FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT +T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk +6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D +ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv +b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH +iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS +r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 +04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r +GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 +3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P +lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz +MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N +IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 +bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE +RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO +zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 +bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF +MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 +VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC +OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW +tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ +q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb +EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ +Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O +VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy +NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y +LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ +TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y +TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 +LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW +I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw +nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx +MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG +29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk +oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk +3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL +qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN +nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX +ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H +DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO +TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv +kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w +zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu +IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw +WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD +ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y +IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn +IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ +6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob +jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw +izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl ++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY +zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP +pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF +KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW +ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB +AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 +ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA +A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 +uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ +FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 +jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ +u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D +YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 +puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa +icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG +DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x +kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z +Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj +IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X +DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw +EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE +ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy +dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD +QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN +BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 +dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK +wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 +G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF +AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 +c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P +9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt +YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu +Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa +MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp +b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG +cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh +d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY +DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E +rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq +uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN +BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP +MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa +/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei +gQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p +dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv +bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa +QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY +BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u +IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl +bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu +Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs +Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI +Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD +ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH +b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh +KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy +dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t +MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB +MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG +A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp +b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl +cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv +bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE +VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ +ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR +uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI +hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM +pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm +MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx +MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 +dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl +cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 +DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD +gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 +yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX +L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj +EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG +7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e +QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ +qdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf +tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg +uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J +XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK +8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 +5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 +kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy +dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 +Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz +JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 +Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS +GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt +ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 +au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV +hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI +dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIOBcAAAQACQdAGCk3OdRAwDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDQgQ0EgSUkwHhcNMDYwMzIzMTQxMDIzWhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBALXNTJytrlG7fEjFDSmGehSt2VA9CXIgDRS2Y8b+WJ7gIV7z +jyIZ3E6RIM1viCmis8GsKnK6i1S4QF/yqvhDhsIwXMynXX/GCEnkDjkvjhjWkd0j +FnmA22xIHbzB3ygQY9GB493fL3l1oht48pQB5hBiecugfQLANIJ7x8CtHUzXapZ2 +W78mhEj9h/aECqqSB5lIPGG8ToVYx5ct/YFKocabEvVCUNFkPologiJw3fX64yhC +L04y87OjNopq1mJcrPoBbbTgci6VaLTxkwzGioLSHVPqfOA/QrcSWrjN2qUGZ8uh +d32llvCSHmcOHUJG5vnt+0dTf1cERh9GX8eu4I8CAwEAAaNCMEAwDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFB/quz4lGwa9pd1iBX7G +TFq/6A9DMA0GCSqGSIb3DQEBBQUAA4IBAQBYpCubTPfkpJKknGWYGWIi/HIy6QRd +xMRwLVpG3kxHiiW5ot3u6hKvSI3vK2fbO8w0mCr3CEf/Iq978fTr4jgCMxh1KBue +dmWsiANy8jhHHYz1nwqIUxAUu4DlDLNdjRfuHhkcho0UZ3iMksseIUn3f9MYv5x5 ++F0IebWqak2SNmy8eesOPXmK2PajVnBd3ttPedJ60pVchidlvqDTB4FAVd0Qy+BL +iILAkH0457+W4Ze6mqtCD9Of2J4VMxHL94J59bXAQVaS4d9VA61Iz9PyLrHHLVZM +ZHQqMc7cdalUR6SnQnIJ5+ECpkeyBM1CE+FhDOB4OiIgohxgQoaH96Xm +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV +BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 +c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx +MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg +R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD +VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR +JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T +fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu +jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z +wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ +fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD +VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G +CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 +7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn +8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs +ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ +2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB +kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw +IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG +EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD +VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu +dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 +E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ +D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK +4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq +lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW +bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB +o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT +MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js +LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr +BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB +AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj +j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH +KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv +2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 +mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB +rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt +Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa +Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV +BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l +dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE +AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B +YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 +hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l +L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm +SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM +1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws +6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw +Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 +aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u +7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 +xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ +rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim +eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk +USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB +lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt +SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG +A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe +MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v +d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh +cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn +0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ +M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a +MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd +oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI +DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy +oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 +dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy +bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF +BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli +CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE +CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t +3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS +KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB +lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt +T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV +BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc +BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 +dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP +HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO +KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo +5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ +pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb +kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC +AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov +L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV +HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN +AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw +NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB +mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU +4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 +81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR +Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy +NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY +dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 +WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS +v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v +UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu +IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC +W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh +c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 +NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD +VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp +bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N +H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR +4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN +BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo +EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 +FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx +lA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK +VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm +Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J +h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul +uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 +DzFc6PLZ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 +nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO +8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV +ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb +PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 +6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr +n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a +qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 +wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs +pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 +E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh +YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 +FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G +CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg +J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc +r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns +YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe +Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj +IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx +KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM +HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw +DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC +AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji +nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX +rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn +jBJ7xUS0rg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy +aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp +Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV +BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp +Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g +Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU +J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO +JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY +wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o +koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN +qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E +Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe +xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u +7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI +sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP +cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE +BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is +I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G +CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do +lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc +AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 +pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 +13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk +U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i +F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY +oJ2daZH9 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD +VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 +MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV +BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy +dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ +ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII +0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI +uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI +hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 +YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc +1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN +BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd +BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN +MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g +Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG +A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l +c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT +6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa +Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL +8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC +9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ +pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ +CayJSdM= +-----END CERTIFICATE----- + +------6E1446C08659E2DBCE5A94E3E5BD325D +Content-Type: application/x-pkcs7-signature; name="smime.p7s" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="smime.p7s" + +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 +V+ct53+Li7s= + +------6E1446C08659E2DBCE5A94E3E5BD325D-- + diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert_sha1.p7s b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert_sha1.p7s new file mode 100644 index 00000000..8aa65e4d --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cacert_sha1.p7s @@ -0,0 +1,1579 @@ +MIME-Version: 1.0 +Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="----16967DC47640EB3C0A89A6FE94592C26" + +This is an S/MIME signed message + +------16967DC47640EB3C0A89A6FE94592C26 +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw +MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD +VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul +CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n +tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl +dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch +PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC ++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O +BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl +MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk +ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X +7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz +43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl +pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA +WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 +MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK +EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh +BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq +xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G +87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i +2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U +WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 +0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G +A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr +pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL +ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm +aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv +hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm +hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 +P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y +iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no +xqE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP +bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 +MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft +ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk +hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym +1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW +OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb +2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko +O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU +AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF +Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb +LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir +oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C +MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP +bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 +MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft +ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC +206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci +KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 +JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 +BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e +Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B +PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 +Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq +Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ +o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 ++L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj +FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn +xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 +LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc +obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 +CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe +IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA +DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F +AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX +Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb +AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl +Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw +RY8mkaKO/qk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDpjCCAo6gAwIBAgIEAgAAvzANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MS8wLQYD +VQQDEyZCYWx0aW1vcmUgQ3liZXJUcnVzdCBDb2RlIFNpZ25pbmcgUm9vdDAeFw0w +MDA1MTcxNDAxMDBaFw0yNTA1MTcyMzU5MDBaMGcxCzAJBgNVBAYTAklFMRIwEAYD +VQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxLzAtBgNVBAMTJkJh +bHRpbW9yZSBDeWJlclRydXN0IENvZGUgU2lnbmluZyBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHGaGBKOetv5mvxBr9jy9AmOrT/+Zzc82skm +ULGxPsvoTnMA8rLc88VG+wnvGJbOp+CchF0gDnqgqjaL+ii2eC6z7OhH8wTwkCO0 +6q/lU7gF90ddK4bxp6TGOzW20g1SQdf0knXhogpQVoe+lwt7M4UQuSgY7jPqSBHX +W5FHdiLU7s9d56hOHJ2Wkd2cvXQJqHJhqrAhOvE9LANWCdLB3MO1x1Q3q+YmorJG +cXPKEYjuvOdk99ARGnNAWshJLA+375B/aIAEOAsbDzvU9aCzwo7hNLSAmW2edtSS +KUCxldI3pGcSf+Biu641xZk2gkS45ngYM2Fxk1stjZ94lYLrbQIDAQABo1owWDAT +BgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUyEE0XBUVBOVA8tGrmm8kknqH +QlowEgYDVR0TAQH/BAgwBgEB/wIBAzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN +AQEFBQADggEBAFJ0qpVLIozHPZak/l36L7W86/AL6VY4HdFtDaG8aIvwxYClJDT9 +8pYYEYahNvU351RA1WQfw19wQmstOceeUgXO52py0o1yP0dQg6vHjSXJsOOnUxaV +pmpT6hidj3ipd3ca+bSXR1mIJyi1yuEu1z4Oog24IkQD49FjsEE6ofWkLfd2HgRU +mXgyQNcrfE26ppyweW4Hvozs7tc4aVvBDFZon/7r0eHIiPnyzX++hbREZwBQPvQm +A2Tqd33oXj4cN0fI1uqk8zY8l8I5cgWUGSXD1zdBD8Efh4r9qr7psWRX5NuSoc/h +Seg7H5ETWsOP2SVYSYBHD8YDrqzjv7fAqio= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn +MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL +ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg +b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa +MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB +ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw +IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B +AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb +unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d +BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq +7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 +0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX +roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG +A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j +aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p +26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA +BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud +EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN +BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB +AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd +p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi +1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc +XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 +eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu +tGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E +jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo +ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI +ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu +Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg +AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 +HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA +uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa +TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg +xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q +CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x +O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs +6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy +MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA +vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G +CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA +WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ +h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 +f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN +B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy +vUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u +ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh +Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU +MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D +bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq +RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G +CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo +6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux +5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm +AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC +ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 +cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m +by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp +IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg +Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg +KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV +HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E +BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE +FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 +pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz +wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a +EkP/TOYGJqibGapEPHayXOw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy +MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny +Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0 +iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn +5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd +BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0 +MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy +ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l +dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy +MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF +fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w +AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS +hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/ +GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd +zmVml64mXg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML +RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu +Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg +RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl +IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa +Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE +CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p +dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk +MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp +b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO +8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB +bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2 +dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4 +QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT +C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw +IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy +ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw +KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD +VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud +DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2 +fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia +d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF +JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U +yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 +MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE +ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j +b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg +U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ +I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 +wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC +AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb +oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 +BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p +dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk +MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp +b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 +MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi +E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa +MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI +hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN +95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd +2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV +UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy +dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 +MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx +dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f +BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A +cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC +AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ +MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw +ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj +IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF +MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA +A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y +7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh +1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT +ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw +MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j +LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ +KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo +RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu +WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw +Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD +AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK +eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM +zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ +WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN +/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj +dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 +NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD +VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G +vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ +BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C +AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX +MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl +IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw +NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq +y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF +MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA +A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy +0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 +E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT +ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw +MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj +dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l +c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC +UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc +58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ +o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr +aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA +A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA +Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv +8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx +GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1 +c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290 +IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv +b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe +uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf +lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48 +mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+ +D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8 +0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03 +ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC +AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE +ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH +9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv +FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT +T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk +6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D +ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv +b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH +iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS +r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 +04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r +GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 +3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P +lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz +MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N +IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 +bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE +RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO +zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 +bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF +MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 +VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC +OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW +tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ +q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb +EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ +Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O +VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy +NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y +LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ +TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y +TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 +LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW +I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw +nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx +MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG +29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk +oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk +3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL +qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN +nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX +ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H +DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO +TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv +kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w +zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu +IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw +WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD +ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y +IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn +IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ +6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob +jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw +izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl ++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY +zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP +pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF +KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW +ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB +AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 +ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA +A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 +uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ +FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 +jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ +u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D +YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 +puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa +icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG +DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x +kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z +Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj +IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X +DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw +EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE +ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy +dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD +QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN +BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 +dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK +wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 +G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF +AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 +c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P +9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt +YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu +Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa +MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp +b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG +cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh +d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY +DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E +rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq +uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN +BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP +MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa +/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei +gQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p +dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv +bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa +QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY +BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u +IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl +bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu +Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs +Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI +Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD +ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH +b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh +KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy +dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t +MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB +MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG +A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp +b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl +cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv +bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE +VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ +ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR +uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI +hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM +pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm +MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx +MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 +dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl +cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 +DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD +gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 +yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX +L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj +EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG +7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e +QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ +qdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf +tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg +uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J +XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK +8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 +5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 +kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy +dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 +Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz +JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 +Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS +GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt +ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 +au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV +hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI +dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIOBcAAAQACQdAGCk3OdRAwDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDQgQ0EgSUkwHhcNMDYwMzIzMTQxMDIzWhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBALXNTJytrlG7fEjFDSmGehSt2VA9CXIgDRS2Y8b+WJ7gIV7z +jyIZ3E6RIM1viCmis8GsKnK6i1S4QF/yqvhDhsIwXMynXX/GCEnkDjkvjhjWkd0j +FnmA22xIHbzB3ygQY9GB493fL3l1oht48pQB5hBiecugfQLANIJ7x8CtHUzXapZ2 +W78mhEj9h/aECqqSB5lIPGG8ToVYx5ct/YFKocabEvVCUNFkPologiJw3fX64yhC +L04y87OjNopq1mJcrPoBbbTgci6VaLTxkwzGioLSHVPqfOA/QrcSWrjN2qUGZ8uh +d32llvCSHmcOHUJG5vnt+0dTf1cERh9GX8eu4I8CAwEAAaNCMEAwDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFB/quz4lGwa9pd1iBX7G +TFq/6A9DMA0GCSqGSIb3DQEBBQUAA4IBAQBYpCubTPfkpJKknGWYGWIi/HIy6QRd +xMRwLVpG3kxHiiW5ot3u6hKvSI3vK2fbO8w0mCr3CEf/Iq978fTr4jgCMxh1KBue +dmWsiANy8jhHHYz1nwqIUxAUu4DlDLNdjRfuHhkcho0UZ3iMksseIUn3f9MYv5x5 ++F0IebWqak2SNmy8eesOPXmK2PajVnBd3ttPedJ60pVchidlvqDTB4FAVd0Qy+BL +iILAkH0457+W4Ze6mqtCD9Of2J4VMxHL94J59bXAQVaS4d9VA61Iz9PyLrHHLVZM +ZHQqMc7cdalUR6SnQnIJ5+ECpkeyBM1CE+FhDOB4OiIgohxgQoaH96Xm +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV +BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 +c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx +MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg +R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD +VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR +JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T +fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu +jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z +wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ +fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD +VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G +CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 +7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn +8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs +ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ +2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB +kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw +IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG +EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD +VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu +dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 +E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ +D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK +4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq +lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW +bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB +o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT +MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js +LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr +BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB +AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj +j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH +KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv +2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 +mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB +rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt +Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa +Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV +BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l +dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE +AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B +YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 +hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l +L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm +SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM +1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws +6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw +Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 +aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u +7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 +xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ +rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim +eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk +USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB +lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt +SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG +A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe +MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v +d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh +cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn +0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ +M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a +MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd +oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI +DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy +oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 +dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy +bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF +BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli +CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE +CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t +3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS +KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB +lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt +T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV +BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc +BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 +dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP +HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO +KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo +5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ +pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb +kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC +AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov +L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV +HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN +AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw +NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB +mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU +4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 +81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR +Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy +NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY +dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 +WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS +v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v +UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu +IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC +W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh +c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 +NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD +VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp +bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N +H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR +4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN +BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo +EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 +FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx +lA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK +VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm +Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J +h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul +uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 +DzFc6PLZ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 +nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO +8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV +ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb +PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 +6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr +n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a +qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 +wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs +pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 +E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh +YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 +FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G +CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg +J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc +r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns +YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe +Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj +IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx +KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM +HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw +DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC +AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji +nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX +rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn +jBJ7xUS0rg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy +aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp +Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV +BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp +Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g +Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU +J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO +JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY +wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o +koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN +qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E +Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe +xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u +7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI +sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP +cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE +BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is +I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G +CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do +lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc +AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 +pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 +13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk +U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i +F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY +oJ2daZH9 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD +VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 +MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV +BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy +dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ +ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII +0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI +uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI +hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 +YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc +1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN +BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd +BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN +MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g +Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG +A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l +c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT +6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa +Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL +8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC +9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ +pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ +CayJSdM= +-----END CERTIFICATE----- + +------16967DC47640EB3C0A89A6FE94592C26 +Content-Type: application/x-pkcs7-signature; name="smime.p7s" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="smime.p7s" + +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 +YpE4U6BVZ0o= + +------16967DC47640EB3C0A89A6FE94592C26-- + diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/connection.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/connection.rb new file mode 100644 index 00000000..dc4052a8 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/connection.rb @@ -0,0 +1,84 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + + +class HTTPClient + + + # Represents a HTTP response to an asynchronous request. Async methods of + # HTTPClient such as get_async, post_async, etc. returns an instance of + # Connection. + # + # == How to use + # + # 1. Invoke HTTP method asynchronously and check if it's been finished + # periodically. + # + # connection = clnt.post_async(url, body) + # print 'posting.' + # while true + # break if connection.finished? + # print '.' + # sleep 1 + # end + # puts '.' + # res = connection.pop + # p res.status + # + # 2. Read the response as an IO. + # + # connection = clnt.get_async('http://dev.ctor.org/') + # io = connection.pop.content + # while str = io.read(40) + # p str + # end + class Connection + attr_accessor :async_thread + + def initialize(header_queue = [], body_queue = []) # :nodoc: + @headers = header_queue + @body = body_queue + @async_thread = nil + @queue = Queue.new + end + + # Checks if the asynchronous invocation has been finished or not. + def finished? + if !@async_thread + # Not in async mode. + true + elsif @async_thread.alive? + # Working... + false + else + # Async thread have been finished. + join + true + end + end + + # Retrieves a HTTP::Message instance of HTTP response. Do not invoke this + # method twice for now. The second invocation will be blocked. + def pop + @queue.pop + end + + def push(result) # :nodoc: + @queue.push(result) + end + + # Waits the completion of the asynchronous invocation. + def join + if @async_thread + @async_thread.join + end + nil + end + end + + +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cookie.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cookie.rb new file mode 100644 index 00000000..4ba1279c --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/cookie.rb @@ -0,0 +1,562 @@ +# cookie.rb is redistributed file which is originally included in Webagent +# version 0.6.2 by TAKAHASHI `Maki' Masayoshi. And it contains some bug fixes. +# You can download the entire package of Webagent from +# http://www.rubycolor.org/arc/. + + +# Cookie class +# +# I refered to w3m's source to make these classes. Some comments +# are quoted from it. I'm thanksful for author(s) of it. +# +# w3m homepage: http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/eng/ + +require 'uri' +require 'time' +require 'monitor' + +class WebAgent + + module CookieUtils + + def head_match?(str1, str2) + str1 == str2[0, str1.length] + end + + def tail_match?(str1, str2) + if str1.length > 0 + str1 == str2[-str1.length..-1].to_s + else + true + end + end + + def domain_match(host, domain) + domainname = domain.sub(/\.\z/, '').downcase + hostname = host.sub(/\.\z/, '').downcase + case domain + when /\d+\.\d+\.\d+\.\d+/ + return (hostname == domainname) + when '.' + return true + when /^\./ + # allows; host == rubyforge.org, domain == .rubyforge.org + return tail_match?(domainname, '.' + hostname) + else + return (hostname == domainname) + end + end + + def total_dot_num(string) + string.scan(/\./).length() + end + + end + + class Cookie + include CookieUtils + + attr_accessor :name, :value + attr_accessor :domain, :path + attr_accessor :expires ## for Netscape Cookie + attr_accessor :url + attr_writer :use, :secure, :discard, :domain_orig, :path_orig, :override + + USE = 1 + SECURE = 2 + DOMAIN = 4 + PATH = 8 + DISCARD = 16 + OVERRIDE = 32 + OVERRIDE_OK = 32 + + def initialize() + @name = @value = @domain = @path = nil + @expires = nil + @url = nil + @use = @secure = @discard = @domain_orig = @path_orig = @override = nil + end + + def discard? + @discard + end + + def use? + @use + end + + def secure? + @secure + end + + def domain_orig? + @domain_orig + end + + def path_orig? + @path_orig + end + + def override? + @override + end + + def flag + flg = 0 + flg += USE if @use + flg += SECURE if @secure + flg += DOMAIN if @domain_orig + flg += PATH if @path_orig + flg += DISCARD if @discard + flg += OVERRIDE if @override + flg + end + + def set_flag(flag) + flag = flag.to_i + @use = true if flag & USE > 0 + @secure = true if flag & SECURE > 0 + @domain_orig = true if flag & DOMAIN > 0 + @path_orig = true if flag & PATH > 0 + @discard = true if flag & DISCARD > 0 + @override = true if flag & OVERRIDE > 0 + end + + def match?(url) + domainname = url.host + if (!domainname || + !domain_match(domainname, @domain) || + (@path && !head_match?(@path, url.path)) || + (@secure && (url.scheme != 'https')) ) + return false + else + return true + end + end + + def join_quotedstr(array, sep) + ret = Array.new() + old_elem = nil + array.each{|elem| + if (elem.scan(/"/).length % 2) == 0 + if old_elem + old_elem << sep << elem + else + ret << elem + old_elem = nil + end + else + if old_elem + old_elem << sep << elem + ret << old_elem + old_elem = nil + else + old_elem = elem.dup + end + end + } + ret + end + + def parse(str, url) + @url = url + # TODO: should not depend on join_quotedstr. scan with escape like CSV. + cookie_elem = str.split(/;/) + cookie_elem = join_quotedstr(cookie_elem, ';') + cookie_elem -= [""] # del empty elements, a cookie might included ";;" + first_elem = cookie_elem.shift + if first_elem !~ /([^=]*)(\=(.*))?/ + return + ## raise ArgumentError 'invalid cookie value' + end + @name = $1.strip + @value = normalize_cookie_value($3) + cookie_elem.each{|pair| + key, value = pair.split(/=/, 2) ## value may nil + key.strip! + value = normalize_cookie_value(value) + case key.downcase + when 'domain' + @domain = value + when 'expires' + @expires = nil + begin + @expires = Time.parse(value).gmtime() if value + rescue ArgumentError + end + when 'path' + @path = value + when 'secure' + @secure = true ## value may nil, but must 'true'. + else + ## ignore + end + } + end + + def normalize_cookie_value(value) + if value + value = value.strip.sub(/\A"(.*)"\z/) { $1 } + value = nil if value.empty? + end + value + end + private :normalize_cookie_value + end + + class CookieManager + include CookieUtils + + ### errors + class Error < StandardError; end + class ErrorOverrideOK < Error; end + class SpecialError < Error; end + + attr_reader :cookies + attr_accessor :cookies_file + attr_accessor :accept_domains, :reject_domains + + # for conformance to http://wp.netscape.com/newsref/std/cookie_spec.html + attr_accessor :netscape_rule + SPECIAL_DOMAIN = [".com",".edu",".gov",".mil",".net",".org",".int"] + + def initialize(file=nil) + @cookies = Array.new() + @cookies.extend(MonitorMixin) + @cookies_file = file + @is_saved = true + @reject_domains = Array.new() + @accept_domains = Array.new() + @netscape_rule = false + end + + def cookies=(cookies) + @cookies = cookies + @cookies.extend(MonitorMixin) + end + + def save_all_cookies(force = nil, save_unused = true, save_discarded = true) + @cookies.synchronize do + check_expired_cookies() + if @is_saved and !force + return + end + File.open(@cookies_file, 'w') do |f| + @cookies.each do |cookie| + if (cookie.use? or save_unused) and + (!cookie.discard? or save_discarded) + f.print(cookie.url.to_s,"\t", + cookie.name,"\t", + cookie.value,"\t", + cookie.expires.to_i,"\t", + cookie.domain,"\t", + cookie.path,"\t", + cookie.flag,"\n") + end + end + end + end + @is_saved = true + end + + def save_cookies(force = nil) + save_all_cookies(force, false, false) + end + + def check_expired_cookies() + @cookies.reject!{|cookie| + is_expired = (cookie.expires && (cookie.expires < Time.now.gmtime)) + if is_expired && !cookie.discard? + @is_saved = false + end + is_expired + } + end + + def parse(str, url) + cookie = WebAgent::Cookie.new() + cookie.parse(str, url) + add(cookie) + end + + def make_cookie_str(cookie_list) + if cookie_list.empty? + return nil + end + + ret = '' + c = cookie_list.shift + ret += "#{c.name}=#{c.value}" + cookie_list.each{|cookie| + ret += "; #{cookie.name}=#{cookie.value}" + } + return ret + end + private :make_cookie_str + + + def find(url) + return nil if @cookies.empty? + + cookie_list = Array.new() + @cookies.each{|cookie| + is_expired = (cookie.expires && (cookie.expires < Time.now.gmtime)) + if cookie.use? && !is_expired && cookie.match?(url) + if cookie_list.select{|c1| c1.name == cookie.name}.empty? + cookie_list << cookie + end + end + } + return make_cookie_str(cookie_list) + end + + def find_cookie_info(domain, path, name) + @cookies.find{|c| + c.domain == domain && c.path == path && c.name == name + } + end + private :find_cookie_info + + # not tested well; used only netscape_rule = true. + def cookie_error(err, override) + if !err.kind_of?(ErrorOverrideOK) || !override + raise err + end + end + private :cookie_error + + def add(cookie) + url = cookie.url + name, value = cookie.name, cookie.value + expires, domain, path = + cookie.expires, cookie.domain, cookie.path + secure, domain_orig, path_orig = + cookie.secure?, cookie.domain_orig?, cookie.path_orig? + discard, override = + cookie.discard?, cookie.override? + + domainname = url.host + domain_orig, path_orig = domain, path + use_security = override + + if domain + + # [DRAFT 12] s. 4.2.2 (does not apply in the case that + # host name is the same as domain attribute for version 0 + # cookie) + # I think that this rule has almost the same effect as the + # tail match of [NETSCAPE]. + if domain !~ /^\./ && domainname != domain + domain = '.'+domain + end + + # [NETSCAPE] rule + if @netscape_rule + n = total_dot_num(domain) + if n < 2 + cookie_error(SpecialError.new(), override) + elsif n == 2 + ## [NETSCAPE] rule + ok = SPECIAL_DOMAIN.select{|sdomain| + sdomain == domain[-(sdomain.length)..-1] + } + if ok.empty? + cookie_error(SpecialError.new(), override) + end + end + end + + # this implementation does not check RFC2109 4.3.2 case 2; + # the portion of host not in domain does not contain a dot. + # according to nsCookieService.cpp in Firefox 3.0.4, Firefox 3.0.4 + # and IE does not check, too. + end + + path ||= url.path.sub(%r|/[^/]*|, '') + domain ||= domainname + @cookies.synchronize do + cookie = find_cookie_info(domain, path, name) + if !cookie + cookie = WebAgent::Cookie.new() + cookie.use = true + @cookies << cookie + end + check_expired_cookies() + end + + cookie.url = url + cookie.name = name + cookie.value = value + cookie.expires = expires + cookie.domain = domain + cookie.path = path + + ## for flag + cookie.secure = secure + cookie.domain_orig = domain_orig + cookie.path_orig = path_orig + if discard || cookie.expires == nil + cookie.discard = true + else + cookie.discard = false + @is_saved = false + end + end + + def load_cookies() + return if !File.readable?(@cookies_file) + @cookies.synchronize do + @cookies.clear + File.open(@cookies_file,'r'){|f| + while line = f.gets + cookie = WebAgent::Cookie.new() + @cookies << cookie + col = line.chomp.split(/\t/) + cookie.url = URI.parse(col[0]) + cookie.name = col[1] + cookie.value = col[2] + if col[3].empty? or col[3] == '0' + cookie.expires = nil + else + cookie.expires = Time.at(col[3].to_i).gmtime + end + cookie.domain = col[4] + cookie.path = col[5] + cookie.set_flag(col[6]) + end + } + end + end + + def check_cookie_accept_domain(domain) + unless domain + return false + end + @accept_domains.each{|dom| + if domain_match(domain, dom) + return true + end + } + @reject_domains.each{|dom| + if domain_match(domain, dom) + return false + end + } + return true + end + end +end + +__END__ + +=begin + +== WebAgent::CookieManager Class + +Load, save, parse and send cookies. + +=== Usage + + ## initialize + cm = WebAgent::CookieManager.new("/home/foo/bar/cookie") + + ## load cookie data + cm.load_cookies() + + ## parse cookie from string (maybe "Set-Cookie:" header) + cm.parse(str) + + ## send cookie data to url + f.write(cm.find(url)) + + ## save cookie to cookiefile + cm.save_cookies() + + +=== Class Methods + + -- CookieManager::new(file=nil) + + create new CookieManager. If a file is provided, + use it as cookies' file. + +=== Methods + + -- CookieManager#save_cookies(force = nil) + + save cookies' data into file. if argument is true, + save data although data is not modified. + + -- CookieManager#parse(str, url) + + parse string and store cookie (to parse HTTP response header). + + -- CookieManager#find(url) + + get cookies and make into string (to send as HTTP request header). + + -- CookieManager#add(cookie) + + add new cookie. + + -- CookieManager#load_cookies() + + load cookies' data from file. + + +== WebAgent::CookieUtils Module + + -- CookieUtils::head_match?(str1, str2) + -- CookieUtils::tail_match?(str1, str2) + -- CookieUtils::domain_match(host, domain) + -- CookieUtils::total_dot_num(str) + + +== WebAgent::Cookie Class + +=== Class Methods + + -- Cookie::new() + + create new cookie. + +=== Methods + + -- Cookie#match?(url) + + match cookie by url. if match, return true. otherwise, + return false. + + -- Cookie#name + -- Cookie#name=(name) + -- Cookie#value + -- Cookie#value=(value) + -- Cookie#domain + -- Cookie#domain=(domain) + -- Cookie#path + -- Cookie#path=(path) + -- Cookie#expires + -- Cookie#expires=(expires) + -- Cookie#url + -- Cookie#url=(url) + + accessor methods for cookie's items. + + -- Cookie#discard? + -- Cookie#discard=(discard) + -- Cookie#use? + -- Cookie#use=(use) + -- Cookie#secure? + -- Cookie#secure=(secure) + -- Cookie#domain_orig? + -- Cookie#domain_orig=(domain_orig) + -- Cookie#path_orig? + -- Cookie#path_orig=(path_orig) + -- Cookie#override? + -- Cookie#override=(override) + -- Cookie#flag + -- Cookie#set_flag(flag_num) + + accessor methods for flags. + +=end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/http.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/http.rb new file mode 100644 index 00000000..4b0d91cc --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/http.rb @@ -0,0 +1,867 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + + +require 'time' + + +# A namespace module for HTTP Message definitions used by HTTPClient. +module HTTP + + + # Represents HTTP response status code. Defines constants for HTTP response + # and some conditional methods. + module Status + OK = 200 + CREATED = 201 + ACCEPTED = 202 + NON_AUTHORITATIVE_INFORMATION = 203 + NO_CONTENT = 204 + RESET_CONTENT = 205 + PARTIAL_CONTENT = 206 + MOVED_PERMANENTLY = 301 + FOUND = 302 + SEE_OTHER = 303 + TEMPORARY_REDIRECT = MOVED_TEMPORARILY = 307 + BAD_REQUEST = 400 + UNAUTHORIZED = 401 + PROXY_AUTHENTICATE_REQUIRED = 407 + INTERNAL = 500 + + # Status codes for successful HTTP response. + SUCCESSFUL_STATUS = [ + OK, CREATED, ACCEPTED, + NON_AUTHORITATIVE_INFORMATION, NO_CONTENT, + RESET_CONTENT, PARTIAL_CONTENT + ] + + # Status codes which is a redirect. + REDIRECT_STATUS = [ + MOVED_PERMANENTLY, FOUND, SEE_OTHER, + TEMPORARY_REDIRECT, MOVED_TEMPORARILY + ] + + # Returns true if the given status represents successful HTTP response. + # See also SUCCESSFUL_STATUS. + def self.successful?(status) + SUCCESSFUL_STATUS.include?(status) + end + + # Returns true if the given status is thought to be redirect. + # See also REDIRECT_STATUS. + def self.redirect?(status) + REDIRECT_STATUS.include?(status) + end + end + + + # Represents a HTTP message. A message is for a request or a response. + # + # Request message is generated from given parameters internally so users + # don't need to care about it. Response message is the instance that + # methods of HTTPClient returns so users need to know how to extract + # HTTP response data from Message. + # + # Some attributes are only for a request or a response, not both. + # + # == How to use HTTP response message + # + # 1. Gets response message body. + # + # res = clnt.get(url) + # p res.content #=> String + # + # 2. Gets response status code. + # + # res = clnt.get(url) + # p res.status #=> 200, 501, etc. (Integer) + # + # 3. Gets response header. + # + # res = clnt.get(url) + # res.header['set-cookie'].each do |value| + # p value + # end + # assert_equal(1, res.header['last-modified'].size) + # p res.header['last-modified'].first + # + class Message + + CRLF = "\r\n" + + # Represents HTTP message header. + class Headers + # HTTP version in a HTTP header. Float. + attr_accessor :http_version + # Size of body. nil when size is unknown (e.g. chunked response). + attr_reader :body_size + # Request/Response is chunked or not. + attr_accessor :chunked + + # Request only. Requested method. + attr_reader :request_method + # Request only. Requested URI. + attr_accessor :request_uri + # Request only. Requested query. + attr_accessor :request_query + # Request only. Requested via proxy or not. + attr_accessor :request_via_proxy + + # Response only. HTTP status + attr_reader :status_code + # Response only. HTTP status reason phrase. + attr_accessor :reason_phrase + + # Used for dumping response. + attr_accessor :body_type # :nodoc: + # Used for dumping response. + attr_accessor :body_charset # :nodoc: + # Used for dumping response. + attr_accessor :body_date # :nodoc: + + # HTTP response status code to reason phrase mapping definition. + STATUS_CODE_MAP = { + Status::OK => 'OK', + Status::CREATED => "Created", + Status::NON_AUTHORITATIVE_INFORMATION => "Non-Authoritative Information", + Status::NO_CONTENT => "No Content", + Status::RESET_CONTENT => "Reset Content", + Status::PARTIAL_CONTENT => "Partial Content", + Status::MOVED_PERMANENTLY => 'Moved Permanently', + Status::FOUND => 'Found', + Status::SEE_OTHER => 'See Other', + Status::TEMPORARY_REDIRECT => 'Temporary Redirect', + Status::MOVED_TEMPORARILY => 'Temporary Redirect', + Status::BAD_REQUEST => 'Bad Request', + Status::INTERNAL => 'Internal Server Error', + } + + # $KCODE to charset mapping definition. + CHARSET_MAP = { + 'NONE' => 'us-ascii', + 'EUC' => 'euc-jp', + 'SJIS' => 'shift_jis', + 'UTF8' => 'utf-8', + } + + # Creates a Message::Headers. Use init_request, init_response, or + # init_connect_request for acutual initialize. + def initialize + @http_version = 1.1 + @body_size = nil + @chunked = false + + @request_method = nil + @request_uri = nil + @request_query = nil + @request_via_proxy = nil + + @status_code = nil + @reason_phrase = nil + + @body_type = nil + @body_charset = nil + @body_date = nil + + @is_request = nil + @header_item = [] + @dumped = false + end + + # Initialize this instance as a CONNECT request. + def init_connect_request(uri) + @is_request = true + @request_method = 'CONNECT' + @request_uri = uri + @request_query = nil + @http_version = 1.0 + end + + # Placeholder URI object for nil uri. + NIL_URI = URI.parse('http://nil-uri-given/') + # Initialize this instance as a general request. + def init_request(method, uri, query = nil) + @is_request = true + @request_method = method + @request_uri = uri || NIL_URI + @request_query = query + @request_via_proxy = false + end + + # Initialize this instance as a response. + def init_response(status_code) + @is_request = false + self.status_code = status_code + end + + # Sets status code and reason phrase. + def status_code=(status_code) + @status_code = status_code + @reason_phrase = STATUS_CODE_MAP[@status_code] + end + + # Returns 'Content-Type' header value. + def contenttype + self['Content-Type'][0] + end + + # Sets 'Content-Type' header value. Overrides if already exists. + def contenttype=(contenttype) + delete('Content-Type') + self['Content-Type'] = contenttype + end + + # Sets byte size of message body. + # body_size == nil means that the body is_a? IO + def body_size=(body_size) + @body_size = body_size + end + + # Dumps message header part and returns a dumped String. + def dump + set_header + str = nil + if @is_request + str = request_line + else + str = response_status_line + end + str + @header_item.collect { |key, value| + "#{ key }: #{ value }#{ CRLF }" + }.join + end + + # Adds a header. Addition order is preserved. + def add(key, value) + if value.is_a?(Array) + value.each do |v| + @header_item.push([key, v]) + end + else + @header_item.push([key, value]) + end + end + + # Sets a header. + def set(key, value) + delete(key) + add(key, value) + end + + # Returns an Array of headers for the given key. Each element is a pair + # of key and value. It returns an single element Array even if the only + # one header exists. If nil key given, it returns all headers. + def get(key = nil) + if key.nil? + all + else + key = key.upcase + @header_item.find_all { |k, v| k.upcase == key } + end + end + + # Returns an Array of all headers. + def all + @header_item + end + + # Deletes headers of the given key. + def delete(key) + key = key.upcase + @header_item.delete_if { |k, v| k.upcase == key } + end + + # Adds a header. See set. + def []=(key, value) + set(key, value) + end + + # Returns an Array of header values for the given key. + def [](key) + get(key).collect { |item| item[1] } + end + + private + + def request_line + path = create_query_uri(@request_uri, @request_query) + if @request_via_proxy + path = "#{ @request_uri.scheme }://#{ @request_uri.host }:#{ @request_uri.port }#{ path }" + end + "#{ @request_method } #{ path } HTTP/#{ @http_version }#{ CRLF }" + end + + def response_status_line + if defined?(Apache) + "HTTP/#{ @http_version } #{ @status_code } #{ @reason_phrase }#{ CRLF }" + else + "Status: #{ @status_code } #{ @reason_phrase }#{ CRLF }" + end + end + + def set_header + if @is_request + set_request_header + else + set_response_header + end + end + + def set_request_header + return if @dumped + @dumped = true + keep_alive = Message.keep_alive_enabled?(@http_version) + if !keep_alive and @request_method != 'CONNECT' + set('Connection', 'close') + end + if @chunked + set('Transfer-Encoding', 'chunked') + elsif @body_size and (keep_alive or @body_size != 0) + set('Content-Length', @body_size.to_s) + end + if @http_version >= 1.1 + if @request_uri.port == @request_uri.default_port + # GFE/1.3 dislikes default port number (returns 404) + set('Host', "#{@request_uri.host}") + else + set('Host', "#{@request_uri.host}:#{@request_uri.port}") + end + end + end + + def set_response_header + return if @dumped + @dumped = true + if defined?(Apache) && self['Date'].empty? + set('Date', Time.now.httpdate) + end + keep_alive = Message.keep_alive_enabled?(@http_version) + if @chunked + set('Transfer-Encoding', 'chunked') + else + if keep_alive or @body_size != 0 + set('Content-Length', @body_size.to_s) + end + end + if @body_date + set('Last-Modified', @body_date.httpdate) + end + if self['Content-Type'].empty? + set('Content-Type', "#{ @body_type || 'text/html' }; charset=#{ charset_label(@body_charset || $KCODE) }") + end + end + + def charset_label(charset) + CHARSET_MAP[charset] || 'us-ascii' + end + + def create_query_uri(uri, query) + if @request_method == 'CONNECT' + return "#{uri.host}:#{uri.port}" + end + path = uri.path + path = '/' if path.nil? or path.empty? + query_str = nil + if uri.query + query_str = uri.query + end + if query + if query_str + query_str += "&#{Message.create_query_part_str(query)}" + else + query_str = Message.create_query_part_str(query) + end + end + if query_str + path += "?#{query_str}" + end + path + end + end + + + # Represents HTTP message body. + class Body + # Size of body. nil when size is unknown (e.g. chunked response). + attr_reader :size + # maxbytes of IO#read for streaming request. See DEFAULT_CHUNK_SIZE. + attr_accessor :chunk_size + + # Default value for chunk_size + DEFAULT_CHUNK_SIZE = 1024 * 16 + + # Creates a Message::Body. Use init_request or init_response + # for acutual initialize. + def initialize + @body = nil + @size = nil + @positions = nil + @chunk_size = nil + end + + # Initialize this instance as a request. + def init_request(body = nil, boundary = nil) + @boundary = boundary + @positions = {} + set_content(body, boundary) + @chunk_size = DEFAULT_CHUNK_SIZE + end + + # Initialize this instance as a response. + def init_response(body = nil) + @body = body + if @body.respond_to?(:size) + @size = @body.size + else + @size = nil + end + end + + # Dumps message body to given dev. + # dev needs to respond to <<. + # + # Message header must be given as the first argument for performance + # reason. (header is dumped to dev, too) + # If no dev (the second argument) given, this method returns a dumped + # String. + def dump(header = '', dev = '') + if @body.is_a?(Parts) + dev << header + buf = '' + @body.parts.each do |part| + if Message.file?(part) + reset_pos(part) + while !part.read(@chunk_size, buf).nil? + dev << buf + end + else + dev << part + end + end + elsif @body + dev << header + @body + else + dev << header + end + dev + end + + # Dumps message body with chunked encoding to given dev. + # dev needs to respond to <<. + # + # Message header must be given as the first argument for performance + # reason. (header is dumped to dev, too) + # If no dev (the second argument) given, this method returns a dumped + # String. + def dump_chunked(header = '', dev = '') + dev << header + if @body.is_a?(Parts) + @body.parts.each do |part| + if Message.file?(part) + reset_pos(part) + dump_chunks(part, dev) + else + dev << dump_chunk(part) + end + end + dev << (dump_last_chunk + CRLF) + elsif @body + reset_pos(@body) + dump_chunks(@body, dev) + dev << (dump_last_chunk + CRLF) + end + dev + end + + # Returns a message body itself. + def content + @body + end + + private + + def set_content(body, boundary = nil) + if body.respond_to?(:read) + # uses Transfer-Encoding: chunked. bear in mind that server may not + # support it. at least ruby's CGI doesn't. + @body = body + remember_pos(@body) + @size = nil + elsif boundary and Message.multiparam_query?(body) + @body = build_query_multipart_str(body, boundary) + @size = @body.size + else + @body = Message.create_query_part_str(body) + @size = @body.size + end + end + + def remember_pos(io) + # IO may not support it (ex. IO.pipe) + @positions[io] = io.pos rescue nil + end + + def reset_pos(io) + io.pos = @positions[io] if @positions.key?(io) + end + + def dump_chunks(io, dev) + buf = '' + while !io.read(@chunk_size, buf).nil? + dev << dump_chunk(buf) + end + end + + def dump_chunk(str) + dump_chunk_size(str.size) + (str + CRLF) + end + + def dump_last_chunk + dump_chunk_size(0) + end + + def dump_chunk_size(size) + sprintf("%x", size) + CRLF + end + + class Parts + attr_reader :size + + def initialize + @body = [] + @size = 0 + @as_stream = false + end + + def add(part) + if Message.file?(part) + @as_stream = true + @body << part + if part.respond_to?(:size) + if sz = part.size + @size += sz + else + @size = nil + end + elsif part.respond_to?(:lstat) + @size += part.lstat.size + else + # use chunked upload + @size = nil + end + elsif @body[-1].is_a?(String) + @body[-1] += part.to_s + @size += part.to_s.size if @size + else + @body << part.to_s + @size += part.to_s.size if @size + end + end + + def parts + if @as_stream + @body + else + [@body.join] + end + end + end + + def build_query_multipart_str(query, boundary) + parts = Parts.new + query.each do |attr, value| + value ||= '' + headers = ["--#{boundary}"] + if Message.file?(value) + remember_pos(value) + param_str = params_from_file(value).collect { |k, v| + "#{k}=\"#{v}\"" + }.join("; ") + if value.respond_to?(:mime_type) + content_type = value.mime_type + else + content_type = Message.mime_type(value.path) + end + headers << %{Content-Disposition: form-data; name="#{attr}"; #{param_str}} + headers << %{Content-Type: #{content_type}} + else + headers << %{Content-Disposition: form-data; name="#{attr}"} + end + parts.add(headers.join(CRLF) + CRLF + CRLF) + parts.add(value) + parts.add(CRLF) + end + parts.add("--#{boundary}--" + CRLF + CRLF) # empty epilogue + parts + end + + def params_from_file(value) + params = {} + params['filename'] = File.basename(value.path || '') + # Creation time is not available from File::Stat + if value.respond_to?(:mtime) + params['modification-date'] = value.mtime.rfc822 + end + if value.respond_to?(:atime) + params['read-date'] = value.atime.rfc822 + end + params + end + end + + + class << self + private :new + + # Creates a Message instance of 'CONNECT' request. + # 'CONNECT' request does not have Body. + # uri:: an URI that need to connect. Only uri.host and uri.port are used. + def new_connect_request(uri) + m = new + m.header.init_connect_request(uri) + m.header.body_size = nil + m + end + + # Creates a Message instance of general request. + # method:: HTTP method String. + # uri:: an URI object which represents an URL of web resource. + # query:: a Hash or an Array of query part of URL. + # e.g. { "a" => "b" } => 'http://host/part?a=b' + # Give an array to pass multiple value like + # [["a", "b"], ["a", "c"]] => 'http://host/part?a=b&a=c' + # body:: a Hash or an Array of body part. + # e.g. { "a" => "b" } => 'a=b'. + # Give an array to pass multiple value like + # [["a", "b"], ["a", "c"]] => 'a=b&a=c'. + # boundary:: When the boundary given, it is sent as + # a multipart/form-data using this boundary String. + def new_request(method, uri, query = nil, body = nil, boundary = nil) + m = new + m.header.init_request(method, uri, query) + m.body = Body.new + m.body.init_request(body || '', boundary) + if body + m.header.body_size = m.body.size + m.header.chunked = true if m.body.size.nil? + else + m.header.body_size = nil + end + m + end + + # Creates a Message instance of response. + # body:: a String or an IO of response message body. + def new_response(body) + m = new + m.header.init_response(Status::OK) + m.body = Body.new + m.body.init_response(body) + m.header.body_size = m.body.size || 0 + m + end + + @@mime_type_handler = nil + + # Sets MIME type handler. + # + # handler must respond to :call with a single argument :path and returns + # a MIME type String e.g. 'text/html'. + # When the handler returns nil or an empty String, + # 'application/octet-stream' is used. + # + # When you set nil to the handler, internal_mime_type is used instead. + # The handler is nil by default. + def mime_type_handler=(handler) + @@mime_type_handler = handler + end + + # Returns MIME type handler. + def mime_type_handler + @@mime_type_handler + end + + # For backward compatibility. + alias set_mime_type_func mime_type_handler= + alias get_mime_type_func mime_type_handler + + def mime_type(path) # :nodoc: + if @@mime_type_handler + res = @@mime_type_handler.call(path) + if !res || res.to_s == '' + return 'application/octet-stream' + else + return res + end + else + internal_mime_type(path) + end + end + + # Default MIME type handler. + # See mime_type_handler=. + def internal_mime_type(path) + case path + when /\.txt$/i + 'text/plain' + when /\.(htm|html)$/i + 'text/html' + when /\.doc$/i + 'application/msword' + when /\.png$/i + 'image/png' + when /\.gif$/i + 'image/gif' + when /\.(jpg|jpeg)$/i + 'image/jpeg' + else + 'application/octet-stream' + end + end + + # Returns true if the given HTTP version allows keep alive connection. + # version:: Float + def keep_alive_enabled?(version) + version >= 1.1 + end + + # Returns true if the given query (or body) has a multiple parameter. + def multiparam_query?(query) + query.is_a?(Array) or query.is_a?(Hash) + end + + # Returns true if the given object is a File. In HTTPClient, a file is; + # * must respond to :read for retrieving String chunks. + # * must respond to :path and returns a path for Content-Disposition. + # * must respond to :pos and :pos= to rewind for reading. + # Rewinding is only needed for following HTTP redirect. Some IO impl + # defines :pos= but raises an Exception for pos= such as StringIO + # but there's no problem as far as using it for non-following methods + # (get/post/etc.) + def file?(obj) + obj.respond_to?(:read) and obj.respond_to?(:path) and + obj.respond_to?(:pos) and obj.respond_to?(:pos=) + end + + def create_query_part_str(query) # :nodoc: + if multiparam_query?(query) + escape_query(query) + elsif query.respond_to?(:read) + query = query.read + else + query.to_s + end + end + + def escape_query(query) # :nodoc: + query.collect { |attr, value| + if value.respond_to?(:read) + value = value.read + end + escape(attr.to_s) << '=' << escape(value.to_s) + }.join('&') + end + + # from CGI.escape + def escape(str) # :nodoc: + str.gsub(/([^ a-zA-Z0-9_.-]+)/n) { + '%' + $1.unpack('H2' * $1.size).join('%').upcase + }.tr(' ', '+') + end + end + + + # HTTP::Message::Headers:: message header. + attr_accessor :header + + # HTTP::Message::Body:: message body. + attr_reader :body + + # OpenSSL::X509::Certificate:: response only. server certificate which is + # used for retrieving the response. + attr_accessor :peer_cert + + # Creates a Message. This method should be used internally. + # Use Message.new_connect_request, Message.new_request or + # Message.new_response instead. + def initialize # :nodoc: + @header = Headers.new + @body = @peer_cert = nil + end + + # Dumps message (header and body) to given dev. + # dev needs to respond to <<. + def dump(dev = '') + str = header.dump + CRLF + if header.chunked + dev = body.dump_chunked(str, dev) + elsif body + dev = body.dump(str, dev) + else + dev << str + end + dev + end + + # Sets a new body. header.body_size is updated with new body.size. + def body=(body) + @body = body + @header.body_size = @body.size if @header + end + + # Returns HTTP version in a HTTP header. Float. + def version + @header.http_version + end + + # Sets HTTP version in a HTTP header. Float. + def version=(version) + @header.http_version = version + end + + # Returns HTTP status code in response. Integer. + def status + @header.status_code + end + + alias code status + alias status_code status + + # Sets HTTP status code of response. Integer. + # Reason phrase is updated, too. + def status=(status) + @header.status_code = status + end + + # Returns HTTP status reason phrase in response. String. + def reason + @header.reason_phrase + end + + # Sets HTTP status reason phrase of response. String. + def reason=(reason) + @header.reason_phrase = reason + end + + # Sets 'Content-Type' header value. Overrides if already exists. + def contenttype + @header.contenttype + end + + # Returns 'Content-Type' header value. + def contenttype=(contenttype) + @header.contenttype = contenttype + end + + # Returns a content of message body. A String or an IO. + def content + @body.content + end + end + + +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/session.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/session.rb new file mode 100644 index 00000000..5ac5cd60 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/session.rb @@ -0,0 +1,863 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + +# httpclient/session.rb is based on http-access.rb in http-access/0.0.4. +# Some part of code in http-access.rb was recycled in httpclient.rb. +# Those part is copyrighted by Maehashi-san. + + +require 'socket' +require 'thread' +require 'stringio' + +require 'httpclient/timeout' +require 'httpclient/ssl_config' +require 'httpclient/http' + + +class HTTPClient + + + # Represents a Site: protocol scheme, host String and port Number. + class Site + # Protocol scheme. + attr_accessor :scheme + # Host String. + attr_reader :host + # Port number. + attr_reader :port + + # Creates a new Site based on the given URI. + def initialize(uri = nil) + if uri + @scheme = uri.scheme + @host = uri.host + @port = uri.port.to_i + else + @scheme = 'tcp' + @host = '0.0.0.0' + @port = 0 + end + end + + # Returns address String. + def addr + "#{@scheme}://#{@host}:#{@port.to_s}" + end + + # Returns true is scheme, host and port are '==' + def ==(rhs) + (@scheme == rhs.scheme) and (@host == rhs.host) and (@port == rhs.port) + end + + # Same as ==. + def eql?(rhs) + self == rhs + end + + def hash # :nodoc: + [@scheme, @host, @port].hash + end + + def to_s # :nodoc: + addr + end + + # Returns true if scheme, host and port of the given URI matches with this. + def match(uri) + (@scheme == uri.scheme) and (@host == uri.host) and (@port == uri.port.to_i) + end + + def inspect # :nodoc: + sprintf("#<%s:0x%x %s>", self.class.name, __id__, addr) + end + end + + + # Manages sessions for a HTTPClient instance. + class SessionManager + # Name of this client. Used for 'User-Agent' header in HTTP request. + attr_accessor :agent_name + # Owner of this client. Used for 'From' header in HTTP request. + attr_accessor :from + + # Requested protocol version + attr_accessor :protocol_version + # Chunk size for chunked request + attr_accessor :chunk_size + # Device for dumping log for debugging + attr_accessor :debug_dev + # Boolean value for Socket#sync + attr_accessor :socket_sync + + attr_accessor :connect_timeout + # Maximum retry count. 0 for infinite. + attr_accessor :connect_retry + attr_accessor :send_timeout + attr_accessor :receive_timeout + attr_accessor :read_block_size + attr_accessor :protocol_retry_count + + attr_accessor :ssl_config + + attr_reader :test_loopback_http_response + + def initialize(client) + @client = client + @proxy = client.proxy + + @agent_name = nil + @from = nil + + @protocol_version = nil + @debug_dev = client.debug_dev + @socket_sync = true + @chunk_size = 4096 + + @connect_timeout = 60 + @connect_retry = 1 + @send_timeout = 120 + @receive_timeout = 60 # For each read_block_size bytes + @read_block_size = 1024 * 16 # follows net/http change in 1.8.7 + @protocol_retry_count = 5 + + @ssl_config = nil + @test_loopback_http_response = [] + + @sess_pool = [] + @sess_pool_mutex = Mutex.new + end + + def proxy=(proxy) + if proxy.nil? + @proxy = nil + else + @proxy = Site.new(proxy) + end + end + + def query(req, via_proxy) + req.body.chunk_size = @chunk_size + sess = open(req.header.request_uri, via_proxy) + begin + sess.query(req) + rescue + sess.close + raise + end + sess + end + + def reset(uri) + site = Site.new(uri) + close(site) + end + + def reset_all + close_all + end + + def keep(sess) + add_cached_session(sess) + end + + private + + def open(uri, via_proxy = false) + sess = nil + if cached = get_cached_session(uri) + sess = cached + else + sess = Session.new(@client, Site.new(uri), @agent_name, @from) + sess.proxy = via_proxy ? @proxy : nil + sess.socket_sync = @socket_sync + sess.requested_version = @protocol_version if @protocol_version + sess.connect_timeout = @connect_timeout + sess.connect_retry = @connect_retry + sess.send_timeout = @send_timeout + sess.receive_timeout = @receive_timeout + sess.read_block_size = @read_block_size + sess.protocol_retry_count = @protocol_retry_count + sess.ssl_config = @ssl_config + sess.debug_dev = @debug_dev + sess.test_loopback_http_response = @test_loopback_http_response + end + sess + end + + def close_all + @sess_pool_mutex.synchronize do + @sess_pool.each do |sess| + sess.close + end + end + @sess_pool.clear + end + + def close(dest) + if cached = get_cached_session(dest) + cached.close + true + else + false + end + end + + def get_cached_session(uri) + cached = nil + @sess_pool_mutex.synchronize do + new_pool = [] + @sess_pool.each do |s| + if s.dest.match(uri) + cached = s + else + new_pool << s + end + end + @sess_pool = new_pool + end + cached + end + + def add_cached_session(sess) + @sess_pool_mutex.synchronize do + @sess_pool << sess + end + end + end + + + # Wraps up OpenSSL::SSL::SSLSocket and offers debugging features. + class SSLSocketWrap + def initialize(socket, context, debug_dev = nil) + unless SSLEnabled + raise ConfigurationError.new('Ruby/OpenSSL module is required') + end + @context = context + @socket = socket + @ssl_socket = create_openssl_socket(@socket) + @debug_dev = debug_dev + end + + def ssl_connect + @ssl_socket.connect + end + + def post_connection_check(host) + verify_mode = @context.verify_mode || OpenSSL::SSL::VERIFY_NONE + if verify_mode == OpenSSL::SSL::VERIFY_NONE + return + elsif @ssl_socket.peer_cert.nil? and + check_mask(verify_mode, OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT) + raise OpenSSL::SSL::SSLError.new('no peer cert') + end + hostname = host.host + if @ssl_socket.respond_to?(:post_connection_check) and RUBY_VERSION > "1.8.4" + @ssl_socket.post_connection_check(hostname) + else + @context.post_connection_check(@ssl_socket.peer_cert, hostname) + end + end + + def peer_cert + @ssl_socket.peer_cert + end + + def close + @ssl_socket.close + @socket.close + end + + def closed? + @socket.closed? + end + + def eof? + @ssl_socket.eof? + end + + def gets(*args) + str = @ssl_socket.gets(*args) + debug(str) + str + end + + def read(*args) + str = @ssl_socket.read(*args) + debug(str) + str + end + + def readpartial(*args) + str = @ssl_socket.readpartial(*args) + debug(str) + str + end + + def <<(str) + rv = @ssl_socket.write(str) + debug(str) + rv + end + + def flush + @ssl_socket.flush + end + + def sync + @ssl_socket.sync + end + + def sync=(sync) + @ssl_socket.sync = sync + end + + private + + def check_mask(value, mask) + value & mask == mask + end + + def create_openssl_socket(socket) + ssl_socket = nil + if OpenSSL::SSL.const_defined?("SSLContext") + ctx = OpenSSL::SSL::SSLContext.new + @context.set_context(ctx) + ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ctx) + else + ssl_socket = OpenSSL::SSL::SSLSocket.new(socket) + @context.set_context(ssl_socket) + end + ssl_socket + end + + def debug(str) + @debug_dev << str if @debug_dev && str + end + end + + + # Wraps up a Socket for method interception. + module SocketWrap + def initialize(socket, *args) + super(*args) + @socket = socket + end + + def close + @socket.close + end + + def closed? + @socket.closed? + end + + def eof? + @socket.eof? + end + + def gets(*args) + @socket.gets(*args) + end + + def read(*args) + @socket.read(*args) + end + + def readpartial(*args) + # StringIO doesn't support :readpartial + if @socket.respond_to?(:readpartial) + @socket.readpartial(*args) + else + @socket.read(*args) + end + end + + def <<(str) + @socket << str + end + + def flush + @socket.flush + end + + def sync + @socket.sync + end + + def sync=(sync) + @socket.sync = sync + end + end + + + # Module for intercepting Socket methods and dumps in/out to given debugging + # device. debug_dev must respond to <<. + module DebugSocket + extend SocketWrap + + def debug_dev=(debug_dev) + @debug_dev = debug_dev + end + + def close + super + debug("! CONNECTION CLOSED\n") + end + + def gets(*args) + str = super + debug(str) + str + end + + def read(*args) + str = super + debug(str) + str + end + + def readpartial(*args) + str = super + debug(str) + str + end + + def <<(str) + super + debug(str) + end + + private + + def debug(str) + @debug_dev << str if str && @debug_dev + end + end + + + # Dummy Socket for emulating loopback test. + class LoopBackSocket + include SocketWrap + + def initialize(host, port, response) + super(response.is_a?(StringIO) ? response : StringIO.new(response)) + @host = host + @port = port + end + + def <<(str) + # ignored + end + end + + + # Manages a HTTP session with a Site. + class Session + include HTTPClient::Timeout + + # Destination site + attr_reader :dest + # Proxy site + attr_accessor :proxy + # Boolean value for Socket#sync + attr_accessor :socket_sync + # Requested protocol version + attr_accessor :requested_version + # Device for dumping log for debugging + attr_accessor :debug_dev + + attr_accessor :connect_timeout + attr_accessor :connect_retry + attr_accessor :send_timeout + attr_accessor :receive_timeout + attr_accessor :read_block_size + attr_accessor :protocol_retry_count + + attr_accessor :ssl_config + attr_reader :ssl_peer_cert + attr_accessor :test_loopback_http_response + + def initialize(client, dest, agent_name, from) + @client = client + @dest = dest + @proxy = nil + @socket_sync = true + @requested_version = nil + + @debug_dev = nil + + @connect_timeout = nil + @connect_retry = 1 + @send_timeout = nil + @receive_timeout = nil + @read_block_size = nil + @protocol_retry_count = 5 + + @ssl_config = nil + @ssl_peer_cert = nil + + @test_loopback_http_response = nil + + @agent_name = agent_name + @from = from + @state = :INIT + + @requests = [] + + @status = nil + @reason = nil + @headers = [] + + @socket = nil + @readbuf = nil + end + + # Send a request to the server + def query(req) + connect if @state == :INIT + req.header.request_via_proxy = !@proxy.nil? + begin + timeout(@send_timeout, SendTimeoutError) do + set_header(req) + req.dump(@socket) + # flush the IO stream as IO::sync mode is false + @socket.flush unless @socket_sync + end + rescue Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EPIPE + close + raise KeepAliveDisconnected.new + rescue HTTPClient::TimeoutError + close + raise + rescue + if SSLEnabled and $!.is_a?(OpenSSL::SSL::SSLError) + raise KeepAliveDisconnected.new + else + raise + end + end + + @state = :META if @state == :WAIT + @next_connection = nil + @requests.push(req) + end + + def close + if !@socket.nil? and !@socket.closed? + # @socket.flush may block when it the socket is already closed by + # foreign host and the client runs under MT-condition. + @socket.close + end + @state = :INIT + end + + def closed? + @state == :INIT + end + + def get_header + begin + if @state != :META + raise RuntimeError.new("get_status must be called at the beginning of a session") + end + read_header + rescue + close + raise + end + [@version, @status, @reason, @headers] + end + + def eof? + if !@content_length.nil? + @content_length == 0 + else + @socket.closed? or @socket.eof? + end + end + + def get_body(&block) + begin + read_header if @state == :META + return nil if @state != :DATA + if @chunked + read_body_chunked(&block) + elsif @content_length + read_body_length(&block) + else + read_body_rest(&block) + end + rescue + close + raise + end + if eof? + if @next_connection + @state = :WAIT + else + close + end + end + nil + end + + private + + def set_header(req) + if @requested_version + if /^(?:HTTP\/|)(\d+.\d+)$/ =~ @requested_version + req.version = $1.to_f + end + end + if @agent_name + req.header.set('User-Agent', "#{@agent_name} #{LIB_NAME}") + end + if @from + req.header.set('From', @from) + end + req.header.set('Date', Time.now.httpdate) + end + + # Connect to the server + def connect + site = @proxy || @dest + retry_number = 0 + begin + timeout(@connect_timeout, ConnectTimeoutError) do + @socket = create_socket(site) + if @dest.scheme == 'https' + if @socket.is_a?(LoopBackSocket) + connect_ssl_proxy(@socket, URI.parse(@dest.to_s)) if @proxy + else + @socket = create_ssl_socket(@socket) + connect_ssl_proxy(@socket, URI.parse(@dest.to_s)) if @proxy + @socket.ssl_connect + @socket.post_connection_check(@dest) + @ssl_peer_cert = @socket.peer_cert + end + end + # Use Ruby internal buffering instead of passing data immediately + # to the underlying layer + # => we need to to call explicitly flush on the socket + @socket.sync = @socket_sync + end + rescue RetryableResponse + retry_number += 1 + if retry_number < @protocol_retry_count + retry + end + raise BadResponseError.new("connect to the server failed with status #{@status} #{@reason}") + rescue TimeoutError + if @connect_retry == 0 + retry + else + retry_number += 1 + retry if retry_number < @connect_retry + end + close + raise + end + @state = :WAIT + end + + def create_socket(site) + socket = nil + begin + @debug_dev << "! CONNECT TO #{site.host}:#{site.port}\n" if @debug_dev + if str = @test_loopback_http_response.shift + socket = LoopBackSocket.new(site.host, site.port, str) + else + socket = TCPSocket.new(site.host, site.port) + end + if @debug_dev + @debug_dev << "! CONNECTION ESTABLISHED\n" + socket.extend(DebugSocket) + socket.debug_dev = @debug_dev + end + rescue SystemCallError => e + e.message << " (#{site})" + raise + rescue SocketError => e + e.message << " (#{site})" + raise + end + socket + end + + # wrap socket with OpenSSL. + def create_ssl_socket(raw_socket) + SSLSocketWrap.new(raw_socket, @ssl_config, @debug_dev) + end + + def connect_ssl_proxy(socket, uri) + req = HTTP::Message.new_connect_request(uri) + @client.request_filter.each do |filter| + filter.filter_request(req) + end + set_header(req) + req.dump(@socket) + @socket.flush unless @socket_sync + res = HTTP::Message.new_response('') + parse_header + res.version, res.status, res.reason = @version, @status, @reason + @headers.each do |key, value| + res.header.set(key, value) + end + commands = @client.request_filter.collect { |filter| + filter.filter_response(req, res) + } + if commands.find { |command| command == :retry } + raise RetryableResponse.new + end + unless @status == 200 + raise BadResponseError.new("connect to ssl proxy failed with status #{@status} #{@reason}", res) + end + end + + # Read status block. + def read_header + @content_length = nil + @chunked = false + @chunk_length = 0 + parse_header + + # Head of the request has been parsed. + @state = :DATA + req = @requests.shift + + if req.header.request_method == 'HEAD' + @content_length = 0 + if @next_connection + @state = :WAIT + else + close + end + end + @next_connection = false unless @content_length + end + + StatusParseRegexp = %r(\AHTTP/(\d+\.\d+)\s+(\d\d\d)\s*([^\r\n]+)?\r?\n\z) + def parse_header + timeout(@receive_timeout, ReceiveTimeoutError) do + begin + initial_line = @socket.gets("\n") + if initial_line.nil? + raise KeepAliveDisconnected.new + end + if StatusParseRegexp !~ initial_line + @version = '0.9' + @status = nil + @reason = nil + @next_connection = false + @content_length = nil + @readbuf = initial_line + break + end + @version, @status, @reason = $1, $2.to_i, $3 + @next_connection = HTTP::Message.keep_alive_enabled?(@version.to_f) + @headers = [] + while true + line = @socket.gets("\n") + unless line + raise BadResponseError.new('unexpected EOF') + end + line.chomp! + break if line.empty? + key, value = line.split(/\s*:\s*/, 2) + parse_keepalive_header(key, value) + @headers << [key, value] + end + end while (@version == '1.1' && @status == 100) + end + end + + def parse_keepalive_header(key, value) + key = key.downcase + if key == 'content-length' + @content_length = value.to_i + elsif key == 'transfer-encoding' and value.downcase == 'chunked' + @chunked = true + @chunk_length = 0 + @content_length = nil + elsif key == 'connection' or key == 'proxy-connection' + if value.downcase == 'keep-alive' + @next_connection = true + else + @next_connection = false + end + end + end + + def read_body_length(&block) + return nil if @content_length == 0 + buf = '' + while true + maxbytes = @read_block_size + maxbytes = @content_length if maxbytes > @content_length + timeout(@receive_timeout, ReceiveTimeoutError) do + begin + @socket.readpartial(maxbytes, buf) + rescue EOFError + buf = nil + end + end + if buf && buf.length > 0 + @content_length -= buf.length + yield buf + else + @content_length = 0 + end + return if @content_length == 0 + end + end + + RS = "\r\n" + def read_body_chunked(&block) + buf = '' + while true + len = @socket.gets(RS) + @chunk_length = len.hex + if @chunk_length == 0 + @content_length = 0 + @socket.gets(RS) + return + end + timeout(@receive_timeout, ReceiveTimeoutError) do + @socket.read(@chunk_length + 2, buf) + end + unless buf.empty? + yield buf.slice(0, @chunk_length) + end + end + end + + def read_body_rest + if @readbuf and @readbuf.length > 0 + yield @readbuf + @readbuf = nil + end + buf = '' + while true + timeout(@receive_timeout, ReceiveTimeoutError) do + begin + @socket.readpartial(@read_block_size, buf) + rescue EOFError + buf = nil + end + end + if buf && buf.length > 0 + yield buf + else + return + end + end + end + end + + +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/ssl_config.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/ssl_config.rb new file mode 100644 index 00000000..2bda00ee --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/ssl_config.rb @@ -0,0 +1,417 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + + +class HTTPClient + + begin + require 'openssl' + SSLEnabled = true + rescue LoadError + SSLEnabled = false + end + + # Represents SSL configuration for HTTPClient instance. + # The implementation depends on OpenSSL. + # + # == Trust Anchor Control + # + # SSLConfig loads 'httpclient/cacert.p7s' as a trust anchor + # (trusted certificate(s)) with set_trust_ca in initialization time. + # This means that HTTPClient instance trusts some CA certificates by default, + # like Web browsers. 'httpclient/cacert.p7s' is created by the author and + # included in released package. + # + # 'cacert.p7s' is automatically generated from JDK 1.6. + # + # You may want to change trust anchor by yourself. Call clear_cert_store + # then set_trust_ca for that purpose. + class SSLConfig + include OpenSSL if SSLEnabled + + # OpenSSL::X509::Certificate:: certificate for SSL client authenticateion. + # nil by default. (no client authenticateion) + attr_reader :client_cert + # OpenSSL::PKey::PKey:: private key for SSL client authentication. + # nil by default. (no client authenticateion) + attr_reader :client_key + + # A number which represents OpenSSL's verify mode. Default value is + # OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT. + attr_reader :verify_mode + # A number of verify depth. Certification path which length is longer than + # this depth is not allowed. + attr_reader :verify_depth + # A callback handler for custom certificate verification. nil by default. + # If the handler is set, handler.call is invoked just after general + # OpenSSL's verification. handler.call is invoked with 2 arguments, + # ok and ctx; ok is a result of general OpenSSL's verification. ctx is a + # OpenSSL::X509::StoreContext. + attr_reader :verify_callback + # SSL timeout in sec. nil by default. + attr_reader :timeout + # A number of OpenSSL's SSL options. Default value is + # OpenSSL::SSL::OP_ALL | OpenSSL::SSL::OP_NO_SSLv2 + attr_reader :options + # A String of OpenSSL's cipher configuration. Default value is + # ALL:!ADH:!LOW:!EXP:!MD5:+SSLv2:@STRENGTH + # See ciphers(1) man in OpenSSL for more detail. + attr_reader :ciphers + + # OpenSSL::X509::X509::Store used for verification. You can reset the + # store with clear_cert_store and set the new store with cert_store=. + attr_reader :cert_store # don't use if you don't know what it is. + + # For server side configuration. Ignore this. + attr_reader :client_ca # :nodoc: + + # Creates a SSLConfig. + def initialize(client) + return unless SSLEnabled + @client = client + @cert_store = X509::Store.new + @client_cert = @client_key = @client_ca = nil + @verify_mode = SSL::VERIFY_PEER | SSL::VERIFY_FAIL_IF_NO_PEER_CERT + @verify_depth = nil + @verify_callback = nil + @dest = nil + @timeout = nil + @options = defined?(SSL::OP_ALL) ? SSL::OP_ALL | SSL::OP_NO_SSLv2 : nil + @ciphers = "ALL:!ADH:!LOW:!EXP:!MD5:+SSLv2:@STRENGTH" + load_cacerts + end + + # Sets certificate (OpenSSL::X509::Certificate) for SSL client + # authentication. + # client_key and client_cert must be a pair. + # + # Calling this method resets all existing sessions. + def client_cert=(client_cert) + @client_cert = client_cert + change_notify + end + + # Sets private key (OpenSSL::PKey::PKey) for SSL client authentication. + # client_key and client_cert must be a pair. + # + # Calling this method resets all existing sessions. + def client_key=(client_key) + @client_key = client_key + change_notify + end + + # Sets certificate and private key for SSL client authentication. + # cert_file:: must be a filename of PEM/DER formatted file. + # key_file:: must be a filename of PEM/DER formatted file. Key must be an + # RSA key. If you want to use other PKey algorithm, + # use client_key=. + # + # Calling this method resets all existing sessions. + def set_client_cert_file(cert_file, key_file) + @client_cert = X509::Certificate.new(File.open(cert_file).read) + @client_key = PKey::RSA.new(File.open(key_file).read) + change_notify + end + + # Drops current certificate store (OpenSSL::X509::Store) for SSL and create + # new one for the next session. + # + # Calling this method resets all existing sessions. + def clear_cert_store + @cert_store = X509::Store.new + change_notify + end + + # Sets new certificate store (OpenSSL::X509::Store). + # don't use if you don't know what it is. + # + # Calling this method resets all existing sessions. + def cert_store=(cert_store) + @cert_store = cert_store + change_notify + end + + # Sets trust anchor certificate(s) for verification. + # trust_ca_file_or_hashed_dir:: a filename of a PEM/DER formatted + # OpenSSL::X509::Certificate or + # a 'c-rehash'eddirectory name which stores + # trusted certificate files. + # + # Calling this method resets all existing sessions. + def set_trust_ca(trust_ca_file_or_hashed_dir) + if FileTest.directory?(trust_ca_file_or_hashed_dir) + @cert_store.add_path(trust_ca_file_or_hashed_dir) + else + @cert_store.add_file(trust_ca_file_or_hashed_dir) + end + change_notify + end + + # Adds CRL for verification. + # crl:: a OpenSSL::X509::CRL or a filename of a PEM/DER formatted + # OpenSSL::X509::CRL. + # + # Calling this method resets all existing sessions. + def set_crl(crl) + unless crl.is_a?(X509::CRL) + crl = X509::CRL.new(File.open(crl).read) + end + @cert_store.add_crl(crl) + @cert_store.flags = X509::V_FLAG_CRL_CHECK | X509::V_FLAG_CRL_CHECK_ALL + change_notify + end + + # Sets verify mode of OpenSSL. New value must be a combination of + # constants OpenSSL::SSL::VERIFY_* + # + # Calling this method resets all existing sessions. + def verify_mode=(verify_mode) + @verify_mode = verify_mode + change_notify + end + + # Sets verify depth. New value must be a number. + # + # Calling this method resets all existing sessions. + def verify_depth=(verify_depth) + @verify_depth = verify_depth + change_notify + end + + # Sets callback handler for custom certificate verification. + # See verify_callback. + # + # Calling this method resets all existing sessions. + def verify_callback=(verify_callback) + @verify_callback = verify_callback + change_notify + end + + # Sets SSL timeout in sec. + # + # Calling this method resets all existing sessions. + def timeout=(timeout) + @timeout = timeout + change_notify + end + + # Sets SSL options. New value must be a combination of # constants + # OpenSSL::SSL::OP_* + # + # Calling this method resets all existing sessions. + def options=(options) + @options = options + change_notify + end + + # Sets cipher configuration. New value must be a String. + # + # Calling this method resets all existing sessions. + def ciphers=(ciphers) + @ciphers = ciphers + change_notify + end + + def client_ca=(client_ca) # :nodoc: + @client_ca = client_ca + change_notify + end + + # interfaces for SSLSocketWrap. + def set_context(ctx) # :nodoc: + # Verification: Use Store#verify_callback instead of SSLContext#verify*? + ctx.cert_store = @cert_store + ctx.verify_mode = @verify_mode + ctx.verify_depth = @verify_depth if @verify_depth + ctx.verify_callback = @verify_callback || method(:default_verify_callback) + # SSL config + ctx.cert = @client_cert + ctx.key = @client_key + ctx.client_ca = @client_ca + ctx.timeout = @timeout + ctx.options = @options + ctx.ciphers = @ciphers + end + + # post connection check proc for ruby < 1.8.5. + # this definition must match with the one in ext/openssl/lib/openssl/ssl.rb + def post_connection_check(peer_cert, hostname) # :nodoc: + check_common_name = true + cert = peer_cert + cert.extensions.each{|ext| + next if ext.oid != "subjectAltName" + ext.value.split(/,\s+/).each{|general_name| + if /\ADNS:(.*)/ =~ general_name + check_common_name = false + reg = Regexp.escape($1).gsub(/\\\*/, "[^.]+") + return true if /\A#{reg}\z/i =~ hostname + elsif /\AIP Address:(.*)/ =~ general_name + check_common_name = false + return true if $1 == hostname + end + } + } + if check_common_name + cert.subject.to_a.each{|oid, value| + if oid == "CN" + reg = Regexp.escape(value).gsub(/\\\*/, "[^.]+") + return true if /\A#{reg}\z/i =~ hostname + end + } + end + raise SSL::SSLError, "hostname was not match with the server certificate" + end + + # Default callback for verification: only dumps error. + def default_verify_callback(is_ok, ctx) + if $DEBUG + puts "#{ is_ok ? 'ok' : 'ng' }: #{ctx.current_cert.subject}" + end + if !is_ok + depth = ctx.error_depth + code = ctx.error + msg = ctx.error_string + STDERR.puts "at depth #{depth} - #{code}: #{msg}" + end + is_ok + end + + # Sample callback method: CAUTION: does not check CRL/ARL. + def sample_verify_callback(is_ok, ctx) + unless is_ok + depth = ctx.error_depth + code = ctx.error + msg = ctx.error_string + STDERR.puts "at depth #{depth} - #{code}: #{msg}" if $DEBUG + return false + end + + cert = ctx.current_cert + self_signed = false + ca = false + pathlen = nil + server_auth = true + self_signed = (cert.subject.cmp(cert.issuer) == 0) + + # Check extensions whatever its criticality is. (sample) + cert.extensions.each do |ex| + case ex.oid + when 'basicConstraints' + /CA:(TRUE|FALSE), pathlen:(\d+)/ =~ ex.value + ca = ($1 == 'TRUE') + pathlen = $2.to_i + when 'keyUsage' + usage = ex.value.split(/\s*,\s*/) + ca = usage.include?('Certificate Sign') + server_auth = usage.include?('Key Encipherment') + when 'extendedKeyUsage' + usage = ex.value.split(/\s*,\s*/) + server_auth = usage.include?('Netscape Server Gated Crypto') + when 'nsCertType' + usage = ex.value.split(/\s*,\s*/) + ca = usage.include?('SSL CA') + server_auth = usage.include?('SSL Server') + end + end + + if self_signed + STDERR.puts 'self signing CA' if $DEBUG + return true + elsif ca + STDERR.puts 'middle level CA' if $DEBUG + return true + elsif server_auth + STDERR.puts 'for server authentication' if $DEBUG + return true + end + + return false + end + + private + + def change_notify + @client.reset_all + end + + def load_cacerts + [ + [DIST_CERT, 'cacert.p7s'], + [DIST_CERT_SHA1, 'cacert_sha1.p7s'] + ].each do |cert_str, ca_file| + file = File.join(File.dirname(__FILE__), ca_file) + if File.exist?(file) + p7 = PKCS7.read_smime(File.open(file) { |f| f.read }) + selfcert = X509::Certificate.new(cert_str) + store = X509::Store.new + store.add_cert(selfcert) + if (p7.verify(nil, store, p7.data, 0)) + set_trust_ca(file) + return + end + end + end + STDERR.puts("cacerts loading failed") + end + + DIST_CERT =<<__DIST_CERT__ +-----BEGIN CERTIFICATE----- +MIID/TCCAuWgAwIBAgIBATANBgkqhkiG9w0BAQ0FADBLMQswCQYDVQQGEwJKUDER +MA8GA1UECgwIY3Rvci5vcmcxFDASBgNVBAsMC0RldmVsb3BtZW50MRMwEQYDVQQD +DApodHRwY2xpZW50MB4XDTA5MDUyMTEyMzkwNVoXDTM3MTIzMTIzNTk1OVowSzEL +MAkGA1UEBhMCSlAxETAPBgNVBAoMCGN0b3Iub3JnMRQwEgYDVQQLDAtEZXZlbG9w +bWVudDETMBEGA1UEAwwKaHR0cGNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAM2PlkdTH97zvIHoPIMj87wnNvpqIQUD7L/hlysO0XBsmR/XZUeU +ZKB10JQqMXviWpTnU9KU6xGTx3EI4wfd2dpLwH/d4d7K4LngW1kY7kJlZeJhakno +GzQ40RSI9WkQ0R9KOE888f7OkTBafcL8UyWFVIMhQBw2d9iNl4Jc69QojayCDoSX +XbbEP0n8yi7HwIU3RFuX6DtMpOx4/1K7Z002ccOGJ3J9kHgeDQSQtF42cQYC7qj2 +67I/OQgnB7ycxTCP0E7bdXQg+zqsngrhaoNn/+I+CoO7nD4t4uQ+B4agALh4PPxs +bQD9MCL+VurNGLYv0HVd+ZlLblpddC9PLTsCAwEAAaOB6zCB6DAPBgNVHRMBAf8E +BTADAQH/MDEGCWCGSAGG+EIBDQQkFiJSdWJ5L09wZW5TU0wgR2VuZXJhdGVkIENl +cnRpZmljYXRlMB0GA1UdDgQWBBRAnB6XlMoOcm7HVAw+JWxY205PHTAOBgNVHQ8B +Af8EBAMCAQYwcwYDVR0jBGwwaoAUQJwel5TKDnJux1QMPiVsWNtOTx2hT6RNMEsx +CzAJBgNVBAYTAkpQMREwDwYDVQQKDAhjdG9yLm9yZzEUMBIGA1UECwwLRGV2ZWxv +cG1lbnQxEzARBgNVBAMMCmh0dHBjbGllbnSCAQEwDQYJKoZIhvcNAQENBQADggEB +ABVFepybD5XqsBnOn/oDHvK0xAPMF4Ap4Ht1yMQLObg8paVhANSdqIevPlCr/mPL +DRjcy+J1fCnE6lCfsfLdTgAjirqt8pm92NccxmJ8hTmMd3LWC1n+eYWaolqTCVRM +Bpe8UY9enyXrFoudHlr9epr18E6As6VrCSfpXFZkD9WHVSWpzkB3qATu5qcDCzCH +bI0755Mdm/1hKJCD4l69h3J3OhRIEUPJfHnPvM5wtiyC2dcE9itwE/wdVzBJeIBX +JQm+Qj+K8qXcRTzZZGIBjw2n46xJgW6YncNCHU/WWfNCYwdkngHS/aN8IbEjhCwf +viXFisVrDN/+pZZGMf67ZaY= +-----END CERTIFICATE----- +__DIST_CERT__ + + DIST_CERT_SHA1 =<<__DIST_CERT__ +-----BEGIN CERTIFICATE----- +MIID/TCCAuWgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJKUDER +MA8GA1UECgwIY3Rvci5vcmcxFDASBgNVBAsMC0RldmVsb3BtZW50MRMwEQYDVQQD +DApodHRwY2xpZW50MB4XDTA5MDYyNTE0MjUzN1oXDTEwMTIzMTIzNTk1OVowSzEL +MAkGA1UEBhMCSlAxETAPBgNVBAoMCGN0b3Iub3JnMRQwEgYDVQQLDAtEZXZlbG9w +bWVudDETMBEGA1UEAwwKaHR0cGNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAM2PlkdTH97zvIHoPIMj87wnNvpqIQUD7L/hlysO0XBsmR/XZUeU +ZKB10JQqMXviWpTnU9KU6xGTx3EI4wfd2dpLwH/d4d7K4LngW1kY7kJlZeJhakno +GzQ40RSI9WkQ0R9KOE888f7OkTBafcL8UyWFVIMhQBw2d9iNl4Jc69QojayCDoSX +XbbEP0n8yi7HwIU3RFuX6DtMpOx4/1K7Z002ccOGJ3J9kHgeDQSQtF42cQYC7qj2 +67I/OQgnB7ycxTCP0E7bdXQg+zqsngrhaoNn/+I+CoO7nD4t4uQ+B4agALh4PPxs +bQD9MCL+VurNGLYv0HVd+ZlLblpddC9PLTsCAwEAAaOB6zCB6DAPBgNVHRMBAf8E +BTADAQH/MDEGCWCGSAGG+EIBDQQkFiJSdWJ5L09wZW5TU0wgR2VuZXJhdGVkIENl +cnRpZmljYXRlMB0GA1UdDgQWBBRAnB6XlMoOcm7HVAw+JWxY205PHTAOBgNVHQ8B +Af8EBAMCAQYwcwYDVR0jBGwwaoAUQJwel5TKDnJux1QMPiVsWNtOTx2hT6RNMEsx +CzAJBgNVBAYTAkpQMREwDwYDVQQKDAhjdG9yLm9yZzEUMBIGA1UECwwLRGV2ZWxv +cG1lbnQxEzARBgNVBAMMCmh0dHBjbGllbnSCAQIwDQYJKoZIhvcNAQEFBQADggEB +AGKhgByl/ur6SBFFKJcISJONFRaxf2ji0l6ut9XO1H2BSOSRjUbsFDWdWZG+D24Q +JKKseSWPWAC5uHq00sBWkvmtip+duESPeDEdumdBhdiUUgGamW2Ew2y4yAdAVDeG +t1p2fs8SylQN6AMTG/+R+MGHxhvg+UELYLcvAjjcDW2VhDQaJ1eFEfcMW1zRtvvh +LJmVErouwFKyAjwhbF6sNxmToSnbO1ciWwIILMsOBNHMETCp+SzkRDIRWIkm6m+q +RwRyYoHysODGvnu8VXS1hGRr2GIxeBga7dAGa2VLE/iUQ0d4lEskYU+6C4ZLyAWF +O89dvLNRzpL10MaWCYVREks= +-----END CERTIFICATE----- +__DIST_CERT__ + end + + +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/timeout.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/timeout.rb new file mode 100644 index 00000000..3eb7e930 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/timeout.rb @@ -0,0 +1,136 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + + +require 'timeout' +require 'thread' + + +class HTTPClient + + + # Replaces timeout.rb to avoid Thread creation and scheduling overhead. + # + # You should check another timeout replace in WEBrick. + # See lib/webrick/utils.rb in ruby/1.9. + # + # About this implementation: + # * Do not create Thread for each timeout() call. Just create 1 Thread for + # timeout scheduler. + # * Do not wakeup the scheduler thread so often. Let scheduler thread sleep + # until the nearest period. + class TimeoutScheduler + + # Represents timeout period. + class Period + attr_reader :thread, :time + + # Creates new Period. + def initialize(thread, time, ex) + @thread, @time, @ex = thread, time, ex + @lock = Mutex.new + end + + # Raises if thread exists and alive. + def raise(message) + @lock.synchronize do + if @thread and @thread.alive? + @thread.raise(@ex, message) + end + end + end + + # Cancel this Period. Mutex is needed to avoid too-late exception. + def cancel + @lock.synchronize do + @thread = nil + end + end + end + + # Creates new TimeoutScheduler. + def initialize + @pool = {} + @next = nil + @thread = start_timer_thread + end + + # Registers new timeout period. + def register(thread, sec, ex) + period = Period.new(thread, Time.now + sec, ex || ::Timeout::Error) + @pool[period] = true + if @next.nil? or period.time < @next + begin + @thread.wakeup + rescue ThreadError + # Thread may be dead by fork. + @thread = start_timer_thread + end + end + period + end + + # Cancels the given period. + def cancel(period) + @pool.delete(period) + period.cancel + end + + private + + def start_timer_thread + thread = Thread.new { + while true + if @pool.empty? + @next = nil + sleep + else + min, = @pool.min { |a, b| a[0].time <=> b[0].time } + @next = min.time + sec = @next - Time.now + if sec > 0 + sleep(sec) + end + end + now = Time.now + @pool.keys.each do |period| + if period.time < now + period.raise('execution expired') + cancel(period) + end + end + end + } + Thread.pass while thread.status != 'sleep' + thread + end + end + + class << self + # CAUTION: caller must aware of race condition. + def timeout_scheduler + @timeout_scheduler ||= TimeoutScheduler.new + end + end + timeout_scheduler # initialize at first time. + + module Timeout + def timeout(sec, ex = nil, &block) + return yield if sec == nil or sec.zero? + scheduler = nil + begin + scheduler = HTTPClient.timeout_scheduler + period = scheduler.register(Thread.current, sec, ex) + yield(sec) + ensure + scheduler.cancel(period) if scheduler and period + end + end + end + + +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/util.rb b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/util.rb new file mode 100644 index 00000000..4f13c6ec --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/httpclient/util.rb @@ -0,0 +1,86 @@ +# HTTPClient - HTTP client library. +# Copyright (C) 2000-2009 NAKAMURA, Hiroshi . +# +# This program is copyrighted free software by NAKAMURA, Hiroshi. You can +# redistribute it and/or modify it under the same terms of Ruby's license; +# either the dual license version in 2003, or any later version. + + +require 'uri' + + +class HTTPClient + + + # A module for common function. + module Util + # Keyword argument helper. + # args:: given arguments. + # *field:: a list of arguments to be extracted. + # + # You can extract 3 arguments (a, b, c) with: + # + # include Util + # def my_method(*args) + # a, b, c = keyword_argument(args, :a, :b, :c) + # ... + # end + # my_method(1, 2, 3) + # my_method(:b => 2, :a = 1) + # + # instead of; + # + # def my_method(a, b, c) + # ... + # end + # + def keyword_argument(args, *field) + if args.size == 1 and args[0].is_a?(Hash) + args[0].values_at(*field) + else + args + end + end + + # Gets an URI instance. + def urify(uri) + if uri.nil? + nil + elsif uri.is_a?(URI) + uri + else + URI.parse(uri.to_s) + end + end + + # Returns true if the given 2 URIs have a part_of relationship. + # * the same scheme + # * the same host String (no host resolution or IP-addr conversion) + # * the same port number + # * target URI's path starts with base URI's path. + def uri_part_of(uri, part) + ((uri.scheme == part.scheme) and + (uri.host == part.host) and + (uri.port == part.port) and + uri.path.upcase.index(part.path.upcase) == 0) + end + module_function :uri_part_of + + # Returns parent directory URI of the given URI. + def uri_dirname(uri) + uri = uri.clone + uri.path = uri.path.sub(/\/[^\/]*\z/, '/') + uri + end + module_function :uri_dirname + + # Finds a value of a Hash. + def hash_find_value(hash, &block) + v = hash.find(&block) + v ? v[1] : nil + end + module_function :hash_find_value + end + + +end diff --git a/vendor/gems/gems/httpclient-2.1.5.2/lib/tags b/vendor/gems/gems/httpclient-2.1.5.2/lib/tags new file mode 100644 index 00000000..6ca07f81 --- /dev/null +++ b/vendor/gems/gems/httpclient-2.1.5.2/lib/tags @@ -0,0 +1,908 @@ +::HTTP httpclient/http.rb /^module HTTP/ +::HTTP::Message httpclient/http.rb /^ class Message/ +::HTTP::Message#HTTP::Message.new httpclient/http.rb /^ def initialize/ +::HTTP::Message#body httpclient/http.rb /^ attr_reader :body/ +::HTTP::Message#body= httpclient/http.rb /^ def body=/ +::HTTP::Message#code httpclient/http.rb /^ alias code/ +::HTTP::Message#content httpclient/http.rb /^ def content/ +::HTTP::Message#contenttype httpclient/http.rb /^ def contenttype/ +::HTTP::Message#contenttype= httpclient/http.rb /^ def contenttype=/ +::HTTP::Message#dump httpclient/http.rb /^ def dump/ +::HTTP::Message#header httpclient/http.rb /^ attr_accessor :header/ +::HTTP::Message#peer_cert httpclient/http.rb /^ attr_accessor :peer_cert/ +::HTTP::Message#reason httpclient/http.rb /^ def reason/ +::HTTP::Message#reason= httpclient/http.rb /^ def reason=/ +::HTTP::Message#status httpclient/http.rb /^ def status/ +::HTTP::Message#status= httpclient/http.rb /^ def status=/ +::HTTP::Message#status_code httpclient/http.rb /^ alias status_code/ +::HTTP::Message#version httpclient/http.rb /^ def version/ +::HTTP::Message#version= httpclient/http.rb /^ def version=/ +::HTTP::Message.create_query_part_str httpclient/http.rb /^ def create_query_part_str/ +::HTTP::Message.escape httpclient/http.rb /^ def escape/ +::HTTP::Message.escape_query httpclient/http.rb /^ def escape_query/ +::HTTP::Message.file? httpclient/http.rb /^ def file?/ +::HTTP::Message.get_mime_type_func httpclient/http.rb /^ alias get_mime_type_func/ +::HTTP::Message.internal_mime_type httpclient/http.rb /^ def internal_mime_type/ +::HTTP::Message.keep_alive_enabled? httpclient/http.rb /^ def keep_alive_enabled?/ +::HTTP::Message.mime_type httpclient/http.rb /^ def mime_type/ +::HTTP::Message.mime_type_handler httpclient/http.rb /^ def mime_type_handler/ +::HTTP::Message.mime_type_handler= httpclient/http.rb /^ def mime_type_handler=/ +::HTTP::Message.multiparam_query? httpclient/http.rb /^ def multiparam_query?/ +::HTTP::Message.new_connect_request httpclient/http.rb /^ def new_connect_request/ +::HTTP::Message.new_request httpclient/http.rb /^ def new_request/ +::HTTP::Message.new_response httpclient/http.rb /^ def new_response/ +::HTTP::Message.set_mime_type_func httpclient/http.rb /^ alias set_mime_type_func/ +::HTTP::Message::Body httpclient/http.rb /^ class Body/ +::HTTP::Message::Body#HTTP::Message::Body.new httpclient/http.rb /^ def initialize/ +::HTTP::Message::Body#build_query_multipart_str httpclient/http.rb /^ def build_query_multipart_str/ +::HTTP::Message::Body#chunk_size httpclient/http.rb /^ attr_accessor :chunk_size/ +::HTTP::Message::Body#content httpclient/http.rb /^ def content/ +::HTTP::Message::Body#dump httpclient/http.rb /^ def dump/ +::HTTP::Message::Body#dump_chunk httpclient/http.rb /^ def dump_chunk/ +::HTTP::Message::Body#dump_chunk_size httpclient/http.rb /^ def dump_chunk_size/ +::HTTP::Message::Body#dump_chunked httpclient/http.rb /^ def dump_chunked/ +::HTTP::Message::Body#dump_chunks httpclient/http.rb /^ def dump_chunks/ +::HTTP::Message::Body#dump_last_chunk httpclient/http.rb /^ def dump_last_chunk/ +::HTTP::Message::Body#init_request httpclient/http.rb /^ def init_request/ +::HTTP::Message::Body#init_response httpclient/http.rb /^ def init_response/ +::HTTP::Message::Body#params_from_file httpclient/http.rb /^ def params_from_file/ +::HTTP::Message::Body#remember_pos httpclient/http.rb /^ def remember_pos/ +::HTTP::Message::Body#reset_pos httpclient/http.rb /^ def reset_pos/ +::HTTP::Message::Body#set_content httpclient/http.rb /^ def set_content/ +::HTTP::Message::Body#size httpclient/http.rb /^ attr_reader :size/ +::HTTP::Message::Body::Parts httpclient/http.rb /^ class Parts/ +::HTTP::Message::Body::Parts#HTTP::Message::Body::Parts.new httpclient/http.rb /^ def initialize/ +::HTTP::Message::Body::Parts#add httpclient/http.rb /^ def add/ +::HTTP::Message::Body::Parts#parts httpclient/http.rb /^ def parts/ +::HTTP::Message::Body::Parts#size httpclient/http.rb /^ attr_reader :size/ +::HTTP::Message::Headers httpclient/http.rb /^ class Headers/ +::HTTP::Message::Headers#HTTP::Message::Headers.new httpclient/http.rb /^ def initialize/ +::HTTP::Message::Headers#[] httpclient/http.rb /^ def []/ +::HTTP::Message::Headers#[]= httpclient/http.rb /^ def []=/ +::HTTP::Message::Headers#add httpclient/http.rb /^ def add/ +::HTTP::Message::Headers#all httpclient/http.rb /^ def all/ +::HTTP::Message::Headers#body_charset httpclient/http.rb /^ attr_accessor :body_charset # :nodoc:/ +::HTTP::Message::Headers#body_date httpclient/http.rb /^ attr_accessor :body_date # :nodoc:/ +::HTTP::Message::Headers#body_size httpclient/http.rb /^ attr_reader :body_size/ +::HTTP::Message::Headers#body_size= httpclient/http.rb /^ def body_size=/ +::HTTP::Message::Headers#body_type httpclient/http.rb /^ attr_accessor :body_type # :nodoc:/ +::HTTP::Message::Headers#charset_label httpclient/http.rb /^ def charset_label/ +::HTTP::Message::Headers#chunked httpclient/http.rb /^ attr_accessor :chunked/ +::HTTP::Message::Headers#contenttype httpclient/http.rb /^ def contenttype/ +::HTTP::Message::Headers#contenttype= httpclient/http.rb /^ def contenttype=/ +::HTTP::Message::Headers#create_query_uri httpclient/http.rb /^ def create_query_uri/ +::HTTP::Message::Headers#delete httpclient/http.rb /^ def delete/ +::HTTP::Message::Headers#dump httpclient/http.rb /^ def dump/ +::HTTP::Message::Headers#get httpclient/http.rb /^ def get/ +::HTTP::Message::Headers#http_version httpclient/http.rb /^ attr_accessor :http_version/ +::HTTP::Message::Headers#init_connect_request httpclient/http.rb /^ def init_connect_request/ +::HTTP::Message::Headers#init_request httpclient/http.rb /^ def init_request/ +::HTTP::Message::Headers#init_response httpclient/http.rb /^ def init_response/ +::HTTP::Message::Headers#reason_phrase httpclient/http.rb /^ attr_accessor :reason_phrase/ +::HTTP::Message::Headers#request_line httpclient/http.rb /^ def request_line/ +::HTTP::Message::Headers#request_method httpclient/http.rb /^ attr_reader :request_method/ +::HTTP::Message::Headers#request_query httpclient/http.rb /^ attr_accessor :request_query/ +::HTTP::Message::Headers#request_uri httpclient/http.rb /^ attr_accessor :request_uri/ +::HTTP::Message::Headers#request_via_proxy httpclient/http.rb /^ attr_accessor :request_via_proxy/ +::HTTP::Message::Headers#response_status_line httpclient/http.rb /^ def response_status_line/ +::HTTP::Message::Headers#set httpclient/http.rb /^ def set/ +::HTTP::Message::Headers#set_header httpclient/http.rb /^ def set_header/ +::HTTP::Message::Headers#set_request_header httpclient/http.rb /^ def set_request_header/ +::HTTP::Message::Headers#set_response_header httpclient/http.rb /^ def set_response_header/ +::HTTP::Message::Headers#status_code httpclient/http.rb /^ attr_reader :status_code/ +::HTTP::Message::Headers#status_code= httpclient/http.rb /^ def status_code=/ +::HTTP::Status httpclient/http.rb /^ module Status/ +::HTTP::Status.redirect? httpclient/http.rb /^ def self.redirect?/ +::HTTP::Status.successful? httpclient/http.rb /^ def self.successful?/ +::HTTPClient httpclient.rb /^class HTTPClient/ +::HTTPClient httpclient/auth.rb /^class HTTPClient/ +::HTTPClient httpclient/connection.rb /^class HTTPClient/ +::HTTPClient httpclient/session.rb /^class HTTPClient/ +::HTTPClient httpclient/ssl_config.rb /^class HTTPClient/ +::HTTPClient httpclient/timeout.rb /^class HTTPClient/ +::HTTPClient httpclient/util.rb /^class HTTPClient/ +::HTTPClient#HTTPClient.new httpclient.rb /^ def initialize/ +::HTTPClient#cookie_manager httpclient.rb /^ attr_accessor :cookie_manager/ +::HTTPClient#create_boundary httpclient.rb /^ def create_boundary/ +::HTTPClient#create_request httpclient.rb /^ def create_request/ +::HTTPClient#debug_dev httpclient.rb /^ def debug_dev/ +::HTTPClient#debug_dev= httpclient.rb /^ def debug_dev=/ +::HTTPClient#default_redirect_uri_callback httpclient.rb /^ def default_redirect_uri_callback/ +::HTTPClient#delete httpclient.rb /^ def delete/ +::HTTPClient#delete_async httpclient.rb /^ def delete_async/ +::HTTPClient#do_get_block httpclient.rb /^ def do_get_block/ +::HTTPClient#do_get_header httpclient.rb /^ def do_get_header/ +::HTTPClient#do_get_stream httpclient.rb /^ def do_get_stream/ +::HTTPClient#do_request httpclient.rb /^ def do_request/ +::HTTPClient#do_request_async httpclient.rb /^ def do_request_async/ +::HTTPClient#dump_dummy_request_response httpclient.rb /^ def dump_dummy_request_response/ +::HTTPClient#file_in_form_data? httpclient.rb /^ def file_in_form_data?/ +::HTTPClient#follow_redirect httpclient.rb /^ def follow_redirect/ +::HTTPClient#follow_redirect_count httpclient.rb /^ attr_accessor :follow_redirect_count/ +::HTTPClient#get httpclient.rb /^ def get/ +::HTTPClient#get_async httpclient.rb /^ def get_async/ +::HTTPClient#get_content httpclient.rb /^ def get_content/ +::HTTPClient#getenv httpclient.rb /^ def getenv/ +::HTTPClient#head httpclient.rb /^ def head/ +::HTTPClient#head_async httpclient.rb /^ def head_async/ +::HTTPClient#https? httpclient.rb /^ def https?/ +::HTTPClient#load_environment httpclient.rb /^ def load_environment/ +::HTTPClient#no_proxy httpclient.rb /^ def no_proxy/ +::HTTPClient#no_proxy= httpclient.rb /^ def no_proxy=/ +::HTTPClient#no_proxy? httpclient.rb /^ def no_proxy?/ +::HTTPClient#options httpclient.rb /^ def options/ +::HTTPClient#options_async httpclient.rb /^ def options_async/ +::HTTPClient#override_header httpclient.rb /^ def override_header/ +::HTTPClient#post httpclient.rb /^ def post/ +::HTTPClient#post_async httpclient.rb /^ def post_async/ +::HTTPClient#post_content httpclient.rb /^ def post_content/ +::HTTPClient#propfind httpclient.rb /^ def propfind/ +::HTTPClient#propfind_async httpclient.rb /^ def propfind_async/ +::HTTPClient#proppatch httpclient.rb /^ def proppatch/ +::HTTPClient#proppatch_async httpclient.rb /^ def proppatch_async/ +::HTTPClient#protect_keep_alive_disconnected httpclient.rb /^ def protect_keep_alive_disconnected/ +::HTTPClient#proxy httpclient.rb /^ def proxy/ +::HTTPClient#proxy= httpclient.rb /^ def proxy=/ +::HTTPClient#proxy_auth httpclient.rb /^ attr_reader :proxy_auth/ +::HTTPClient#put httpclient.rb /^ def put/ +::HTTPClient#put_async httpclient.rb /^ def put_async/ +::HTTPClient#redirect_uri_callback= httpclient.rb /^ def redirect_uri_callback=/ +::HTTPClient#request httpclient.rb /^ def request/ +::HTTPClient#request_async httpclient.rb /^ def request_async/ +::HTTPClient#request_filter httpclient.rb /^ attr_reader :request_filter/ +::HTTPClient#reset httpclient.rb /^ def reset/ +::HTTPClient#reset_all httpclient.rb /^ def reset_all/ +::HTTPClient#save_cookie_store httpclient.rb /^ def save_cookie_store/ +::HTTPClient#set_auth httpclient.rb /^ def set_auth/ +::HTTPClient#set_basic_auth httpclient.rb /^ def set_basic_auth/ +::HTTPClient#set_cookie_store httpclient.rb /^ def set_cookie_store/ +::HTTPClient#set_proxy_auth httpclient.rb /^ def set_proxy_auth/ +::HTTPClient#ssl_config httpclient.rb /^ attr_reader :ssl_config/ +::HTTPClient#strict_redirect_uri_callback httpclient.rb /^ def strict_redirect_uri_callback/ +::HTTPClient#test_loopback_response httpclient.rb /^ attr_reader :test_loopback_response/ +::HTTPClient#trace httpclient.rb /^ def trace/ +::HTTPClient#trace_async httpclient.rb /^ def trace_async/ +::HTTPClient#www_auth httpclient.rb /^ attr_reader :www_auth/ +::HTTPClient.attr_proxy httpclient.rb /^ def attr_proxy/ +::HTTPClient.timeout_scheduler httpclient/timeout.rb /^ def timeout_scheduler/ +::HTTPClient::AuthFilterBase httpclient/auth.rb /^ class AuthFilterBase/ +::HTTPClient::AuthFilterBase#parse_authentication_header httpclient/auth.rb /^ def parse_authentication_header/ +::HTTPClient::AuthFilterBase#parse_challenge_header httpclient/auth.rb /^ def parse_challenge_header/ +::HTTPClient::BadResponseError httpclient.rb /^ class BadResponseError/ +::HTTPClient::BadResponseError#HTTPClient::BadResponseError.new httpclient.rb /^ def initialize/ +::HTTPClient::BadResponseError#res httpclient.rb /^ attr_reader :res/ +::HTTPClient::BasicAuth httpclient/auth.rb /^ class BasicAuth/ +::HTTPClient::BasicAuth#HTTPClient::BasicAuth.new httpclient/auth.rb /^ def initialize/ +::HTTPClient::BasicAuth#challenge httpclient/auth.rb /^ def challenge/ +::HTTPClient::BasicAuth#get httpclient/auth.rb /^ def get/ +::HTTPClient::BasicAuth#reset_challenge httpclient/auth.rb /^ def reset_challenge/ +::HTTPClient::BasicAuth#scheme httpclient/auth.rb /^ attr_reader :scheme/ +::HTTPClient::BasicAuth#set httpclient/auth.rb /^ def set/ +::HTTPClient::ConfigurationError httpclient.rb /^ class ConfigurationError/ +::HTTPClient::ConnectTimeoutError httpclient.rb /^ class ConnectTimeoutError/ +::HTTPClient::Connection httpclient/connection.rb /^ class Connection/ +::HTTPClient::Connection#HTTPClient::Connection.new httpclient/connection.rb /^ def initialize/ +::HTTPClient::Connection#async_thread httpclient/connection.rb /^ attr_accessor :async_thread/ +::HTTPClient::Connection#finished? httpclient/connection.rb /^ def finished?/ +::HTTPClient::Connection#join httpclient/connection.rb /^ def join/ +::HTTPClient::Connection#pop httpclient/connection.rb /^ def pop/ +::HTTPClient::Connection#push httpclient/connection.rb /^ def push/ +::HTTPClient::DebugSocket httpclient/session.rb /^ module DebugSocket/ +::HTTPClient::DebugSocket#<< httpclient/session.rb /^ def < 132 = 4% + + smushing /apps/rs/public/images/social/myspace_icon.png + 3136 -> 282 = 8% + + smushing /apps/rs/public/images/dvd/dvd_1.png + 5045 -> 4 = 0% + reverted! + ... + +TODO +==== + - only optimize 'new' images -> save time when doing on each deploy + - convert gifs to png, even if the new size is the same, for consistency (atm only those which get smaller are converted) + +ALTERNATIVES +============ +If you want to lossless reduce images and minify css + js, try [reduce](http://github.com/grosser/reduce). + +Authors +====== +###Contributors + - [retr0h](http://geminstallthat.wordpress.com/) + +[Michael Grosser](http://pragmatig.wordpress.com) +grosser.michael@gmail.com +Hereby placed under public domain, do what you want, just do not hold me accountable... \ No newline at end of file diff --git a/vendor/gems/gems/smusher-0.4.2/Rakefile b/vendor/gems/gems/smusher-0.4.2/Rakefile new file mode 100644 index 00000000..c7bf8ea0 --- /dev/null +++ b/vendor/gems/gems/smusher-0.4.2/Rakefile @@ -0,0 +1,31 @@ +desc "Run all specs in spec directory" +task :default do |t| + require 'spec' + options = "--colour --format progress --loadby --reverse" + files = FileList['spec/**/*_spec.rb'] + system("spec #{options} #{files}") +end + +begin + require 'jeweler' + project_name = 'smusher' + Jeweler::Tasks.new do |gem| + gem.name = project_name + gem.summary = "Automatic Lossless Reduction Of All Your Images" + gem.email = "grosser.michael@gmail.com" + gem.homepage = "http://github.com/grosser/#{project_name}" + gem.authors = ["Michael Grosser"] + %w[rake json httpclient].each{|d| gem.add_dependency d} + gem.rubyforge_project = 'smusher' + end + + # fake task so that rubyforge:release works + task :rdoc do + `mkdir rdoc` + `echo documentation is at http://github.com/grosser/#{project_name} > rdoc/README.rdoc` + end + + Jeweler::RubyforgeTasks.new +rescue LoadError + puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com" +end \ No newline at end of file diff --git a/vendor/gems/gems/smusher-0.4.2/VERSION b/vendor/gems/gems/smusher-0.4.2/VERSION new file mode 100644 index 00000000..2b7c5ae0 --- /dev/null +++ b/vendor/gems/gems/smusher-0.4.2/VERSION @@ -0,0 +1 @@ +0.4.2 diff --git a/vendor/gems/gems/smusher-0.4.2/bin/smusher b/vendor/gems/gems/smusher-0.4.2/bin/smusher new file mode 100755 index 00000000..5d4bf52f --- /dev/null +++ b/vendor/gems/gems/smusher-0.4.2/bin/smusher @@ -0,0 +1,39 @@ +#!/usr/bin/env ruby +require 'rubygems' +require 'optparse' +require 'smusher' + +options = {} +OptionParser.new do |opts| + opts.banner = < #{after}".ljust(40) + " = #{result}" + puts '' + end + end +end \ No newline at end of file diff --git a/vendor/gems/gems/smusher-0.4.2/lib/smusher/puny_png.rb b/vendor/gems/gems/smusher-0.4.2/lib/smusher/puny_png.rb new file mode 100644 index 00000000..ac48b26c --- /dev/null +++ b/vendor/gems/gems/smusher-0.4.2/lib/smusher/puny_png.rb @@ -0,0 +1,17 @@ +module Smusher + class PunyPng + def self.converts_gif_to_png? + false + end + + def self.optimized_image_data_for(file) + url = 'http://www.gracepointafterfive.com/punypng_staging/api/optimize' + response = HTTPClient.post url, { 'img' => File.new(file), 'key' => 'd1b72ab4813da6b69e1d6018303ac690c014599d'} + response = JSON.parse(response.body.content) + raise "puny_png: #{response['error']}" if response['error'] + image_url = response['optimized_url'] + raise "no optimized_url found" unless image_url + open(image_url) { |source| source.read() } + end + end +end \ No newline at end of file diff --git a/vendor/gems/gems/smusher-0.4.2/lib/smusher/smush_it.rb b/vendor/gems/gems/smusher-0.4.2/lib/smusher/smush_it.rb new file mode 100644 index 00000000..d38db523 --- /dev/null +++ b/vendor/gems/gems/smusher-0.4.2/lib/smusher/smush_it.rb @@ -0,0 +1,22 @@ +module Smusher + class SmushIt + def self.converts_gif_to_png? + true + end + + def self.optimized_image_data_for(file) + #I leave these urls here, just in case it stops working again... + # url = "http://smush.it/ws.php" # original, redirects to somewhere else.. + # url = "http://developer.yahoo.com/yslow/smushit/ws.php" # official but does not work + # url = "http://smushit.com/ysmush.it/ws.php" # used at the new page but does not hande uploads + # url = "http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/ws.php" # used at the new page but does not hande uploads + url = 'http://ws1.adq.ac4.yahoo.com/ysmush.it/ws.php' + response = HTTPClient.post url, { 'files[]' => File.new(file)} + response = JSON.parse(response.body.content) + raise "smush.it: #{response['error']}" if response['error'] + image_url = response['dest'] + raise "no dest path found" unless image_url + open(image_url) { |source| source.read() } + end + end +end \ No newline at end of file diff --git a/vendor/gems/gems/smusher-0.4.2/smusher.gemspec b/vendor/gems/gems/smusher-0.4.2/smusher.gemspec new file mode 100644 index 00000000..fa62e7ee --- /dev/null +++ b/vendor/gems/gems/smusher-0.4.2/smusher.gemspec @@ -0,0 +1,79 @@ +# Generated by jeweler +# DO NOT EDIT THIS FILE +# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec` +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = %q{smusher} + s.version = "0.4.2" + + s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= + s.authors = ["Michael Grosser"] + s.date = %q{2009-10-09} + s.default_executable = %q{smusher} + s.email = %q{grosser.michael@gmail.com} + s.executables = ["smusher"] + s.extra_rdoc_files = [ + "README.markdown" + ] + s.files = [ + ".gitignore", + "README.markdown", + "Rakefile", + "VERSION", + "bin/smusher", + "lib/smusher.rb", + "lib/smusher/puny_png.rb", + "lib/smusher/smush_it.rb", + "rdoc/README.rdoc", + "smusher.gemspec", + "spec/empty/.gitignore", + "spec/images/ad.gif", + "spec/images/add.png", + "spec/images/drink_empty.png", + "spec/images/logo.gif", + "spec/images/people.jpg", + "spec/images/water.JPG", + "spec/images/woman.jpeg", + "spec/out/ad.gif", + "spec/out/people.jpg", + "spec/reduced/add.png", + "spec/reduced/add_puny.png", + "spec/reduced/fam.png", + "spec/smusher/puny_png_spec.rb", + "spec/smusher/smush_it_spec.rb", + "spec/smusher_spec.rb", + "spec/spec_helper.rb" + ] + s.homepage = %q{http://github.com/grosser/smusher} + s.rdoc_options = ["--charset=UTF-8"] + s.require_paths = ["lib"] + s.rubyforge_project = %q{smusher} + s.rubygems_version = %q{1.3.5} + s.summary = %q{Automatic Lossless Reduction Of All Your Images} + s.test_files = [ + "spec/smusher/smush_it_spec.rb", + "spec/smusher/puny_png_spec.rb", + "spec/spec_helper.rb", + "spec/smusher_spec.rb" + ] + + if s.respond_to? :specification_version then + current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION + s.specification_version = 3 + + if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then + s.add_runtime_dependency(%q, [">= 0"]) + s.add_runtime_dependency(%q, [">= 0"]) + s.add_runtime_dependency(%q, [">= 0"]) + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end +end diff --git a/vendor/gems/gems/smusher-0.4.2/spec/empty/.gitignore b/vendor/gems/gems/smusher-0.4.2/spec/empty/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/vendor/gems/gems/smusher-0.4.2/spec/images/ad.gif b/vendor/gems/gems/smusher-0.4.2/spec/images/ad.gif new file mode 100644 index 0000000000000000000000000000000000000000..57b499733f149e68f5b20495eac12252c14c6fed GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5h)6)R7#Qm$ zB&f9J_V!($tK;oCIQ#o}?d>T0`)!t_;nc5ru)FHewutjcNcHtl$p8S!x>NI3P38aq zUUJmBrF!#PT9l#P?(ReFLPFR80Hd$vS8UWRNWPJu-?qQ(>C<7Js_4pNny+2sd`ao z&-3wbA^8LV00000EC2ui01yBR000J%z!hgm5*Uv(+Gfc)IVprF;qeFrJf2N+F-kom zzZm0UvDiGK=BS~IR4S7k*=Ep)NEEgt(hHze19UAGB0dy45+)22C@wcF1}zF9B0LL; z1uz{hI0!P52@V)93nm2x7aa(z5DEzi1{gadr!@mC85s}|uL&&}C2SuB3}XWzAP$kg RI|t4OGtmIk7}eE506T1-p$-55 literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/images/add.png b/vendor/gems/gems/smusher-0.4.2/spec/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..6332fefea4be19eeadf211b0b202b272e8564898 GIT binary patch literal 733 zcmV<30wVp1P)9VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/images/drink_empty.png b/vendor/gems/gems/smusher-0.4.2/spec/images/drink_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..a40211ed412d95be06d475239a37c35fea158538 GIT binary patch literal 433 zcmV;i0Z#sjP)awcLgG1Ps>cqvbu;_Vq%$)JuarzB@HWl1!ZPF;C7L( zfnnMp{=@G#I2=L#pCCC))^Xy>1k(9bGie+eiDo<>3#hIg$F>C#B&%FfLPtmE4jr9a zG;-_{Q4m3n>C>c45seEj&?r%+MTanmAQ|J49v^ggr_Bq`JW!*DM#w+}NzbLsGCexH z(&UkQs(hlcVXn_1f*?uzfvMA@#REld=}z(wK;rh8c|(_Lw3$2sh-%+83%t?gYAR0w zBx>IpebHxQ^qXe@vKcLNP9XT_ljCh!!_LrUl~Y!8E6yeB4A{0s@_S@RP$z*(3_rfS z*ERu>_6-ID8Z@Z$!T^IKJgo@`D=KGHs4-;769x8Jz^zQ(5VWl+{_JvPk$HSoZ`Px@ bZR7F{-p6Gno?>^M00000NkvXXu0mjfT}81Z literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/images/logo.gif b/vendor/gems/gems/smusher-0.4.2/spec/images/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..740ed0d55697b987803f6f4694bbc82227d5374b GIT binary patch literal 945 zcmZ?wbhEHbWMj}{XlG!!apT6#n>TOWx^?^Z?K^kw+`W7E-o1PG@85s$;K9R(4<9{x z^!V}PCr_R{efsp-vuDqrKY#J!#mkp3U%h(u`t|EKZ{ECn_wN1s_a8rg{QUXz*RNl{ zef##~$B$pXe*OOa`|sbs|NsAI7zLvtFo;7y@h1z=b^jT3KyC!(2?mZn273;f7Yi30 zd4Cl%g?hpG;^_@TCn2cVpnmE*i{QwUS94i>@n9XRI6!q1b@ceQ=zLH s*C!mV({-Q5*$nQojmS75LP0QF~{zyJUM literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/images/people.jpg b/vendor/gems/gems/smusher-0.4.2/spec/images/people.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5eb39f440af109508a1fddf7fc470a2323c33bd8 GIT binary patch literal 2458 zcmbW#c{J4T9tZI6m|>V-hOvw-O9n%ONOnm?M)sPCEEOS3izZQwin0^3rHQOripWl~ zmF&#eLM3L&$d9p&ROagUyXW3>?qB!b_j8`lKhNhp=kq$x!0t7~Y zI9-73?ws79zXJR-ATIFkyii^~*dMzMwSoW_2n^kFxU%3X6)Lm6VoM zzpAONt8Zv*>geox`>y+aPcNA=IyOEr`C;nI+&q;=XM9~?vR2pDH#XT@-?x9eKmhn} z)^7b9_8%_9u8Ru-0Yjj_T_CRD-3>-Sxc6!D2px5Ro(~k3KX{i{#55(Zs+|v|<+vj1 zacu;KR5Hm$9AIs4 zvnLoK3UI z8f{USlVjP%rrdG!4n~s*r5;?8+l7_-`BtwYDvGeHIrn+P4I21bSXB6^UxV$N5p7Dw}~)EWy~jK75J znEP|3{-Kzxa*u~CAVZzV9hjH;Qfe+b{$$fq0Ttbo3}@tMEyZoz7G7Y@95)h6S*{c8 z!&Fv`bkj(`0$r0*ynN@*!kELno)1q=DpjXU?5S2~Toqplk-E7dn&5h?z};fgn|~;_ zCe7O+khpK})yKCx%FQbl>VqBH`9JpBpdh$(P!Ae7jSBWrd_5X}HPuW5D;_IS3JI_M zdaE*W{fTZnGCQjwnVDn7|F$#Mi};3sx^Iu2&xuB9mlsL7_G&Al?Ce);GVh+X9-nPG zIP@ra+L(u?%=NOn6s_%P&8l(yx_Y!Ezg_7|Rhpn_QrnJFRakI2wv-vuL?o48x}106 zrkBEAxQpuT%%XE!QJoGE?=W(h&F)NpMhQs1Wwl(N}n(WibBI)tt2 ziBkfBn=Wn*dx8ZE(BQ+3FWh8JN44{a(rFo1+4$t9$mcAvgMbFk(&#$VKk=JY&%*H2jFE@#nZnR-bj<5-`QqNN{*Rb@KI@OZY}%- zs!OD1v+Wx!X^H9cQV|uO&tuD&b(sc}V%BE{UG81#j8cu{vI~RjGcjBg2ekE+@piH1 z0~6pmW@g}u!t`{1LYeYVNkHx}?uXtxTkFazXl~y1!~XM0)yHF=ABw-$19thIde5V| zKbi)Wwh(*v`hu?-K#}nzh&IG1UyL!#J#5m}9kAy5CQ18b=~e}K^)vg9i*tUkgwtu% z+5lEB8PpJYsG2{fWj1sth@^tHQG&PRIrO6QzkZU8Vjs(9J1Uq53(uG=_F3SvJd;g+ zG!E)RHp+|-Buf6Ud$roz9*~s0>}ot?#;(?CR)}0Ld&dFnBi%+0J$7@ap_4`}`Vd&u ze)wFW42XJR8%7P&E%c+fx%(ZIk5vCg4^nGs@NEC-i?iw{_i83KrSmV*i;7+Cu6DSP zV&Zjx{Xb>0Bz~%lYkhR;^Ytf$u?+$Um>MBX&1B1u>4#$~>gP^Ja)2-5W9lbu>q6FV zJ~AF?J;%76rW>R$ClpS?2?$)wk!q}23o|QWR=N5pNjW9Mp8?1oBhQ!lYT6zO+39o6 zqefnd2k>O`jC3!^%ORm2h@Q7X0&wltd;*MKOGGj$$47!x!iP4ArZZU?Vl&gH>E7oj z*W8L<&q~X)Efaq#7KdaoH)70vKZ(W?-m9%r8Be*Y85A|om5)*Jb0?z72bRG1FD~`( z_!;^zre;J@dwmXT7>tD>15}xYidEg6fdQyVrRhQ2P>RD-pEL|~uRdc~a#7f9MOAQL zu1iCPHUIRb3aCC~%Vc3_!Fd6mni-7h$PcYUETx{POaav1ff#xc%iG?it^I|~g)JL$ z#rG8`zBF9b>gE6y`LD+u z2lZ6nCyCD`aLZm?I}R&=1+qhoTOK<1XkmRqL^CXlaS{$~@+N`XaJB=?ozYe z{lrBV15M&gJEgO55cc4=T$+2pfE?sz<@W9S$KJAbs@_-?4b9jb`?ld0Zeu$1jq+h3 zR%W)Xo2y)918U^ciqYZAii1L uIXV9vXnPf5@=g=SKNBWkaHM$F|B-svwSn)HVA+%3hfAHL{nw9hKKuhU1#2Dv literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/images/water.JPG b/vendor/gems/gems/smusher-0.4.2/spec/images/water.JPG new file mode 100644 index 0000000000000000000000000000000000000000..c824b19b9ef50ed6efd4c702d9050d4221823b66 GIT binary patch literal 4719 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 z z7=opy?L-6XX~Nw&yi{a%&e&HXm&Z1D&vG6lX6$@z)#N2^QUi=+DulK?gX0__&%Z-tqcbzo5FCx8gw>$<+I$%;q;LblofPs4t2~YG#YYtu>8pC-trIi7@-;MlWz9_o-)gtLtI=X8 za_Gt%$e7BSeSXxj<{521D%x5hqKq53k@|M_%Xno|$%L=eFh0>!dc z2zvZ4*JH58CKR{?%5ZL!sbnu5~z)QA=^3=D-o4}1zt6dM~tangy zUk=~+Xh$(xZ6W$zRI(l=z8$igX+z!j(+h!3VYn{l=S|JLP zn_QK~hdt-$pi}y@z@K{*_FrEY{^AHRH~oRaQwcScq08<%zfx6?4B_Ad(a!&KeTMP2 zyG*OTlTgQFqsmCOMfn# zPwGA$6nTZa%LR*AW#>+_mY&AK;)MdOWw)o5UcuS(z2Js}mp~^uQ7=U(oT#g9M3~hS zjJV0SS9ehg+3xqyqMh{R830ol8BfCvFM%dJ8OouD3=>t0*oD6i!zc3eG_YDzim-T$GDJgA)d1WGspWxErS=Wl0?O)y!zC99 zD_gQwPtD=zl6uM}>WNrG1C)SJy?H}7nypM&ws&KeW!Ny2tyY=5}X; zZt4C&CS{gHBwkTf_Y{4!XyD!#(>eC|jj5_aMwG=_XWNHu(`Rjts-HiGp1O%*{TTvQ z|8C2S$h`R`8maW~?k~=mfV_s&)5SqvzpgX2+eHjF$tj7dlvK`riGPI8UXIiV>Y#t` mE+VA!8dgeL_j*;Hz6fagNO=h~Cz;&a`ow^9G1`s2{Q5uJ;diV6 literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/images/woman.jpeg b/vendor/gems/gems/smusher-0.4.2/spec/images/woman.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4eb9e73044cea9918462dbb70df1d66dc434587f GIT binary patch literal 2572 zcma)-c|2768^_O?EoRI#!;FljMiY@smZU2;8IxVv>Y9h}Bn`FqambdzCYjdoO3pZHYWhAnUSdx z073x3U3dVSZvh-N*v%&l009^P0Q$nxBA{sC&T>5qxIYqBKqx?fK@mta06r=u;T5?_&^Q0gHo?#Np~12zi6u5@h@yZJba928D@& zqTghNngC8-!$5pD$=XE%8=Y35NwFcr@bCSrCIey&;R@ng9RD(GU2!D!qgL`R5<(6T z0vE3LjS~E#gB8m7zmHC9E~t90KDo5X1H^TuP7aoWY`8f@Oh>q18?!6P5BYgoC#u?}EDlj4{Vu7Tn z@aorGu0h?*9#WVhaX1&{N)=G&#(EtT_i6|kMT8zeIHZ!ji{GY0%3HkVc6}$_;dIb) zdR&-)51x@tk&->`zE@=CNs217ysl1~*?ah!p67Dl-6!^BL7cVT@(7jto5qZ6{NB0a ztfWpYF{mI{KJ7@-9pdfBOIOkZ_;q6bu_+l$wo3+|IyARlCzCe)id`Z3!<8q!-InGr zOd(Punf&RjwGRnkteoL;$er;A2A`FE4PJJxjD{37>3@L~K2jlM!(fdzkyYKGRm-71 zrs+b~UI*>_oN9*-KUtppIGF2SKk{d&;d3>?mnqP#Da9-9Z=0T4l{xB?9@M@S{acgG zTqjl}`C2>~NGZ%=S?(UI(@IZ!*9Y}rWK8wdv+NutAMiGTuWLdO`j8m9)U7wjqvV#kaZVlb z&~U!avI1f+2}JyB?kR^IJ+S?9Lg1uq;y`|&hiN(DRH7`(UkNE)+@KQ0i>NfYw?JNw zX-Vs*5N>nHOYzF#SM4GUGmX~VW^M=gA}zfltA=e$xv)vrzUhG_?I@b5ye;w9?8fl% z4@+aips|S*k3hT4Pk-n??4VK|tGZvDHKX7K>D_ZV=aUP%aUPxTWptW%_3T95MzrkR zT}W+@N+~le|Hioi@0`_GIKF3=ofTaB<{wu>>Fg7oXuN#B=B>RCD}G!gDnBIRe>>rI z{EvWws_Vw*uqU5UUPbRQqQ%FC?TcV@bJTP_LbFv)zUO_i$%}Ikh?M_*XXM!t+~?HD z;bqHs~)+;BGG+DMyG8E3F-wLpw%|QQQOZV!yY{G?C7X zFz6%W`%d)kA5^@=39ZjTn*b=LtiFtOqJ)Qc(B$L<|p3$V^OKJt`pJCGA8tUPcqhhzP&DAcJ`d}!j7Hf z*(c|{bGvMgGzHHNMy!P?GC%d6G=>Ks&po7OcTJ{?0a-vt#=i(kwci9}yYlq-ddg)P zUpszFgzx&i@R!2H`aox~-#;rd{oS7=W;=%@OGwFB8lQ0>Ji1@#5qQ8%rBW5$J=s2y zph^2FYt5BjH0Rs<5-{k?o|q+zW^tDVJGZ$0`#r>BcR8hla#_^TE|#L%5j%kTfr9Ro zvnOeBe#8;Gzjp`rbjxE6(-M+>uL<4zSkCM{E9aj-hUY7S57So)N5P307!13Ng#n!+(;<1=yld z#CYfKxzf97@qq?qPV!F)hFWD5b`)KnNh!5z_VopVPe&Mxz<{e%L-X^QRu)>8F~8d< z{%CxBpe#SIjoAn}>T-mv-LRVJA7z*G`ie%$Gm4J2Y>$lhP#YE|Qb6sMyBvx@zd>bj z|298(dBodF+s{kW{8hfXJ0TsCynrdRk3dg1NAPOI2x`nn;(b?L8h{_Fn)0*VM7vMOnr}8qP7ncvrPkTMiza?rzmB!1BAwcDeqQab&j QR{gr~{;(H%`kTZ50k-unhyVZp literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/out/ad.gif b/vendor/gems/gems/smusher-0.4.2/spec/out/ad.gif new file mode 100644 index 0000000000000000000000000000000000000000..57b499733f149e68f5b20495eac12252c14c6fed GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5h)6)R7#Qm$ zB&f9J_V!($tK;oCIQ#o}?d>T0`)!t_;nc5ru)FHewutjcNcHtl$p8S!x>NI3P38aq zUUJmBrF!#PT9l#P?(ReFLPFR80Hd$vS8UWRNWPJu-?qQ(>C<7Js_4pNny+2sd`ao z&-3wbA^8LV00000EC2ui01yBR000J%z!hgm5*Uv(+Gfc)IVprF;qeFrJf2N+F-kom zzZm0UvDiGK=BS~IR4S7k*=Ep)NEEgt(hHze19UAGB0dy45+)22C@wcF1}zF9B0LL; z1uz{hI0!P52@V)93nm2x7aa(z5DEzi1{gadr!@mC85s}|uL&&}C2SuB3}XWzAP$kg RI|t4OGtmIk7}eE506T1-p$-55 literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/out/people.jpg b/vendor/gems/gems/smusher-0.4.2/spec/out/people.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5eb39f440af109508a1fddf7fc470a2323c33bd8 GIT binary patch literal 2458 zcmbW#c{J4T9tZI6m|>V-hOvw-O9n%ONOnm?M)sPCEEOS3izZQwin0^3rHQOripWl~ zmF&#eLM3L&$d9p&ROagUyXW3>?qB!b_j8`lKhNhp=kq$x!0t7~Y zI9-73?ws79zXJR-ATIFkyii^~*dMzMwSoW_2n^kFxU%3X6)Lm6VoM zzpAONt8Zv*>geox`>y+aPcNA=IyOEr`C;nI+&q;=XM9~?vR2pDH#XT@-?x9eKmhn} z)^7b9_8%_9u8Ru-0Yjj_T_CRD-3>-Sxc6!D2px5Ro(~k3KX{i{#55(Zs+|v|<+vj1 zacu;KR5Hm$9AIs4 zvnLoK3UI z8f{USlVjP%rrdG!4n~s*r5;?8+l7_-`BtwYDvGeHIrn+P4I21bSXB6^UxV$N5p7Dw}~)EWy~jK75J znEP|3{-Kzxa*u~CAVZzV9hjH;Qfe+b{$$fq0Ttbo3}@tMEyZoz7G7Y@95)h6S*{c8 z!&Fv`bkj(`0$r0*ynN@*!kELno)1q=DpjXU?5S2~Toqplk-E7dn&5h?z};fgn|~;_ zCe7O+khpK})yKCx%FQbl>VqBH`9JpBpdh$(P!Ae7jSBWrd_5X}HPuW5D;_IS3JI_M zdaE*W{fTZnGCQjwnVDn7|F$#Mi};3sx^Iu2&xuB9mlsL7_G&Al?Ce);GVh+X9-nPG zIP@ra+L(u?%=NOn6s_%P&8l(yx_Y!Ezg_7|Rhpn_QrnJFRakI2wv-vuL?o48x}106 zrkBEAxQpuT%%XE!QJoGE?=W(h&F)NpMhQs1Wwl(N}n(WibBI)tt2 ziBkfBn=Wn*dx8ZE(BQ+3FWh8JN44{a(rFo1+4$t9$mcAvgMbFk(&#$VKk=JY&%*H2jFE@#nZnR-bj<5-`QqNN{*Rb@KI@OZY}%- zs!OD1v+Wx!X^H9cQV|uO&tuD&b(sc}V%BE{UG81#j8cu{vI~RjGcjBg2ekE+@piH1 z0~6pmW@g}u!t`{1LYeYVNkHx}?uXtxTkFazXl~y1!~XM0)yHF=ABw-$19thIde5V| zKbi)Wwh(*v`hu?-K#}nzh&IG1UyL!#J#5m}9kAy5CQ18b=~e}K^)vg9i*tUkgwtu% z+5lEB8PpJYsG2{fWj1sth@^tHQG&PRIrO6QzkZU8Vjs(9J1Uq53(uG=_F3SvJd;g+ zG!E)RHp+|-Buf6Ud$roz9*~s0>}ot?#;(?CR)}0Ld&dFnBi%+0J$7@ap_4`}`Vd&u ze)wFW42XJR8%7P&E%c+fx%(ZIk5vCg4^nGs@NEC-i?iw{_i83KrSmV*i;7+Cu6DSP zV&Zjx{Xb>0Bz~%lYkhR;^Ytf$u?+$Um>MBX&1B1u>4#$~>gP^Ja)2-5W9lbu>q6FV zJ~AF?J;%76rW>R$ClpS?2?$)wk!q}23o|QWR=N5pNjW9Mp8?1oBhQ!lYT6zO+39o6 zqefnd2k>O`jC3!^%ORm2h@Q7X0&wltd;*MKOGGj$$47!x!iP4ArZZU?Vl&gH>E7oj z*W8L<&q~X)Efaq#7KdaoH)70vKZ(W?-m9%r8Be*Y85A|om5)*Jb0?z72bRG1FD~`( z_!;^zre;J@dwmXT7>tD>15}xYidEg6fdQyVrRhQ2P>RD-pEL|~uRdc~a#7f9MOAQL zu1iCPHUIRb3aCC~%Vc3_!Fd6mni-7h$PcYUETx{POaav1ff#xc%iG?it^I|~g)JL$ z#rG8`zBF9b>gE6y`LD+u z2lZ6nCyCD`aLZm?I}R&=1+qhoTOK<1XkmRqL^CXlaS{$~@+N`XaJB=?ozYe z{lrBV15M&gJEgO55cc4=T$+2pfE?sz<@W9S$KJAbs@_-?4b9jb`?ld0Zeu$1jq+h3 zR%W)Xo2y)918U^ciqYZAii1L uIXV9vXnPf5@=g=SKNBWkaHM$F|B-svwSn)HVA+%3hfAHL{nw9hKKuhU1#2Dv literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/reduced/add.png b/vendor/gems/gems/smusher-0.4.2/spec/reduced/add.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d26db7c071da62daed91569d69ed280969707b GIT binary patch literal 680 zcmV;Z0$2TsP)r0bi7>E5^wl4*Pq=s22s3|2_C~w(pii%F#mUC;0&h~CDox05fEu9k&6}6$;Xrwzh z55ogy;?&Yb>g!OVjUotY!>_;I6-`IWh#vTTdEmO9=f1h`BmhbOlix0M({;=akA!S> ziKylYL0JBxI^6KQf|6RxNYQ99^F)DeT1vD}N(xAl0q)`4zcD-3=e`utjSZ??dFU?1+Ft(-FYv@mRG(DYIW@q7h%)*EqPGx?D}b1|`F!X3-4C>%^yo@T@iQu(6-qGaf5q|s3cCoM7h z+Ck1#K|WOp<7yimG%U1mz*ey$G)yEMWzIk@K^SsE`2(5gSs-D4ZGd^h0FAd1SzRen zICLCNxJ=jdnatdtbTYg1B9);@38%H64WDm4L!DEx$YkXy=3lq*U-KP7M#~=nDAU0J O00009VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/vendor/gems/gems/smusher-0.4.2/spec/reduced/fam.png b/vendor/gems/gems/smusher-0.4.2/spec/reduced/fam.png new file mode 100644 index 0000000000000000000000000000000000000000..119a267d46ddbd8ad502794a514f1faae0c35253 GIT binary patch literal 381 zcmV-@0fPRCP)IMa3k)(p`+Z2i*N~d1tMZk%S_C&x`1&!x;VJvzM7 zouFoNYAW8dysnesy14VA>PVx^x;`W$%Lzio`nLGiAYTq>rywT-qDo+6< zYTp`t(Pv}yn`Z#B87*^8Ao%B#<84{P&d_C*Q&w{;&L!&%*tSLTdt^vZCxJ=~Kfb)z zHUW|L4F&@mG^q2!0D~hutqBM#DrZ!vF=WUS1@>9MtxVkzw5=)r>~dw1d3;rG)}y#> btrue + FileUtils.mkdir @out + copy 'people.jpg' + copy 'ad.gif' + + @file = File.join(@out,'people.jpg') + end + + describe :optimize_image do + it "stores the image in an reduced size" do + original_size = size + Smusher.optimize_image(@file) + size.should < original_size + end + + it "does not append newline" do + copy 'add.png' + file = File.join(@out, 'add.png') + Smusher.optimize_image file + # pure File.read() will omit trailing \n + File.readlines(file).last.split('').last.should_not == "\n" + end + + it "can be called with an array of files" do + original_size = size + Smusher.optimize_image([@file]) + size.should < original_size + end + + it "it does nothing if size stayed the same" do + original_size = size + Smusher::SmushIt.should_receive(:optimized_image_data_for).and_return File.read(@file) + Smusher.optimize_image(@file) + size.should == original_size + end + + it "does not save images whoes size got larger" do + original_size = size + Smusher::SmushIt.should_receive(:optimized_image_data_for).and_return File.read(@file)*2 + Smusher.optimize_image(@file) + size.should == original_size + end + + it "does not save images if their size is error-sugesting-small" do + original_size = size + Smusher::SmushIt.should_receive(:optimized_image_data_for).and_return 'oops...' + Smusher.optimize_image(@file) + size.should == original_size + end + + describe "gif handling" do + before do + copy 'logo.gif' + @file = File.join(@out,'logo.gif') + @file_png = File.join(@out,'logo.png') + end + + it "converts gifs to png even if they have the same size" do + pending + copy 'ad.gif' + file = File.join(@out,'ad.gif') + original_size = size + Smusher.optimize_image(file) + File.size(File.join(@out,'ad.png')).should == original_size + end + + it "stores converted .gifs in .png files" do + Smusher.optimize_image(@file) + File.exist?(@file).should == false + File.exist?(@file_png).should == true + end + + it "does not rename gifs, if optimizing failed" do + Smusher::SmushIt.should_receive(:optimized_image_data_for).and_return File.read(@file) + Smusher.optimize_image(@file) + File.exist?(@file).should == true + File.exist?(@file_png).should == false + end + end + + describe 'options' do + it "does not produce output when :quiet is given" do + $stdout.should_receive(:write).never + Smusher.optimize_image(@file,:quiet=>true) + end + + it "raises when an unknown option was given" do + lambda{Smusher.optimize_image(@file,:q=>true)}.should raise_error + end + end + end + + describe :optimize_images_in_folder do + before do + FileUtils.rm @file + @files = [] + %w[add.png drink_empty.png].each do |image_name| + copy image_name + @files << File.join(@out,image_name) + end + @before = @files.map {|f|File.size(f)} + end + + it "optimizes all images" do + Smusher.optimize_images_in_folder(@out) + new_sizes = @files.map {|f|File.size(f)} + new_sizes.size.times {|i| new_sizes[i].should < @before[i]} + end + + it "does not convert gifs" do + copy 'logo.gif' + Smusher.optimize_images_in_folder(@out) + File.exist?(File.join(@out,'logo.png')).should == false + end + + it "converts gifs to png when option was given" do + copy 'logo.gif' + Smusher.optimize_images_in_folder(@out,:convert_gifs=>true) + File.exist?(File.join(@out,'logo.png')).should == true + end + end + + describe :sanitize_folder do + it "cleans a folders trailing slash" do + Smusher.send(:sanitize_folder,"xx/").should == 'xx' + end + + it "does not clean if there is no trailing slash" do + Smusher.send(:sanitize_folder,"/x/ccx").should == '/x/ccx' + end + end + + describe :images_in_folder do + it "finds all non-gif images" do + folder = File.join(ROOT,'images') + all = %w[add.png drink_empty.png people.jpg water.JPG woman.jpeg].map{|name|"#{folder}/#{name}"} + result = Smusher.send(:images_in_folder,folder) + (all+result).uniq.size.should == all.size + end + + it "finds nothing if folder is empty" do + Smusher.send(:images_in_folder,File.join(ROOT,'empty')).should == [] + end + end + + describe :size do + it "find the size of a file" do + Smusher.send(:size,@file).should == File.size(@file) + end + + it "and_return 0 for missing file" do + Smusher.send(:size,File.join(ROOT,'xxxx','dssdfsddfs')).should == 0 + end + end + + describe :logging do + it "yields" do + val = 0 + Smusher.send(:with_logging,@file,false) {val = 1} + val.should == 1 + end + end + + it "has a VERSION" do + Smusher::VERSION.should =~ /^\d+\.\d+\.\d+$/ + end +end \ No newline at end of file diff --git a/vendor/gems/gems/smusher-0.4.2/spec/spec_helper.rb b/vendor/gems/gems/smusher-0.4.2/spec/spec_helper.rb new file mode 100644 index 00000000..223b7e77 --- /dev/null +++ b/vendor/gems/gems/smusher-0.4.2/spec/spec_helper.rb @@ -0,0 +1,8 @@ +# ---- requirements +require 'rubygems' +require 'spec' + +$LOAD_PATH << 'lib' +require 'smusher' + +ROOT = File.expand_path(File.dirname(__FILE__)) \ No newline at end of file diff --git a/vendor/gems/specifications/httpclient-2.1.5.2.gemspec b/vendor/gems/specifications/httpclient-2.1.5.2.gemspec new file mode 100644 index 00000000..f08ff4c0 --- /dev/null +++ b/vendor/gems/specifications/httpclient-2.1.5.2.gemspec @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = %q{httpclient} + s.version = "2.1.5.2" + + s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= + s.authors = ["NAKAMURA, Hiroshi"] + s.date = %q{2009-06-24} + s.email = %q{nahi@ruby-lang.org} + s.files = ["lib/tags", "lib/http-access2", "lib/http-access2/http.rb", "lib/http-access2/cookie.rb", "lib/httpclient", "lib/httpclient/connection.rb", "lib/httpclient/cacert_sha1.p7s", "lib/httpclient/http.rb", "lib/httpclient/auth.rb", "lib/httpclient/util.rb", "lib/httpclient/session.rb", "lib/httpclient/ssl_config.rb", "lib/httpclient/timeout.rb", "lib/httpclient/cookie.rb", "lib/httpclient/cacert.p7s", "lib/httpclient.rb", "lib/http-access2.rb"] + s.homepage = %q{http://dev.ctor.org/httpclient} + s.require_paths = ["lib"] + s.rubygems_version = %q{1.3.5} + s.summary = %q{gives something like the functionality of libwww-perl (LWP) in Ruby} + + if s.respond_to? :specification_version then + current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION + s.specification_version = 2 + + if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then + else + end + else + end +end diff --git a/vendor/gems/specifications/smusher-0.4.2.gemspec b/vendor/gems/specifications/smusher-0.4.2.gemspec new file mode 100644 index 00000000..dd812adf --- /dev/null +++ b/vendor/gems/specifications/smusher-0.4.2.gemspec @@ -0,0 +1,41 @@ +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = %q{smusher} + s.version = "0.4.2" + + s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= + s.authors = ["Michael Grosser"] + s.date = %q{2009-10-08} + s.default_executable = %q{smusher} + s.email = %q{grosser.michael@gmail.com} + s.executables = ["smusher"] + s.extra_rdoc_files = ["README.markdown"] + s.files = [".gitignore", "README.markdown", "Rakefile", "VERSION", "bin/smusher", "lib/smusher.rb", "lib/smusher/puny_png.rb", "lib/smusher/smush_it.rb", "rdoc/README.rdoc", "smusher.gemspec", "spec/empty/.gitignore", "spec/images/ad.gif", "spec/images/add.png", "spec/images/drink_empty.png", "spec/images/logo.gif", "spec/images/people.jpg", "spec/images/water.JPG", "spec/images/woman.jpeg", "spec/out/ad.gif", "spec/out/people.jpg", "spec/reduced/add.png", "spec/reduced/add_puny.png", "spec/reduced/fam.png", "spec/smusher/puny_png_spec.rb", "spec/smusher/smush_it_spec.rb", "spec/smusher_spec.rb", "spec/spec_helper.rb"] + s.homepage = %q{http://github.com/grosser/smusher} + s.rdoc_options = ["--charset=UTF-8"] + s.require_paths = ["lib"] + s.rubyforge_project = %q{smusher} + s.rubygems_version = %q{1.3.5} + s.summary = %q{Automatic Lossless Reduction Of All Your Images} + s.test_files = ["spec/smusher/smush_it_spec.rb", "spec/smusher/puny_png_spec.rb", "spec/spec_helper.rb", "spec/smusher_spec.rb"] + + if s.respond_to? :specification_version then + current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION + s.specification_version = 3 + + if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then + s.add_runtime_dependency(%q, [">= 0"]) + s.add_runtime_dependency(%q, [">= 0"]) + s.add_runtime_dependency(%q, [">= 0"]) + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end +end