braintree 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/braintree.rb +0 -3
 - data/lib/braintree/configuration.rb +5 -1
 - data/lib/braintree/version.rb +1 -1
 - data/spec/unit/braintree/configuration_spec.rb +12 -0
 - data/spec/unit/braintree_spec.rb +1 -1
 - metadata +3 -12
 - data/lib/braintree/ssl_expiration_check.rb +0 -27
 - data/spec/integration/braintree/ssl_expiration_check_spec.rb +0 -93
 
    
        data/lib/braintree.rb
    CHANGED
    
    | 
         @@ -39,7 +39,6 @@ require "braintree/errors" 
     | 
|
| 
       39 
39 
     | 
    
         
             
            require "braintree/gateway"
         
     | 
| 
       40 
40 
     | 
    
         
             
            require "braintree/http"
         
     | 
| 
       41 
41 
     | 
    
         
             
            require "braintree/resource_collection"
         
     | 
| 
       42 
     | 
    
         
            -
            require "braintree/ssl_expiration_check"
         
     | 
| 
       43 
42 
     | 
    
         
             
            require "braintree/subscription"
         
     | 
| 
       44 
43 
     | 
    
         
             
            require "braintree/subscription_gateway"
         
     | 
| 
       45 
44 
     | 
    
         
             
            require "braintree/subscription_search"
         
     | 
| 
         @@ -65,5 +64,3 @@ require "braintree/xml/libxml" 
     | 
|
| 
       65 
64 
     | 
    
         
             
            require "braintree/xml/rexml"
         
     | 
| 
       66 
65 
     | 
    
         
             
            require "braintree/xml/parser"
         
     | 
| 
       67 
66 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
            Braintree::SSLExpirationCheck.check_dates
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
         @@ -6,7 +6,7 @@ module Braintree 
     | 
|
| 
       6 
6 
     | 
    
         
             
                class << self
         
     | 
| 
       7 
7 
     | 
    
         
             
                  attr_writer :custom_user_agent, :logger, :merchant_id, :public_key, :private_key
         
     | 
| 
       8 
8 
     | 
    
         
             
                end
         
     | 
| 
       9 
     | 
    
         
            -
                attr_reader : 
     | 
| 
      
 9 
     | 
    
         
            +
                attr_reader :merchant_id, :public_key, :private_key
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                def self.expectant_reader(*attributes) # :nodoc:
         
     | 
| 
       12 
12 
     | 
    
         
             
                  attributes.each do |attribute|
         
     | 
| 
         @@ -77,6 +77,10 @@ module Braintree 
     | 
|
| 
       77 
77 
     | 
    
         
             
                  Http.new(self)
         
     | 
| 
       78 
78 
     | 
    
         
             
                end
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
      
 80 
     | 
    
         
            +
                def logger
         
     | 
| 
      
 81 
     | 
    
         
            +
                  @logger ||= self.class._default_logger
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       80 
84 
     | 
    
         
             
                def port # :nodoc:
         
     | 
| 
       81 
85 
     | 
    
         
             
                  case @environment
         
     | 
| 
       82 
86 
     | 
    
         
             
                  when :development
         
     | 
    
        data/lib/braintree/version.rb
    CHANGED
    
    
| 
         @@ -63,6 +63,18 @@ describe Braintree::Configuration do 
     | 
|
| 
       63 
63 
     | 
    
         
             
                end
         
     | 
| 
       64 
64 
     | 
    
         
             
              end
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
      
 66 
     | 
    
         
            +
              describe "logger" do
         
     | 
| 
      
 67 
     | 
    
         
            +
                it "defaults to logging to stdout with log_level info" do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  config = Braintree::Configuration.new
         
     | 
| 
      
 69 
     | 
    
         
            +
                  config.logger.level.should == Logger::INFO
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                it "lazily initializes so that you can do Braintree::Configuration.logger.level = when configuring the client lib" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  config = Braintree::Configuration.new :logger => nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                  config.logger.should_not == nil
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
       66 
78 
     | 
    
         
             
              describe "self.environment" do
         
     | 
| 
       67 
79 
     | 
    
         
             
                it "raises an exception if it hasn't been set yet" do
         
     | 
| 
       68 
80 
     | 
    
         
             
                  Braintree::Configuration.instance_variable_set(:@environment, nil)
         
     | 
    
        data/spec/unit/braintree_spec.rb
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require File.dirname(__FILE__) + "/spec_helper"
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe Braintree do
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
      
 4 
     | 
    
         
            +
              it "doesn't produce warnings if loading braintree.rb twice" do
         
     | 
| 
       5 
5 
     | 
    
         
             
                lib_dir = File.dirname(__FILE__) + "/../../lib"
         
     | 
| 
       6 
6 
     | 
    
         
             
                braintree_file = "#{lib_dir}/braintree.rb"
         
     | 
| 
       7 
7 
     | 
    
         
             
                File.exist?(braintree_file).should == true
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: braintree
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash: 25
         
     | 
| 
       5 
4 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       6 
5 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
6 
     | 
    
         
             
              - 2
         
     | 
| 
       8 
7 
     | 
    
         
             
              - 5
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 2.5. 
     | 
| 
      
 8 
     | 
    
         
            +
              - 2
         
     | 
| 
      
 9 
     | 
    
         
            +
              version: 2.5.2
         
     | 
| 
       11 
10 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
11 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
12 
     | 
    
         
             
            - Braintree Payment Solutions
         
     | 
| 
         @@ -22,11 +21,9 @@ dependencies: 
     | 
|
| 
       22 
21 
     | 
    
         
             
              name: builder
         
     | 
| 
       23 
22 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
23 
     | 
    
         
             
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
       25 
     | 
    
         
            -
                none: false
         
     | 
| 
       26 
24 
     | 
    
         
             
                requirements: 
         
     | 
| 
       27 
25 
     | 
    
         
             
                - - ">="
         
     | 
| 
       28 
26 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       29 
     | 
    
         
            -
                    hash: 3
         
     | 
| 
       30 
27 
     | 
    
         
             
                    segments: 
         
     | 
| 
       31 
28 
     | 
    
         
             
                    - 0
         
     | 
| 
       32 
29 
     | 
    
         
             
                    version: "0"
         
     | 
| 
         @@ -64,7 +61,6 @@ files: 
     | 
|
| 
       64 
61 
     | 
    
         
             
            - lib/braintree/http.rb
         
     | 
| 
       65 
62 
     | 
    
         
             
            - lib/braintree/modification.rb
         
     | 
| 
       66 
63 
     | 
    
         
             
            - lib/braintree/resource_collection.rb
         
     | 
| 
       67 
     | 
    
         
            -
            - lib/braintree/ssl_expiration_check.rb
         
     | 
| 
       68 
64 
     | 
    
         
             
            - lib/braintree/subscription.rb
         
     | 
| 
       69 
65 
     | 
    
         
             
            - lib/braintree/subscription_gateway.rb
         
     | 
| 
       70 
66 
     | 
    
         
             
            - lib/braintree/subscription_search.rb
         
     | 
| 
         @@ -97,7 +93,6 @@ files: 
     | 
|
| 
       97 
93 
     | 
    
         
             
            - spec/integration/braintree/customer_spec.rb
         
     | 
| 
       98 
94 
     | 
    
         
             
            - spec/integration/braintree/error_codes_spec.rb
         
     | 
| 
       99 
95 
     | 
    
         
             
            - spec/integration/braintree/http_spec.rb
         
     | 
| 
       100 
     | 
    
         
            -
            - spec/integration/braintree/ssl_expiration_check_spec.rb
         
     | 
| 
       101 
96 
     | 
    
         
             
            - spec/integration/braintree/subscription_spec.rb
         
     | 
| 
       102 
97 
     | 
    
         
             
            - spec/integration/braintree/test/transaction_amounts_spec.rb
         
     | 
| 
       103 
98 
     | 
    
         
             
            - spec/integration/braintree/transaction_search_spec.rb
         
     | 
| 
         @@ -147,27 +142,23 @@ rdoc_options: [] 
     | 
|
| 
       147 
142 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       148 
143 
     | 
    
         
             
            - lib
         
     | 
| 
       149 
144 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
       150 
     | 
    
         
            -
              none: false
         
     | 
| 
       151 
145 
     | 
    
         
             
              requirements: 
         
     | 
| 
       152 
146 
     | 
    
         
             
              - - ">="
         
     | 
| 
       153 
147 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       154 
     | 
    
         
            -
                  hash: 3
         
     | 
| 
       155 
148 
     | 
    
         
             
                  segments: 
         
     | 
| 
       156 
149 
     | 
    
         
             
                  - 0
         
     | 
| 
       157 
150 
     | 
    
         
             
                  version: "0"
         
     | 
| 
       158 
151 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
       159 
     | 
    
         
            -
              none: false
         
     | 
| 
       160 
152 
     | 
    
         
             
              requirements: 
         
     | 
| 
       161 
153 
     | 
    
         
             
              - - ">="
         
     | 
| 
       162 
154 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       163 
     | 
    
         
            -
                  hash: 3
         
     | 
| 
       164 
155 
     | 
    
         
             
                  segments: 
         
     | 
| 
       165 
156 
     | 
    
         
             
                  - 0
         
     | 
| 
       166 
157 
     | 
    
         
             
                  version: "0"
         
     | 
| 
       167 
158 
     | 
    
         
             
            requirements: []
         
     | 
| 
       168 
159 
     | 
    
         | 
| 
       169 
160 
     | 
    
         
             
            rubyforge_project: braintree
         
     | 
| 
       170 
     | 
    
         
            -
            rubygems_version: 1.3. 
     | 
| 
      
 161 
     | 
    
         
            +
            rubygems_version: 1.3.6
         
     | 
| 
       171 
162 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       172 
163 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       173 
164 
     | 
    
         
             
            summary: Braintree Gateway Ruby Client Library
         
     | 
| 
         @@ -1,27 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Braintree
         
     | 
| 
       2 
     | 
    
         
            -
              module SSLExpirationCheck # :nodoc:
         
     | 
| 
       3 
     | 
    
         
            -
                class << self
         
     | 
| 
       4 
     | 
    
         
            -
                  attr_reader :ssl_expiration_dates_checked
         
     | 
| 
       5 
     | 
    
         
            -
                end
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                def self.check_dates # :nodoc:
         
     | 
| 
       8 
     | 
    
         
            -
                  {
         
     | 
| 
       9 
     | 
    
         
            -
                    "Sandbox" => sandbox_expiration_date,
         
     | 
| 
       10 
     | 
    
         
            -
                    "Production" => production_expiration_date
         
     | 
| 
       11 
     | 
    
         
            -
                  }.each do |host, expiration_date|
         
     | 
| 
       12 
     | 
    
         
            -
                    if Date.today + (3 * 30) > expiration_date
         
     | 
| 
       13 
     | 
    
         
            -
                      Configuration.logger.warn "[Braintree] The SSL Certificate for the #{host} environment will expire on #{expiration_date}. Please check for an updated client library."
         
     | 
| 
       14 
     | 
    
         
            -
                    end
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
                  @ssl_expiration_dates_checked = true
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                def self.production_expiration_date # :nodoc:
         
     | 
| 
       20 
     | 
    
         
            -
                  Date.civil(2012, 1, 8)
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                def self.sandbox_expiration_date # :nodoc:
         
     | 
| 
       24 
     | 
    
         
            -
                  Date.civil(2010, 12, 1)
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,93 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require File.dirname(__FILE__) + "/../spec_helper"
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # Helper method to confirm we have the right values
         
     | 
| 
       4 
     | 
    
         
            -
            def fetch_expiration_date(host, port=443)
         
     | 
| 
       5 
     | 
    
         
            -
              cmd = "echo | openssl s_client -connect #{host}:#{port} 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -noout -subject -dates | grep notAfter"
         
     | 
| 
       6 
     | 
    
         
            -
              date = `#{cmd}`.sub(/^.*=/, '')
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              Date.parse(date)
         
     | 
| 
       9 
     | 
    
         
            -
            end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            describe Braintree::SSLExpirationCheck do
         
     | 
| 
       12 
     | 
    
         
            -
              SANDBOX = "sandbox.braintreegateway.com"
         
     | 
| 
       13 
     | 
    
         
            -
              PRODUCTION = "www.braintreegateway.com"
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              describe "check_dates" do
         
     | 
| 
       16 
     | 
    
         
            -
                it "is done when the client library is loaded" do
         
     | 
| 
       17 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.ssl_expiration_dates_checked.should == true
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                describe "Sandbox Cert" do
         
     | 
| 
       21 
     | 
    
         
            -
                  it "logs when the cert is expired" do
         
     | 
| 
       22 
     | 
    
         
            -
                    Braintree::SSLExpirationCheck.stub(:sandbox_expiration_date).and_return(Date.today - 1)
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                    output = StringIO.new
         
     | 
| 
       25 
     | 
    
         
            -
                    Braintree::Configuration.logger = Logger.new(output)
         
     | 
| 
       26 
     | 
    
         
            -
                    Braintree::Configuration.logger.level = Logger::WARN
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                    Braintree::SSLExpirationCheck.check_dates
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                    output.string.should match(/\[Braintree\] The SSL Certificate for the Sandbox environment will expire on \d{4}-\d{2}-\d{2}\. Please check for an updated client library\./)
         
     | 
| 
       31 
     | 
    
         
            -
                  end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                  it "logs when the cert is close to expiring" do
         
     | 
| 
       34 
     | 
    
         
            -
                    Braintree::SSLExpirationCheck.stub(:sandbox_expiration_date).and_return(Date.today)
         
     | 
| 
       35 
     | 
    
         
            -
                    output = StringIO.new
         
     | 
| 
       36 
     | 
    
         
            -
                    Braintree::Configuration.logger = Logger.new(output)
         
     | 
| 
       37 
     | 
    
         
            -
                    Braintree::Configuration.logger.level = Logger::WARN
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                    Braintree::SSLExpirationCheck.check_dates
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                    output.string.should match(/\[Braintree\] The SSL Certificate for the Sandbox environment will expire on \d{4}-\d{2}-\d{2}\. Please check for an updated client library\./)
         
     | 
| 
       42 
     | 
    
         
            -
                  end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                  it "doesn't log when the cert is not expired" do
         
     | 
| 
       45 
     | 
    
         
            -
                    Braintree::SSLExpirationCheck.stub(:sandbox_expiration_date).and_return(Date.today + 365)
         
     | 
| 
       46 
     | 
    
         
            -
                    output = StringIO.new
         
     | 
| 
       47 
     | 
    
         
            -
                    Braintree::Configuration.logger = Logger.new(output)
         
     | 
| 
       48 
     | 
    
         
            -
                    Braintree::Configuration.logger.level = Logger::WARN
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                    Braintree::SSLExpirationCheck.check_dates
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                    output.string.should == ""
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
                end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                # We assume that testing logging for one is good enough for all, so we won't duplicate those tests from above
         
     | 
| 
       57 
     | 
    
         
            -
                it "checks the sandbox cert" do
         
     | 
| 
       58 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.stub(:sandbox_expiration_date).and_return(Date.today)
         
     | 
| 
       59 
     | 
    
         
            -
                  output = StringIO.new
         
     | 
| 
       60 
     | 
    
         
            -
                  Braintree::Configuration.logger = Logger.new(output)
         
     | 
| 
       61 
     | 
    
         
            -
                  Braintree::Configuration.logger.level = Logger::WARN
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.check_dates
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                  output.string.should match(/\[Braintree\] The SSL Certificate for the Sandbox environment will expire on \d{4}-\d{2}-\d{2}\. Please check for an updated client library\./)
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                it "checks the production server cert" do
         
     | 
| 
       69 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.stub(:production_expiration_date).and_return(Date.today)
         
     | 
| 
       70 
     | 
    
         
            -
                  output = StringIO.new
         
     | 
| 
       71 
     | 
    
         
            -
                  Braintree::Configuration.logger = Logger.new(output)
         
     | 
| 
       72 
     | 
    
         
            -
                  Braintree::Configuration.logger.level = Logger::WARN
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.check_dates
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                  output.string.should match(/\[Braintree\] The SSL Certificate for the Production environment will expire on \d{4}-\d{2}-\d{2}\. Please check for an updated client library\./)
         
     | 
| 
       77 
     | 
    
         
            -
                end
         
     | 
| 
       78 
     | 
    
         
            -
              end
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
              describe "production_expiration_date" do
         
     | 
| 
       81 
     | 
    
         
            -
                it "is the date the production cert expires" do
         
     | 
| 
       82 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.production_expiration_date.should be_a(Date)
         
     | 
| 
       83 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.production_expiration_date.should == fetch_expiration_date(PRODUCTION)
         
     | 
| 
       84 
     | 
    
         
            -
                end
         
     | 
| 
       85 
     | 
    
         
            -
              end
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
              describe "sandbox_expiration_date" do
         
     | 
| 
       88 
     | 
    
         
            -
                it "is the date the Sandbox cert expires" do
         
     | 
| 
       89 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.sandbox_expiration_date.should be_a(Date)
         
     | 
| 
       90 
     | 
    
         
            -
                  Braintree::SSLExpirationCheck.sandbox_expiration_date.should == fetch_expiration_date(SANDBOX)
         
     | 
| 
       91 
     | 
    
         
            -
                end
         
     | 
| 
       92 
     | 
    
         
            -
              end
         
     | 
| 
       93 
     | 
    
         
            -
            end
         
     |