From 62be38696a28eaaece81ab45e617f551348eb2bd Mon Sep 17 00:00:00 2001 From: Lelievre-david <81243462+Lelievre-david@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:12:14 +0100 Subject: [PATCH] feat(user): ajouter et supprimer des utilisateurs serristes (#88) --- Gemfile | 2 +- Gemfile.lock | 245 +++++++++--------- app/blueprinter/user_blueprint.rb | 2 +- app/blueprinter/users/grower_blueprint.rb | 4 - app/blueprinter/users/requester_blueprint.rb | 4 - app/controllers/api/v1/me_controller.rb | 6 +- app/controllers/api/v1/users_controller.rb | 35 +++ app/controllers/api_controller.rb | 6 +- app/models/building.rb | 2 +- app/models/request.rb | 6 +- app/models/user.rb | 14 +- app/models/users/grower.rb | 3 - app/models/users/requester.rb | 29 --- app/policies/application_policy.rb | 4 - app/policies/bench_policy.rb | 12 +- app/policies/building_policy.rb | 12 +- app/policies/greenhouse_policy.rb | 12 +- app/policies/plant_policy.rb | 6 +- app/policies/pot_policy.rb | 12 +- app/policies/request_distribution_policy.rb | 12 +- app/policies/request_policy.rb | 14 +- app/policies/shape_policy.rb | 2 +- app/policies/user_policy.rb | 6 +- app/policies/users/grower_policy.rb | 4 - app/policies/users/requester_policy.rb | 4 - config/routes.rb | 2 +- ...41216104204_remove_attribute_from_users.rb | 17 ++ db/schema.rb | 13 +- db/seeds.rb | 23 -- erd.pdf | Bin 34867 -> 39679 bytes spec/acceptance/api/v1/me_controller_spec.rb | 2 - .../api/v1/users_controller_spec.rb | 61 +++++ spec/requests/api/v1/benches_spec.rb | 57 ---- spec/requests/api/v1/buildings_spec.rb | 56 ---- spec/requests/api/v1/greenhouses_spec.rb | 56 ---- spec/requests/api/v1/me_spec.rb | 4 +- spec/requests/api/v1/plants_spec.rb | 31 --- spec/requests/api/v1/pots_spec.rb | 57 ---- .../api/v1/request_distributions_spec.rb | 57 ---- spec/requests/api/v1/requests_spec.rb | 46 ---- spec/requests/api/v1/shapes_spec.rb | 18 -- spec/requests/api/v1/users_spec.rb | 111 +++++++- test/fixtures/buildings.yml | 2 +- test/fixtures/requests.yml | 6 +- test/fixtures/users.yml | 14 +- test/models/building_test.rb | 2 +- test/models/request_test.rb | 6 +- test/models/user_test.rb | 3 - test/models/users/grower_test.rb | 32 --- test/models/users/requester_test.rb | 101 -------- 50 files changed, 408 insertions(+), 827 deletions(-) delete mode 100644 app/blueprinter/users/grower_blueprint.rb delete mode 100644 app/blueprinter/users/requester_blueprint.rb delete mode 100644 app/models/users/requester.rb delete mode 100644 app/policies/users/grower_policy.rb delete mode 100644 app/policies/users/requester_policy.rb create mode 100644 db/migrate/20241216104204_remove_attribute_from_users.rb delete mode 100644 spec/requests/api/v1/shapes_spec.rb delete mode 100644 test/models/users/requester_test.rb diff --git a/Gemfile b/Gemfile index e0c8729..bbd4026 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '3.3.5' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '~> 7.2.1.1' +gem 'rails', '~> 7.2.2.1' # Use Puma as the app server gem 'puma', '~> 6.4' # A PostgreSQL client library for Ruby diff --git a/Gemfile.lock b/Gemfile.lock index 34f24bf..3ff9d3c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,29 +1,29 @@ GEM remote: https://rubygems.org/ specs: - actioncable (7.2.1.2) - actionpack (= 7.2.1.2) - activesupport (= 7.2.1.2) + actioncable (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.2.1.2) - actionpack (= 7.2.1.2) - activejob (= 7.2.1.2) - activerecord (= 7.2.1.2) - activestorage (= 7.2.1.2) - activesupport (= 7.2.1.2) + actionmailbox (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) mail (>= 2.8.0) - actionmailer (7.2.1.2) - actionpack (= 7.2.1.2) - actionview (= 7.2.1.2) - activejob (= 7.2.1.2) - activesupport (= 7.2.1.2) + actionmailer (7.2.2.1) + actionpack (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activesupport (= 7.2.2.1) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.2.1.2) - actionview (= 7.2.1.2) - activesupport (= 7.2.1.2) + actionpack (7.2.2.1) + actionview (= 7.2.2.1) + activesupport (= 7.2.2.1) nokogiri (>= 1.8.5) racc rack (>= 2.2.4, < 3.2) @@ -32,36 +32,37 @@ GEM rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (7.2.1.2) - actionpack (= 7.2.1.2) - activerecord (= 7.2.1.2) - activestorage (= 7.2.1.2) - activesupport (= 7.2.1.2) + actiontext (7.2.2.1) + actionpack (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.2.1.2) - activesupport (= 7.2.1.2) + actionview (7.2.2.1) + activesupport (= 7.2.2.1) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.2.1.2) - activesupport (= 7.2.1.2) + activejob (7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.3.6) - activemodel (7.2.1.2) - activesupport (= 7.2.1.2) - activerecord (7.2.1.2) - activemodel (= 7.2.1.2) - activesupport (= 7.2.1.2) + activemodel (7.2.2.1) + activesupport (= 7.2.2.1) + activerecord (7.2.2.1) + activemodel (= 7.2.2.1) + activesupport (= 7.2.2.1) timeout (>= 0.4.0) - activestorage (7.2.1.2) - actionpack (= 7.2.1.2) - activejob (= 7.2.1.2) - activerecord (= 7.2.1.2) - activesupport (= 7.2.1.2) + activestorage (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activesupport (= 7.2.2.1) marcel (~> 1.0) - activesupport (7.2.1.2) + activesupport (7.2.2.1) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) @@ -71,7 +72,7 @@ GEM minitest (>= 5.1) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) - acts_as_list (1.2.2) + acts_as_list (1.2.4) activerecord (>= 6.1) activesupport (>= 6.1) annotate (3.2.0) @@ -83,11 +84,12 @@ GEM ast (2.4.2) base64 (0.2.0) bcrypt (3.1.20) + benchmark (0.4.0) bigdecimal (3.1.8) - blueprinter (1.1.0) + blueprinter (1.1.2) bootsnap (1.18.4) msgpack (~> 1.2) - brakeman (6.2.1) + brakeman (6.2.2) racc builder (3.3.0) bundler-audit (0.9.2) @@ -95,7 +97,7 @@ GEM thor (~> 1.0) byebug (11.1.3) choice (0.2.0) - clearance (2.8.0) + clearance (2.9.3) actionmailer (>= 5.0) activemodel (>= 5.0) activerecord (>= 5.0) @@ -107,27 +109,28 @@ GEM concurrent-ruby (1.3.4) connection_pool (2.4.1) crass (1.0.6) - database_cleaner (2.0.2) + database_cleaner (2.1.0) database_cleaner-active_record (>= 2, < 3) database_cleaner-active_record (2.2.0) activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) - date (3.3.4) + date (3.4.1) diff-lcs (1.5.1) - discard (1.3.0) - activerecord (>= 4.2, < 8) + discard (1.4.0) + activerecord (>= 4.2, < 9.0) docile (1.4.1) - doorkeeper (5.7.1) + doorkeeper (5.8.1) railties (>= 5) doorkeeper-i18n (5.2.7) doorkeeper (>= 5.2) drb (2.2.1) - dry-configurable (1.0.1) + dry-configurable (1.2.0) dry-core (~> 1.0, < 2) zeitwerk (~> 2.6) - dry-core (1.0.0) + dry-core (1.0.2) concurrent-ruby (~> 1.0) + logger zeitwerk (~> 2.6) dry-events (1.0.1) concurrent-ruby (~> 1.0) @@ -138,8 +141,8 @@ GEM concurrent-ruby (~> 1.0) dry-core (~> 1.0, < 2) zeitwerk (~> 2.6) - dry-matcher (0.10.0) - dry-core (~> 1.0) + dry-matcher (1.0.0) + dry-core (~> 1.0, < 2) dry-monads (1.6.0) concurrent-ruby (~> 1.0) dry-core (~> 1.0, < 2) @@ -152,12 +155,13 @@ GEM dry-logic (>= 1.4, < 2) dry-types (>= 1.7, < 2) zeitwerk (~> 2.6) - dry-transaction (0.15.0) + dry-transaction (0.16.0) dry-core (~> 1.0) dry-events (~> 1.0) - dry-matcher (~> 0.10) + dry-matcher (~> 1.0) dry-monads (~> 1.6) - dry-types (1.7.1) + dry-types (1.7.2) + bigdecimal (~> 3.0) concurrent-ruby (~> 1.0) dry-core (~> 1.0) dry-inflector (~> 1.0) @@ -186,16 +190,16 @@ GEM activesupport (>= 6.1) i18n (1.14.6) concurrent-ruby (~> 1.0) - io-console (0.7.2) - irb (1.14.0) + io-console (0.8.0) + irb (1.14.2) rdoc (>= 4.0.0) reline (>= 0.4.2) - json (2.7.2) + json (2.9.0) language_server-protocol (3.17.0.3) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - logger (1.6.1) + logger (1.6.3) loofah (2.23.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) @@ -208,10 +212,10 @@ GEM method_source (1.1.0) mini_mime (1.1.5) mini_portile2 (2.8.8) - minitest (5.25.1) - msgpack (1.7.2) + minitest (5.25.4) + msgpack (1.7.5) mustache (1.1.1) - net-imap (0.4.16) + net-imap (0.5.1) date net-protocol net-pop (0.1.2) @@ -220,55 +224,56 @@ GEM timeout net-smtp (0.5.0) net-protocol - nio4r (2.7.3) - nokogiri (1.17.0) + nio4r (2.7.4) + nokogiri (1.17.2) mini_portile2 (~> 2.8.2) racc (~> 1.4) - oj (3.16.6) + oj (3.16.8) bigdecimal (>= 3.0) ostruct (>= 0.2) - ostruct (0.6.0) + ostruct (0.6.1) parallel (1.26.3) - parser (3.3.5.0) + parser (3.3.6.0) ast (~> 2.4.1) racc - pg (1.5.8) - pry (0.14.2) + pg (1.5.9) + pry (0.15.0) coderay (~> 1.1) method_source (~> 1.0) pry-rails (0.3.11) pry (>= 0.13.0) - psych (5.1.2) + psych (5.2.1) + date stringio - puma (6.4.3) + puma (6.5.0) nio4r (~> 2.0) pundit (2.4.0) activesupport (>= 3.0.0) racc (1.8.1) - rack (2.2.9) + rack (2.2.10) rack-cors (1.1.1) rack (>= 2.0.0) rack-session (1.0.2) rack (< 3) rack-test (2.1.0) rack (>= 1.3) - rackup (1.0.0) + rackup (1.0.1) rack (< 3) webrick - rails (7.2.1.2) - actioncable (= 7.2.1.2) - actionmailbox (= 7.2.1.2) - actionmailer (= 7.2.1.2) - actionpack (= 7.2.1.2) - actiontext (= 7.2.1.2) - actionview (= 7.2.1.2) - activejob (= 7.2.1.2) - activemodel (= 7.2.1.2) - activerecord (= 7.2.1.2) - activestorage (= 7.2.1.2) - activesupport (= 7.2.1.2) + rails (7.2.2.1) + actioncable (= 7.2.2.1) + actionmailbox (= 7.2.2.1) + actionmailer (= 7.2.2.1) + actionpack (= 7.2.2.1) + actiontext (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activemodel (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) bundler (>= 1.15.0) - railties (= 7.2.1.2) + railties (= 7.2.2.1) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -278,12 +283,12 @@ GEM activesupport (>= 4.2) choice (~> 0.2.0) ruby-graphviz (~> 1.2) - rails-html-sanitizer (1.6.1) + rails-html-sanitizer (1.6.2) loofah (~> 2.21) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - railties (7.2.1.2) - actionpack (= 7.2.1.2) - activesupport (= 7.2.1.2) + railties (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) @@ -294,64 +299,64 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rdoc (6.7.0) + rdoc (6.9.1) psych (>= 4.0.0) redis (4.8.1) - regexp_parser (2.9.2) - reline (0.5.10) + regexp_parser (2.9.3) + reline (0.5.12) io-console (~> 0.5) - rexml (3.3.9) + rexml (3.4.0) rspec (3.13.0) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.1) + rspec-core (3.13.2) rspec-support (~> 3.13.0) rspec-expectations (3.13.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-mocks (3.13.1) + rspec-mocks (3.13.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (6.1.5) - actionpack (>= 6.1) - activesupport (>= 6.1) - railties (>= 6.1) + rspec-rails (7.1.0) + actionpack (>= 7.0) + activesupport (>= 7.0) + railties (>= 7.0) rspec-core (~> 3.13) rspec-expectations (~> 3.13) rspec-mocks (~> 3.13) rspec-support (~> 3.13) - rspec-support (3.13.1) + rspec-support (3.13.2) rspec_api_documentation (6.1.0) activesupport (>= 3.0.0) mustache (~> 1.0, >= 0.99.4) rspec (~> 3.0) - rubocop (1.66.1) + rubocop (1.69.2) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 2.4, < 3.0) - rubocop-ast (>= 1.32.2, < 2.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.36.2, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.32.3) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.37.0) parser (>= 3.3.1.0) - rubocop-performance (1.22.1) + rubocop-performance (1.23.0) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.26.1) + rubocop-rails (2.27.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.0.5) + rubocop-rspec (3.3.0) rubocop (~> 1.61) ruby-graphviz (1.2.5) rexml ruby-progressbar (1.13.0) - securerandom (0.3.1) + securerandom (0.4.1) sidekiq (6.5.12) connection_pool (>= 2.2.5, < 3) rack (~> 2.0) @@ -372,25 +377,27 @@ GEM actionpack (>= 6.1) activesupport (>= 6.1) sprockets (>= 3.0.0) - state_machines (0.5.0) - state_machines-activemodel (0.8.0) - activemodel (>= 5.1) - state_machines (>= 0.5.0) + state_machines (0.6.0) + state_machines-activemodel (0.9.0) + activemodel (>= 6.0) + state_machines (>= 0.6.0) state_machines-activerecord (0.6.0) activerecord (>= 4.1) state_machines-activemodel (>= 0.5.0) - stringio (3.1.1) + stringio (3.1.2) thor (1.3.2) - timeout (0.4.1) + timeout (0.4.3) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unicode-display_width (2.6.0) - useragent (0.16.10) - webrick (1.8.2) + unicode-display_width (3.1.2) + unicode-emoji (~> 4.0, >= 4.0.4) + unicode-emoji (4.0.4) + useragent (0.16.11) + webrick (1.9.1) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.6.18) + zeitwerk (2.7.1) PLATFORMS ruby @@ -420,7 +427,7 @@ DEPENDENCIES puma (~> 6.4) pundit (~> 2.1) rack-cors (~> 1.1) - rails (~> 7.2.1.1) + rails (~> 7.2.2.1) rails-erd (~> 1.6) rspec-rails rspec_api_documentation (~> 6.1) diff --git a/app/blueprinter/user_blueprint.rb b/app/blueprinter/user_blueprint.rb index 91ff408..6b6e123 100644 --- a/app/blueprinter/user_blueprint.rb +++ b/app/blueprinter/user_blueprint.rb @@ -2,5 +2,5 @@ class UserBlueprint < Base # Fields - fields :email, :role, :first_name, :last_name, :laboratory + fields :email, :first_name, :last_name end diff --git a/app/blueprinter/users/grower_blueprint.rb b/app/blueprinter/users/grower_blueprint.rb deleted file mode 100644 index 7f2c9b1..0000000 --- a/app/blueprinter/users/grower_blueprint.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -class Users::GrowerBlueprint < UserBlueprint -end diff --git a/app/blueprinter/users/requester_blueprint.rb b/app/blueprinter/users/requester_blueprint.rb deleted file mode 100644 index 3bd4de0..0000000 --- a/app/blueprinter/users/requester_blueprint.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -class Users::RequesterBlueprint < UserBlueprint -end diff --git a/app/controllers/api/v1/me_controller.rb b/app/controllers/api/v1/me_controller.rb index 4372b79..19b5461 100644 --- a/app/controllers/api/v1/me_controller.rb +++ b/app/controllers/api/v1/me_controller.rb @@ -32,10 +32,6 @@ def destroy private def update_params - if current_user.requester? - params.permit(%i[first_name last_name laboratory]) - else - params.permit(%i[first_name last_name]) - end + params.permit(%i[first_name last_name]) end end diff --git a/app/controllers/api/v1/users_controller.rb b/app/controllers/api/v1/users_controller.rb index 0f639b7..83f60d3 100644 --- a/app/controllers/api/v1/users_controller.rb +++ b/app/controllers/api/v1/users_controller.rb @@ -6,4 +6,39 @@ def index authorize users render json: apply_fetcheable(users).to_blueprint end + + def show + user = policy_scope(User).find(params[:id]) + authorize user + render json: user.to_blueprint + end + + def create + user = User.new(create_params) + + authorize user + + if user.save + render json: user.to_blueprint, status: :created + else + render json: { errors: user.errors.full_messages }, status: :unprocessable_entity + end + end + + def destroy + user = policy_scope(User).find(params[:id]) + authorize user + + if user.destroy + render json: { message: 'User deleted' }, status: :ok + else + render json: { errors: user.errors.full_messages }, status: :unprocessable_entity + end + end + + private + + def create_params + params.permit(:email, :password, :password_confirmation, :first_name, :last_name) + end end diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 82edf47..c0a27b4 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -64,11 +64,9 @@ def render_validation_error(model) end def unauthorized(exception) - if exception.record.is_a?(ActiveRecord::Base) && exception.record.errors.present? - return render_error(exception.record, code: 403) - end + return unless exception.record.is_a?(ActiveRecord::Base) && exception.record.errors.present? - render_error(exception.message, code: 403) + render_error(exception.record, code: 403) end def not_found(exception) diff --git a/app/models/building.rb b/app/models/building.rb index d178a51..802be00 100644 --- a/app/models/building.rb +++ b/app/models/building.rb @@ -14,7 +14,7 @@ class Building < ApplicationRecord # # id :bigint not null, primary key # name :string -# description :string # created_at :datetime not null # updated_at :datetime not null +# description :text # diff --git a/app/models/request.rb b/app/models/request.rb index ed04fdf..05db772 100644 --- a/app/models/request.rb +++ b/app/models/request.rb @@ -89,9 +89,9 @@ class Request < ApplicationRecord # photoperiod :integer # created_at :datetime not null # updated_at :datetime not null -# requester_first_name :string default(""), not null -# requester_last_name :string default(""), not null -# requester_email :string default(""), not null +# requester_first_name :string not null +# requester_last_name :string not null +# requester_email :string not null # laboratory :string # # Indexes diff --git a/app/models/user.rb b/app/models/user.rb index c73b913..b3d25d1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -7,12 +7,6 @@ class User < ApplicationRecord # Discard include Discard::Model - # Enumerize - extend Enumerize - enumerize :role, - in: %i[requester grower], - predicates: true - # Validations validates :email, presence: true, @@ -28,9 +22,7 @@ class User < ApplicationRecord presence: true, on: :create - validates :role, - :type, - :first_name, + validates :first_name, :last_name, presence: true @@ -64,7 +56,6 @@ def anonymize self.remember_token = 'anonymized' self.first_name = nil self.last_name = nil - self.laboratory = nil save(validate: false) end @@ -79,11 +70,8 @@ def anonymize # encrypted_password :string(128) not null # confirmation_token :string(128) # remember_token :string(128) not null -# role :string # first_name :string # last_name :string -# type :string -# laboratory :string # created_at :datetime not null # updated_at :datetime not null # discarded_at :datetime diff --git a/app/models/users/grower.rb b/app/models/users/grower.rb index d6d43aa..2b99557 100644 --- a/app/models/users/grower.rb +++ b/app/models/users/grower.rb @@ -18,11 +18,8 @@ class Users::Grower < User # encrypted_password :string(128) not null # confirmation_token :string(128) # remember_token :string(128) not null -# role :string # first_name :string # last_name :string -# type :string -# laboratory :string # created_at :datetime not null # updated_at :datetime not null # discarded_at :datetime diff --git a/app/models/users/requester.rb b/app/models/users/requester.rb deleted file mode 100644 index a4a3ace..0000000 --- a/app/models/users/requester.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Users::Requester < User -end - -# == Schema Information -# -# Table name: users -# -# id :bigint not null, primary key -# email :string not null -# encrypted_password :string(128) not null -# confirmation_token :string(128) -# remember_token :string(128) not null -# role :string -# first_name :string -# last_name :string -# type :string -# laboratory :string -# created_at :datetime not null -# updated_at :datetime not null -# discarded_at :datetime -# -# Indexes -# -# index_users_on_discarded_at (discarded_at) -# index_users_on_email (email) UNIQUE -# index_users_on_remember_token (remember_token) -# diff --git a/app/policies/application_policy.rb b/app/policies/application_policy.rb index 30dbb74..83d2cf2 100644 --- a/app/policies/application_policy.rb +++ b/app/policies/application_policy.rb @@ -5,8 +5,6 @@ class ApplicationPolicy attr_reader :user, :record - delegate :requester?, :grower?, to: :user - def initialize(user, record) @user = user @record = record @@ -25,8 +23,6 @@ def destroy?; end class Scope attr_reader :user, :scope - delegate :requester?, :grower?, to: :user - def initialize(user, scope) @user = user @scope = scope diff --git a/app/policies/bench_policy.rb b/app/policies/bench_policy.rb index 12b12b6..beb9331 100644 --- a/app/policies/bench_policy.rb +++ b/app/policies/bench_policy.rb @@ -2,24 +2,22 @@ class BenchPolicy < ApplicationPolicy def index? - grower? + true end def show? - grower? + true end def create? - grower? + true end def update? - grower? + true end def destroy? - return false unless grower? - return true if record.request_distributions.empty? record.errors.add(:request_distributions, 'can\'t delete a bench with ongoing requests') @@ -28,7 +26,7 @@ def destroy? class Scope < Scope def resolve - grower? ? scope.all : scope.none + scope.all end end end diff --git a/app/policies/building_policy.rb b/app/policies/building_policy.rb index bf7bd71..3ac5640 100644 --- a/app/policies/building_policy.rb +++ b/app/policies/building_policy.rb @@ -2,24 +2,22 @@ class BuildingPolicy < ApplicationPolicy def index? - grower? + true end def show? - grower? + true end def create? - grower? + true end def update? - grower? + true end def destroy? - return false unless grower? - return true if record.greenhouses.flat_map(&:benches).flat_map(&:request_distributions).empty? record.errors.add(:request_distributions, 'can\'t delete a building with ongoing requests') @@ -28,7 +26,7 @@ def destroy? class Scope < Scope def resolve - grower? ? scope.all : scope.none + scope.all end end end diff --git a/app/policies/greenhouse_policy.rb b/app/policies/greenhouse_policy.rb index 965eb7f..189ca83 100644 --- a/app/policies/greenhouse_policy.rb +++ b/app/policies/greenhouse_policy.rb @@ -2,24 +2,22 @@ class GreenhousePolicy < ApplicationPolicy def index? - grower? + true end def show? - grower? + true end def create? - grower? + true end def update? - grower? + true end def destroy? - return false unless grower? - return true if record.benches.flat_map(&:request_distributions).empty? record.errors.add(:request_distributions, 'can\'t delete a greenhouse with ongoing requests') @@ -28,7 +26,7 @@ def destroy? class Scope < Scope def resolve - grower? ? scope.all : scope.none + scope.all end end end diff --git a/app/policies/plant_policy.rb b/app/policies/plant_policy.rb index b71879f..4e8c14b 100644 --- a/app/policies/plant_policy.rb +++ b/app/policies/plant_policy.rb @@ -10,16 +10,14 @@ def show? end def create? - grower? + true end def update? - grower? + true end def destroy? - return false unless grower? - return true if record.plant_stages.flat_map(&:request_distributions).empty? record.errors.add(:request_distributions, 'can\'t delete a plant with ongoing requests') diff --git a/app/policies/pot_policy.rb b/app/policies/pot_policy.rb index c2fac5f..ccca9b7 100644 --- a/app/policies/pot_policy.rb +++ b/app/policies/pot_policy.rb @@ -2,20 +2,18 @@ class PotPolicy < ApplicationPolicy def index? - grower? + true end def show? - grower? + true end def create? - grower? + true end def update? - return false unless grower? - return true if record.request_distributions.empty? record.errors.add(:request_distributions, 'can\'t update a pot with ongoing requests') @@ -23,8 +21,6 @@ def update? end def destroy? - return false unless grower? - return true if record.request_distributions.empty? record.errors.add(:request_distributions, 'can\'t delete a pot with ongoing requests') @@ -33,7 +29,7 @@ def destroy? class Scope < Scope def resolve - grower? ? scope.all : scope.none + scope.all end end end diff --git a/app/policies/request_distribution_policy.rb b/app/policies/request_distribution_policy.rb index 17e9df9..b6becdf 100644 --- a/app/policies/request_distribution_policy.rb +++ b/app/policies/request_distribution_policy.rb @@ -2,24 +2,22 @@ class RequestDistributionPolicy < ApplicationPolicy def index? - grower? + true end def show? - grower? + true end def create? - grower? + true end def update? - grower? + true end def destroy? - return false unless grower? - return true unless record.request.accepted? return true if record.request.request_distributions.count > 1 @@ -30,7 +28,7 @@ def destroy? class Scope < Scope def resolve - grower? ? scope.all : scope.none + scope.all end end end diff --git a/app/policies/request_policy.rb b/app/policies/request_policy.rb index c0b2819..b033a47 100644 --- a/app/policies/request_policy.rb +++ b/app/policies/request_policy.rb @@ -6,32 +6,30 @@ def index? end def requests_to_handle_count? - grower? + true end def show? - grower? + true end def accept? - grower? + true end def refuse? - grower? + true end def cancel? - grower? + true end def complete? - grower? + true end def destroy? - return false unless grower? - if record.pending? true else diff --git a/app/policies/shape_policy.rb b/app/policies/shape_policy.rb index 027bde4..c1920f4 100644 --- a/app/policies/shape_policy.rb +++ b/app/policies/shape_policy.rb @@ -2,6 +2,6 @@ class ShapePolicy < ApplicationPolicy def index? - grower? + true end end diff --git a/app/policies/user_policy.rb b/app/policies/user_policy.rb index 34d31e3..60d2325 100644 --- a/app/policies/user_policy.rb +++ b/app/policies/user_policy.rb @@ -9,6 +9,10 @@ def show? true end + def create? + true + end + def update? true end @@ -19,7 +23,7 @@ def destroy? class Scope < Scope def resolve - grower? ? scope.all : scope.where(id: user.id) + scope.all end end end diff --git a/app/policies/users/grower_policy.rb b/app/policies/users/grower_policy.rb deleted file mode 100644 index ffab1b0..0000000 --- a/app/policies/users/grower_policy.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -class Users::GrowerPolicy < UserPolicy -end diff --git a/app/policies/users/requester_policy.rb b/app/policies/users/requester_policy.rb deleted file mode 100644 index 429bbe7..0000000 --- a/app/policies/users/requester_policy.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -class Users::RequesterPolicy < UserPolicy -end diff --git a/config/routes.rb b/config/routes.rb index ef5daf8..258e335 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,7 +16,7 @@ post :accept, on: :member end - resources :users, only: :index + resources :users, only: %i[index show create destroy] resources :pots, only: %i[index show create update destroy] diff --git a/db/migrate/20241216104204_remove_attribute_from_users.rb b/db/migrate/20241216104204_remove_attribute_from_users.rb new file mode 100644 index 0000000..462a02c --- /dev/null +++ b/db/migrate/20241216104204_remove_attribute_from_users.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveAttributeFromUsers < ActiveRecord::Migration[7.2] + def up + change_table :users, bulk: true do |t| + t.remove :laboratory, :role, :type + end + end + + def down + change_table :users, bulk: true do |t| + t.string :laboratory + t.string :role + t.string :type + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 8c2252c..f8ebb91 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_12_04_211606) do +ActiveRecord::Schema[7.2].define(version: 2024_12_16_104204) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -26,9 +26,9 @@ create_table "buildings", force: :cascade do |t| t.string "name" - t.string "description" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.text "description" end create_table "greenhouses", force: :cascade do |t| @@ -138,9 +138,9 @@ t.integer "photoperiod" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.string "requester_first_name", default: "", null: false - t.string "requester_last_name", default: "", null: false - t.string "requester_email", default: "", null: false + t.string "requester_first_name", null: false + t.string "requester_last_name", null: false + t.string "requester_email", null: false t.string "laboratory" t.index ["handler_id"], name: "index_requests_on_handler_id" t.index ["plant_stage_id"], name: "index_requests_on_plant_stage_id" @@ -151,11 +151,8 @@ t.string "encrypted_password", limit: 128, null: false t.string "confirmation_token", limit: 128 t.string "remember_token", limit: 128, null: false - t.string "role" t.string "first_name" t.string "last_name" - t.string "type" - t.string "laboratory" t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.datetime "discarded_at", precision: nil diff --git a/db/seeds.rb b/db/seeds.rb index 24d7d29..f43b359 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -13,19 +13,7 @@ confidential: false ) - # Users - Users::Requester.create!( - role: :requester, - email: 'dev+requester@progeser.com', - password: 'password', - password_confirmation: 'password', - first_name: 'Requester', - last_name: 'ProGeSer', - laboratory: 'My test lab' - ) - Users::Grower.create!( - role: :grower, email: 'dev+grower@progeser.com', password: 'password', password_confirmation: 'password', @@ -33,17 +21,6 @@ last_name: 'ProGeSer' ) - discarded_user = Users::Requester.create!( - role: :requester, - email: 'discarded_requester@progeser.com', - password: 'password', - password_confirmation: 'password', - first_name: 'Discarded', - last_name: 'User', - laboratory: 'My test lab' - ) - discarded_user.discard - # Pots Pot.create!( name: 'My square pot', diff --git a/erd.pdf b/erd.pdf index 86e4f29df891875a340dee1e022f16a627a56e39..2aa7dbad7eb09ae5fe693229aed72d494281716f 100644 GIT binary patch literal 39679 zcmbrk1C%Dq)-77-vTfVOSGKJ#+w8J!+qTh#E_d0sZFSkY-Fu(2?>X=O_l-Bk`!Yvn zuDK#3BUVJ@$ZyU?rXV6l$3)KoP1bZ#^9s#M$Vg~sXbH{3L&zXwVr%APPRRBfQi3KV zBxDe?uy!(W_BOB}Oz24GGzNp{G`IRI0g8~ZD#HC`;HnsBNruLk=&lCJJ z+wrMR=Khsqg8>hw!>ocFsnhtB(r`Uv1w}ZTI7eC++Q&!iUZFTixr!g4q*K zPVVD1#nFe+AfF_^3Y?&giwoN6fXn9jwqWX2a!=so`^r?JJc`$j{SMN##a9hW7Z;42 zyUVYVI(lBv$sa(wEKjfBUtiX8;HtV#InO@ltjNKK+-h5~oIXqPqk%?WBrOpdX`GgD z%8^Iv7!_p(dPy=UO_m9p%ui}6@){#Vm8_&%MIwik>ClHlHwnO-e-qxJK*yu+ zcIN@9j9z$Q6pB1l-)efy;rZ7o$mP0O?-tCJ%rj7zJRr->b23{Fqg>vb%15v=`V{M8+uvCXr**FVZ7fKY@T9SIRFaXH?r6 z4%S$8C<t!%&;g(6GPI;4vi)fZMAv1G&+uW>ba9Ki4W17=qg?G~ex+eT;@QiU$kQw9I zQ~tsS$Y5Ng+AGGJTUTH(UtHI(FYq4T548&Wp?I#tDBUb!av))cmoQ1$47S=r-FESaiFo98CC6Lza+B)4Fi zatDClA)B3UfWm&=FfsxkDZ!x)p;--CdbYl<{$AK1XgPRd0qO(b+ilv=fc0*!fqQ*S zKPflT+fFAg9*F3G(4!br^Auq&g`kMC*%8J&`-0c*8FaCqPL>Lqbi$$L0Y8vxA94?9#o@82W?^)i@Ip@q zIE+{5!##C8JMl%PM%)A-#$LzYdY1>+*pUjHNIpGBN07G)sL_%0{^s^pFVr*|TZfE|B2``hBuH`4CR1Tu)YQ`y+Rfbsm7cGjQ>L>(z zbG50N9-Z|z;s3zHaQ>}g{6i5fy^O5y& z=o<$w58#(n7oq-AM%9Ms+(o(Sg=k|3M&;VepM(!j&-hq&iGvA81imZC>|bG4s?4o; zBGfWg{O<)vL9fnAHZKT9w7#^~jKa2TxcJ3q90s{zFM)8N=nF1FS5bO2^w)8LEJ{F| z7D6OQd>brYVzC9`BHCjYS#_CwBVT%otEdUa+$$G>{Fj}ydo-S-f+M* zszWW)@Ib%~%&I{JF2jzjV}gtE`n}x3z_qZ{zBB2l*6}bZC2oJENLbjfR3qk0QSTvIJ#bNrS`6cNGA4t$>UeRSNa(Afpn~)CkTuHXpUnrb0 z#W%cHZ)Gwfq+nmXvYRDHl%4@36|U`aqpZ3V7r|GtO4XA?rP91lYnZTf1&Uc|u?KYT zx|_4|cecGx@(jlgR?XG;+c3zws?kTy3e|K28Xhf%K>ow&sd|?g8%LtQJkC(W##jMw zL&fgsk5!AQ&f@0^++OV3`mkMBto> z8P9H3D7_2DS$z)K9ioAyw!jvER?4p;U-JYJty57 zH5;Eck{rBprkLH(4oFulNI&wgnt4SjAHDNWHhl?d=S=bKkyM&m9km0Q%N%>fTIb6P zWLjK{8&I_89!F29`5|+AQ>923V7*G=k(HtucQL06V0HX>TPtH7nlFowD@eW$3Kv-v z3Z0b05D*NDyeXy*3AyXjoI|lASG|n(tNcTKiiK_~3aR?cOc@mM5kzA1=}GKgpy)1V zji@ZF-OH578As`P(aK#2p`)3~{{;HH2iq;8fp#o>qCTg|#pcE^d z&Lk7}Esh)oH}GKjw~pt;p$baqB7sMpq;yeO?C*|FYz+?acU+_xMj2Rt7B6}pYB0Uo zpYi_o7$?jkZJuJzUQn4XN-N4lmS~)#(JxULgA35h2H9nHDCSp04t8F8w4JY?nIR7A|)+Zj9oljghrvREE1-Z%+l~r;f;17% zyU!d4y4>O{_;QP+NQ&HG*pe=2h-;t)>DArT>`|gX&-ly3PPrvWK5Fe(-JGmca^YKGjC7F4Qm)mYP=7k7WiaX)fVP|^?I3i{7E z=LT!Z&3ff-+f+BpVHGW1(6fVZuH?VMaN3TTzDv*$Gm}@Hikhyr% z`RLuXYjB@#sdODBhvA4Us#Ai;&)i~?DCVZf#1EWfZg>Y;D$wc)H({{8!bq-&qpEYo zL9g%6Ja93Xr|xtcTfqfFP{)paGP8ChoynGGz6td4zx{B31GwfiK6E@ERkBe$RRO3% zi9|z}F3LJ4rH{^{c$FBvd48QA3ZD`%Q3q?2Ji}lmD@|yYK%BALE#6-D(>ugIUMrvK zzqg=d8m~9=Z(d{ESTbTb_ZjHXa-y9&{Ca|7tAUcDzds5#U%yhlss-7;Z00lF|JAe0 zQ`lRjxhKDyMjcvTjiAgf!vUs89@`E^L=YlopDIu%7+E)BcG@jm2M&@EjlfXB8!qepNF%-oNr z!%7VmckT*?v$&%_cvU2AE;ZH4? z6tGI&Fk_7|G{~GpEg?IqaegSQRX{nwd~ukXr3OT5JGjyTXJP(QAq|2S+zpf9Y?XED zYjtlBbCiC-F`c5^n6`=EIyhjFq($H$n&{hVJ@cWP0vjV(gJgWTNM)T!YP9E zKe$~Wn__XPL_@ZAa+#9@Cj@F@;N|7j4JSpNr36~Qmz@K+$i;w4jkO)s@s+U_86BW+ zfN5AL&)N*;ot4O)EYog^BME6s+@M$ebJ7GsX0W8lhv7!F)L1+|&btHIu`&85Qu7wXgP6 zH?g}$vH1m)T+k}rL>B2tnrP7I_R$G`{geY)9{NI8XynDy`b-8!U#oU36l4;PT~=fC z+F<;mVwVb@J>0xLZMt3Cf>owmbLY*b+no7eP8R!kICA)YS{NC6)T45F!3Y811@PT1 z#L~D7$ajjLAtK{WrTa{d7f2PtKuv^luS1NYtkKBVB3%Si+7S)4p4%Be;&pj_1q?eS zAjV>VeB)Hi!Er;TkQ(#x&;o{>31kWVg}{l+)EI@y=tj#~6pl*E#U5jQ3OFj z|Ak|>x?nOn6#5PqFNDo=9ds~lSmg^|MxP}H-itk?zBHfvm?BRbl;a&f=ScpDs7QZL z5`&JpRJkoct^0k?w!0<%E4_n$;;vN_u{$?X4*rxP-Z$xG!sjyJV2Dy zu{zN%+)q^gdvR?Um;g>~m~-Ez^8xZ4KFX_Ztq7<1h2%)6>Z9~_p)SANC*h_pj}2OP zdY6q(7JYFrAQ3|69rX0lK9#$&Pe^}Z?7T?C>*SI#aol-W4vZTcWKHh%;4BX~{CL$H zTq{QdB%fSk*gF;($fs(2@O;SLmt^oHrXHyui*Y6vcK zyJFEFu3*Y641GSzev=H^0}Zvqd@IO?q+nqV>e0`W9v|pwNdK`Z`ndJ$^IX(X6WYYq z_+Mns@2fvF&>!yS&-pj|!^+0W{-?knljR?l=r3MK)Xhm;+37bYM99PQ2l)MCFkt*` z5Hbi05;74o7#aLN{$`4PJN`a0h}qdX{YPn2Iz~E1LXLkkO@AsdrDOUHasD^N{2K!N zH^lNAVq*MnjP(!3^xqg89TOoF^M7M3f3QED`HSEB-L&8Pzq-iupG=sF`!^Fp26;nE zWha}zdi*bHjOl-KV{(K{e|f|#92}hpS^stY|IU}OC^K$H97Y^~0D*G?>-?Y5|Ev0c zg`er4;4}RR(;xIdI69_(;`Bd~bbsRccaxb20j#Wy|IONILa8K)|M+>&@c!93?ZmNh zC-*2nx54^K3>h#@OxQvg0E4M0peT@yDICT%LliDY%rw~FazvIfz&41EY2(BiGbM6M z&cf7?)=!%_o`z*6$2pl<%91Y9w)OrgR^T492VgMU1k|3XEL3aVf8BWbRjuW$NC=eY zN1xXNaJ8RHKrs5Sq42{_pC50{#+$6ZHsbp-Jr0t$G@)0oZ$E(p(Fw$q3Y>(4POHi1 zTln&g8{P+v(9+UMdagrfuf+-|#$hASEJn5lX%KXLXg&0Q zH3}Rrs`VVW0399i3b&#XK#={&Vpq+yZM6)JDW6_C(YmL(gB=>OV8aGe6dyv$L**fx zE5~fr%^guUEIhDf#4!vMS)sAkw33pmY2&h}tCPB2k_^<$W+I4)gn@uzYkPC5k`Oi( z6OM{Qvzi{$4p;=!MNkt`vz;WeoJ;4|dm>G8PWh#&=HOcvSoOMt|Ij~lqzi{&Yy2V( z5W1U%1NyR9&^^VtCjgW9j?Zurjx8B$gvnN$KkrbjeQ=-wZ>$Ms7fxh>or^x+mPSZ* zhL-VFvH(pEyF;b;nOBOf{Aqj}tD2raS3f=-7>;Qrgg7A^&5E@M>1)S$o^v&?zMDId zRlQYJ#!&8w(d?_EtHPaR23MogH<}D6)F6KSFD1|_`XDUUS7vqx99BODe)gUpxLQ37 zfImCFd5#~Q@}H^}x}|UQm!ESLr?X_jC2_18CVRq}MzTrlclOSPK-z*5TZ4w7jdCdP z#HBO2wDN;RMTujPJOY_hA?!p+d{>m9x}!!wghThL8W%QaLmzocjMxv&ClX9$0RbMY zJ~nD_&Rb9r;@LMR%q-;7No2ZSrpe^!a`NxjL3qE|n|3aE4Xg?jx!mM=T{+{0pr64I z)(ff$0T-@~-#-(PeWU&5>Qv_Ub6h0=REY>K=7r+ml;&B=9Z!$JSG#GdZRzJ!J9q0= z#oeuwb%(sS7?Pdqx2SP54jLyHQ77!wl)=^G#^pv80;>^)@=irj{Mw1Eoa?l@Mq^0- zO3>$o3+=WNyg^`?3BTX})Cg-tq_dPVw-?>C?eP&vHS4CS7eGWRRTXVLJ3`&6`4B`Z zok08`!%7sCF@X;Zg21A_4`x|c=OjX1ZXvB$^j) zXmE7Fpoi*ozJj@*p}ag6-@5iZUazLngYlMaF)F${AjqP1wevc@+fSNqmywLOIyYKs z*!%;9Vt%ff>Dj4jgKmoci;I z?u~s6A7Y}S++590;j948qieMG$Qzwm&^?Gxdb4OsbL)sdPVZaCWt(-!xl+zT&Vpit zo0>$}Ccc&YaH_p_m4355v}e`qgw6Mh?|4m}W=8AZXKZn-)XF%kS8;3}>(T9mu#ea> zc{lZ-+C!`4d9ciVy0FK^%S2lgf#HzgL}F@-zDPnGY#XX)6sz|#Glz;-&R7_-dcct= zx9(L#;eQL*5Z*m^AUOgq7Q7%*v`iHhK#v5oQ*tAe3Irn+pHIx9rJ|$)oESLhfvzu2 z1C^m0RSAZX6rhWlRzgwi8P~WWvWf5{XgCI)w#TJb&S`h`+AiPh&%?eO*gBX_+%T~n z3HcJ2Y$1m-+rRaMKGgRQL}_u_j22uo{Jawr{?!stI#*$Xy-Un26rT`xI*VHlFp&*@=~Gs1PSYZ36}oZ0^yb;rNr8<|8WH9T~(|CFv~8o+0zN$-+m-={56o?q0TFtDd8nwbxnQ-h!LU)8|)vAWmBKqRDy`g3YRn?nyK~{l9r4m6^blozvy{2t|VWjeJe0{vW>tMJefvA zFux6r$)x+u<_`3^bw|YHMh^s}E#T)xCrnWwZH3_TbL?INpw6umY=-f|xuz}Hc2}-F zIy5ov5Aj`}zwepY(h6III=nx6eM%gg4?P^PVS#y%`94S1XoSX2t$j>KZQSkLCx-{; z^Y7wa?H&RE_Q`<+k)GPo)2OhW(hl$JzZ}6COt7lsaH7$9pG)_FJ3Z?aa?x_CJaJOBJ@|U8b~C{H)mSe zhbHVVy7OBP0ZXGopsadB44J*ii%hFCuG^K(7d3F~ZwGb|JFfqH8Lvrhcd2#rA~>m; z!1TTv*!_BW0q5;}fWmxq<7xMPw>9+%!R8>c{$=z-b*7}%ne@JrKOPGb!I0c>FLMCY z>J1Ecs@!BoY_p7A%+sBrZ4dg^=>Vj7^gvDhoW3EzFv_;awo!cKip;2~^#oItIH2hMeV=%lxhuvo8W)$PYO=Or0zRzRri% z@-ql=rBn>H+AZEER%b8!#h{}tEFOwYJGPzJGy;Or3m- z#Ad4&FWu6FxkXxfLEELWbFdMWjM{B;VAZ(f{Y4ATlxFw6=pTe95A9J;X;-UrNlCoo z8pCMlt9Mxp7Ip!}!>0|=u@8so;u!B~)`DA$^6Y(ARzf`Tso+yyw<(z2V=_U7z&jE+ z5;%wkGuR~P32EH3hzR}X6YM<1~|azi84^|#l9nF?+;@Z=xVZ+`ZP>uG_?R4Qtr^O zRAOt~>ID?eO+FuH!zUr4Y*n+^sRriaP-zIBZ$sI$Ie!$tW~Wmnx974i8=q2Yy@1q* z$ukvCR%EBCydK6xL{tZASzohuijmRSKhv!G-aVD18Vwic-%2Co$&Ks#uY8Ob);BOm z#GjbxdY4uO8r@S%+08Bwh&M`>*L_2WDf4oOj4n#|GG)|KM61`Tx+uZ0%HOZQk?bEH zj)u68a~FL>E+tf``U&e@vW7*t&j(Yk>fZGy{2un>G#U9NEx6X4$72TZCf3ZXMh#!Oc~tF%5y4u|v}c(}Wxpe#H(Ix)uC<#T;|#H&+J*U-%2z zfC;nCmDfJ>tNvQ76H66*R~V8g{u`p40N-RAK6vkIZ|AZW=$t-3Zuh0Hl=i#TLKx4vP{M51VI6~i4@Fyxf5psB3P$he>m>bj)f6xgku#y;h0(^bEb-~*_ zi3&kO2wMm^5(Gh1p9=6}?_QVyf0ln&_tps7sEE}u{7dvVxu>paW{Pe4f$T;BijpD5 z>LFgdp+_%pEa{5tBtB{Ocs(V_dDe;;k2p=S_nevnvzf6IJ?2Li-g7RON*Sy+bUu7O zoDVk4>n3{y+F;d|_PKBPHN9Vh23xKBWuYaY(xb~G&+}eJ=x60s6P5RQnsVPl-eRCbLVXC$USi0abB>MgMer09~{#&Um53dHE~|tTL|AYo}^E- zp~}*c%K`w?LG3yqB-1d}p@C`e`HPd?I9Dl2KH}DlKzhW`0#5xx^~0nxs>aOe@~hLO zxP4Aa2?w>P)By>~nxhgcWttV~nljFcT_tViG}$7trDn6CjM;?@(|U7yEVL+nm_=*u zcnxVQF%}#RsV4@T2DdB3KO(XxUA|kbINxbM=sW~iCtG(`iMxnCn9;{)4sVQA3tw~u zv%e;4#Q+N6$3BsM1-HRy+;anKwC#fejFFsUW}V!!`p7kwu#_7W=6XJy|c{Zf51GVMHajbSVyrT2579 zbRDRa#R+7TsrDnI4p}@2jJ9UB-fu;f`hMnDeTlpODV4KHv6^6+IDWn5>9^?lBz8qP zHzBquw#)E5f(#td3JWzIKidifh3H-F)qTGiRcywZr}aD8TX5AMze*;74(RPHPw2%V zbIQV4aR$`pxU6N%oOc`NGhW(&G+0Q3D2+TVMAp&2rVm?MyMpi6Ab+)T^&|;^VRPn1 z?n*rH`qQht%Gg#NPb?R%Ow&t#}Wn5HIr%Flzn^SPU(gzb8$TtzVt z3o6i`tes40)(!Zo*&p0{7%nP}?=&^hXYf=>(K5lFWM=Irl$pN)yr{E+dR);-BxYqH z(lYoki{H9J{44)^5&jT|i0$hZ2w(yd(!Ssv3Z)S{W9KG| zD0PAP3c_o~?ot|7vZxkuW<@`7D%p+r@Hk^!QPSgwK9a;ZGAMFyJF^dY$j4eO#`+c@h?^A84BUKDUX!VW zaZKF={#JZn2FALjyx{DwT-Ng9ftw7VrCOv}lM!Y%%O6jdlrR=IEgt}Ui+K6G)-KS~LP+p@C)K0=B zLxxn}OJC zim}(n3dmNhz@bJ;rm*?m%L7u0ZpcbBSZ=g4|@vn+i&DYW1;3nmuVY6YM5CRG0*hU-x z+Ar|J3~(i2PYWgo;882#Pj(3Vm~}-2hop&1BleWNgj1nAQSkiMl0MmQn4sNS01Ewi zI$XDG++ayYY%xPzZzDua5}6dvMIt%=!SO=7^yB5`5^z{##WMF1K?hPpy7*5eh45BP zNBG12eJ1i_;&ubj!|XH*a}xP(hjA+=yS{N)ocSK*0q(NXIzY#ZfHFHOV`XntY7M>!*eQ?3J4J&gxb;xWo*;W_6BpL*Lrh z=brnK))x-(Zra02uG`ubGuS!Cd37}tGtJ?V(!8~zg=c!B={DOH^j*+Adc^1W#Ar=y z^hNK~w-`q?@n&^v0C;Qn*g7)4UPI>`wGz5Fl`a!;%fSmU^*ZFGre0geb%e+qasnus z5bzJMa(4ZfAo_A2!b2qqNFiQWiG%x*(nUrB_Vw+8oTo4KMIz$4Sd-M1;*}+kassX~ z3wW@SdNP(L4VAywNM!2izQjfhYK`vuzOf*A>a(;(bo+Snicv}gUEKF&yFM}AoVfu- zrX=j|L$Qr{a;G*_*AP1a@WP&JJBmg$+*389Z#QHr$v;R^PRxf@^G- z$`0i|+A8t)njVsI5HcewW!J6u{fKsCZk3y_d`Xy zvUP`j1J2O3p+zn5uf3s5LsNR)Ohe0NmE`}k_6oMI82x^%n>hBNb2I?%Y;4TcBk zYRhBgZ&v@mY5%|IyXax#)iu!*J7dcDHSBuVKk-}ZEH1c=+8>Uo%vpb{9U zfr>FMp7@Paln1qg4b;?G)wa(vgNtJ-j2J?{)FgrCqzTMoJMi&+_|o+-T?v3cBP7xb3s zWT7zO`nw{1ud&52)6^_<0iqV?OsY7M*IV`myl$Uk` zdf=tRytuOm_kNy8jMd0B{&ra#m^l)% zF#l6dNXX8OP>YZbz{W^O$IAIzTw!Hp`>nA2Zivobg(RH}tSyWLZOyDr2pRuE1Rae` zeoH(Y9DkdC+V;n$V`c{YX72P?HGe_MP9`>Lgq(lh@W+t&xACWUzmtzm zm}2lvJB)u8 z%>TcQot>Q?0AOa~{3HAP-?#sd#r{;l#>P(1#Kz3R`bYNqFY~`V|79>UGt)D%a{$=? zycHOK=h^;aaUM=L=Zjr3l!;jo{9jZbT9*T*cTBnjUct2VAWAXr8GYU%R;{b^ZRX_Poqogf*7NB=ltcL6El8 z;l$Ua*aWg>r@zMHyA$=S(*|azGQNKwruH^p>;y zxs*c1@xm;#sBfAi10Zf3ZwwMDtVvoJ7!|YlS#$Pt7EahuxXqcY^*eIGLh}9*oEG|` zhBd9-{m5HZFci|_U?^me1SP7+mEi2M1oR6A#y!kaXTU=VHJ#fyd7*!zeTgv^smju5 z1pzI+FXe}k!_{)x+mLuo7{doxQ;@=Kuj`jHbl9}TI<60UYZTtqwa;q`Xx!_B<^I;b zl5^bS7#*YgwM*Ul8X^uvYTMQ3osU$+(2Rbv!NK_e(Agewl^qkU=TaNbb=JxfC5=GE zYH2p?-ikVZgw$&Pqt70w}RKDO@?tjw`8+MGpBjd9JE>G=FF@UGUgZ- zC^?AIZy8B^wv|S)due;#5PK}eFSu2z`MZs$0u?OXs~{%;?QY9^h)pyX4k@6;0eb1D zP8^z<ig`yaYP%)X(r#9WnCGvRJTq3C4DsO{gyuNumeNl%e^cfocP_kPblb1 z*TLLfCnknDn3VLAUfQbsIV1oNmM`2C)B+yxV0|vzehLN0lM4{t} z-eDHLtPtLo_^W{i_s70TCfWy`ws7XDm$rV8z4k8-{TgS%J^VFH&~AOa+;Gj0G3m+SelFt~dVLSGv1zy6t@ebKvQ7gTytR9$l>8&#aPNc1l6>Q?N6~fhFwYy+WtyYjeWbf!H06d-*{f zV>m{->*flbL<4D-MzK_&QV9l62t^4pYD}c~8fYrT0x?&44#S0%SV_l`T*i?pumA+nm5fYoGvzz<8id{=|BN>}ho*nr0jmd*Nkk!BsJdX zJM0$n#InEhXmfTe8I?DmlX)(8!fSxnvdl@9hR%(dm&#fwIRajAm8Z??ipxReD&u~L zsjK@mj1SW5rR=M=nI*Jvo!hEHEA-2+Echt2GJ!%wpAHq@6{?fd0YMi|T2r4dybY^$ zqhO#BXNvlZWEaxBkt?ixI5-ok;OKOO^7yz4PWtDX^0)5`yj^~GG(OnpjX$hD!_Iv_ zXrJFUI8n{4eWCK5&=C=J3X0o7zSKg=oh8^)WeWtmAMGyNsq#-aa}QLtV>2F3nZ7J+ z0jX5;qZRGpa+ZQI`@XF@s`y1!Dl__vtXk#8g)Y_wcg>H-5O^w@nTJ!f0=By>u}JY_ zhLZ`uE{QV|P-}ODF72JOWqJ44iPgK67HfwvK^njhy}8YB{*w76dL943^46j?3g8=#^-u z)XQw_>LmRfZXWJhYvPcWFMKg;NXO+}j&f<}GaP5%H!h++$}2*DrPR}m2!J}Fs|93v z#MmENBTzX4S~Z33<7oC**U=Nn^zpNHjzF+}cr|h7VZr+2TIu?D=1!dcM5aLk<54T< z$)KDfYfU406;)So%pYM+rHwN-ARQ@r6U&`oDBA!Te$Ns(rbYCd=+96N^>zsqCCr&; z1rB0$h9*#e?7vK;kzgnBqYX=!K0^#!2ue3@BQ+s6Nr*_qM9a-?D!rFkRu zoQ1&maRVzJ6F-A;OD@yW&Wu;>t!a7@xTd?wX#bEGaH_adAyc`To~imgzjwsHEcuRd zpAWbuBQv8Y=#PGr74wJFA=Dk&9NhbSZXFQW|X*^md9P;9lX}DrZbrW_M$pDMp+bg`8?7(^p_YX^e?yNnk-N z0>Ba+yeR2&$0!?6UXiRSwUMQ4-%#6Jj?7?nSUcuZUV656r*eu1@r7L$XN?;uax$VfYhQz~P2`iynkhjUOnoj|PY1Eb4un!brI6Xd;9y`NZyDBfaA z(JhUt0_!>nH$rcgPyjOW(5tw-lT-@GwA>S4iGC?_6wxe_>B1LWG?^rv`CIBVb`@Z0 zd3Hbb@>UI$f49QlSnk<(LBGs9R%UfJH?Yohn@s5+ibAldMAv5I&uYkA3-lq&9xQF6 zMDLEmk5}7qpiT|}vb$Y&U?JS+IahDjNk6v*XgO-i%aPb|||GE@}9DdzroAhLLhnX36!s z`A*>SQmH4X{I=z6w7YRlbM00%uhr}_fKmG3?RD3?I1*aSS;Tq`Op-TMB=p?Si?Y*e z^M*b#SAvn=`DQ!8r<}w;)-~l-@=++r7MBX3%YweIPj1kRRv}z4O@)Y3%jA{XKL)UE zDvUXEbdaAoY3Q52Np<4F#irb#Oh&P>gIPg?f?JCOV%Z6ahpUafNs5<$jV?O#m_YIn z=V}y6iUXHCI(DtR6~p(nA4@r6Kwi3k;`c%6l5_Hnqa!YFZWqs6d;?!YlQG1IThCNca z21tlj>W%;}%|H1juy^uN{jBJ_T*V@vG+jn3@rV+}{T!N4r~OidPJ1eUTWn+W7>?6b zD-pwnE2+=@SnNm=!zTaZm|m7|_UYCXTY!TuUWdCT@5s*=3T9v=EL4W#E`itc5bH+Q zpFp(1gaMem(IUn&f%R`lMQm%i@_FjB3Mf^jf@3LRr4LGl^k2La2ExS z(j4jotLWs5;fr7&AaEDgJ2K(Di@7Z->3tW>ng`~j4ODNQG&W%~rORa>E#7ofw-B({ z#~Y=ZfXXdZBc{?1DS$l@->s76;tERfYulEhPp-8X)zGFZP%{#I1O)oYb)vGmw~lNI zp-JaK6Ja7FH=p6uGt_#k(Qwd@t`27hv?9<1GU)3_QBFfbkj zcJ?i5Gq@EV%*J3?ftcV7eVU#h`yx_E5&^DtO4mxQKTk%4=hPHe60&5Zy}ExH@&~eB z^#)(*x1S@`XB1@jPw)vXa>aNoGv^dHcS(wzCgxMd^jg9{&G&@vx3^C+4o|mkuZw}_ zBWDo9=}+F@%aaP}K0qaPHFsT^_&R(olhQ^<1taLm;{P1YwP#D> zgbGnFP8u_cK5?f#%9kFVDq?cW?hNp!04lgYUqi+BhR|*F*x73vjaInrn&r5>3|}4~ z$j?g?PJ0)hmQbMjxUly?l4odz6kuG5=C}q@9 ze-ThB8nZ3iX|s*qr@$oR-s+6wuOm!2R=VF65!~9W%fTQOAWYJ1^&|iX*-zTN~3gJ_cnHJ3ccJtohu%tk$$p8Z2G;Eu4nusbbbO_I3Hj5_m1vhsW(}FUrbS z(AQ2S3QrcOHCj2eSsqJcZG8mg=_A`fWI-L_5Bvjt3~=IG{R%O4QJGuBX82NC$s2CY zD71tMS-+mvcv+_$9gx*wlzY24=*RT=bnk-WQD`5k_n z!Ck=JU|w**Q#LB&7-y&DV8p$gwPb}ZkaPYgnYSlyYFVb-fj~XFgi;Y7iT%;zZWaNR zDPD&dtgJTCGL!Z2i0w2Ogi1sxK;Y#>P@vB@Y<2y9DUx6aW^%e(dh9Zmf%uGIr7!1g zVkH&%yR6KSfNPfSQ;>v}@-FY8Rij{Q9K`k2zP@Gm*&{|}WRT^j%BRD9g3~i^hp5ei zBHZc9>AOXv5HBMgudE;o{1{2d`g)vEp1&!0$i91$(1g|8+&Y%KyJqB+_Sh@4HJEMg z4|K2A#kYX$-u0$tND_26NIbFpwj7DZBMR2*B*6FHL1O{U)c8VYQ2A#n-yiZJ{!}4_ zM8lKu(Cmo_NTr*2Anh~A#A+~N`9yILNkqHK3Aj~`g5%m;;u293!n{c3CGzHWn6!#+ zvK&6!$50Y;Fff>VpE2TCGXeJ${R8)zF3ulC4@e}r+_#ZTXW_qA35M%X%AZ~JBCK=O zJw7HTj24G{-?py1&X)z1o%d%W6mfV1UFqp)uT0F)WVs$R-T297^UJFUS~LlMX{IzphmA|8-QK>!0C_%;OB>B8%K=eURBs(uCc02$K(ud z-`3ohOehJO-)8f7D0_rot3?PSN3l1mN&@ZyuZ@2f&PVSec z`agd#eXuE7la@O{ZDQb^PU*pex-H(o{;dLUhhMQW z8nc16$}o^?UJ!AXJ;V3duL+JPZxiDr~k#>TL9&;Y<<6Ya0~A4?(XivgS)#!aCZ;x z8r&_oKez{iTObhJosVRny*K-uea?H{x^-{e`UUezEl3W;li}!2 zF;@e|5!Yrugz^L&k7r%8dQQaGt=)a=^pR<*ADs?MRMdX%+*xE8>WW4x z+*&I)={{%1kc`O6gjer_P)N5Bs4p&YqvntR=Cn}9`;hURjPmUBTwN>}z(o>Z4UQe2 zhD~q^TqJFP*-3rM`2m9E)IF?os*s~aNk-XI0y86cQ16WfBj!QB2ZT(pwO#b6Xovx_ z6HxFB#$yAKYaRpgDnVEucnTE#`h(~Rv{i5~pbR!8ga-=>JCwc#XGyqM zi8o3_(Go@iWJil&>Fe%V&xjqxP_a@D2=7JM;>MIyJVN*NRO@!!VC^A=SUXtl@Oi=^ zorKUIaGxYQ3TWzsbwoPTD5M_n6EBh6q)thgbHLYFZ*01lGYOdD#e?If+@!OK(ucT} z$(+$u)-Qn(d7iDTs*d$PH>5|HkjFYVPVs8hw>Jygt&9sB;Za{01 zvQ&N};8TR23j1do9DF;)Y8~-jBZ4v0r zDQ}?G4}Z0dj0l;T$F^NV;Q7lqo#dF$)qUR5kBu{_7j_;*UXW{b7ovAqUQzm(yoQNw-!4aaOt?E*Q`=>@&(Sn{;7!D9 zw!W&m(6(k}4e036533Hd0TzvQho6Rx?TB0Mn=b*GjudtLo!_t+NN`K&eet_k6a|ZV z(6$HYreUoqv}cC$CAK^P5-iiydlpm(g&Qajh=tDF<-QFUBnuyJSljVe#U)$N=PiPG zWjHy$Rsb?XCQXOi_ErM5)}ZJ&+BtkVfCD#OC9mc5<(YN$H$i844!F_(i>ZE#rgxqm?Hj5(&jjigQe@6}2TG$v5oyHXjUVdDvMdI zh7X6%X%a?Fbqw$9#Z4LRQ&S)KPx^W-ur}gd1IE*cr=fl*&$Q3Xi}o@!NS3q8m&Qzv z!6B7OYDr^*3}3RtiBagPoJTfN1?p+b)_x^vOq(~f?BhV7ldiD& z6cangD-y~wULg_B-K$CI!a8;-vc2kXe9+h;3rQDQVcQgB{c&|CJQy;v(zYqMLXnue zY^JtWxogJN1Yr!1Dyh)l*tqtgw|D5NNuIjUUAwc_p>Kf?D6~1D32iUZtw=K6Ep7qW zfXxu7UKZPT=ER)9ZIn}Dq8c)YN%)?qysD9NnyWH7@++$3X4;Nw{YVAdDXi=_IF8N| zS!Tqh?pv&?;zMcyG>_J2PfK}6`Iyn-Tj;)0z<0j)-KVP_5nz$cnf=_F+qTli@=KN_ zZ6%;fL@Y#ONWukrecwF@H_f}EDFSQ7^qP4;KQRzuGu+9QM+*hLHMGqsmKoTfc{jVG zy#BNR81IRe0k-6PpGBqBER~2VpI%(y;*nlF%#0lrb}C5;(8@!0A#8<*Muc#L9L4^Z=qpZ#3 z{~#`ovxkG@pze%Oq){8KxtP@QW!W_~C}e0E=FkF7HZ!x7Zfq0UcG665mu)i~a!Ks! zbP4>xl}AA98!9IG!_55C9QDEr;Z)^o#2T7%B^-D3@e>7#7k5uTJMl7p32hQ0-U%0#c#&bkvd>X+LeUd92QE(+B=Q&mGxV z=}!6e^VQyL>$G@{D^xT065hfi`;vznS5EZKRD0eW&-iC@wr?E#x8OUqdOVOhL>#LX zp0%!p9fSS*IT^SJnyL4>5HnN|Im$GQt4Ce6uu9ZdAC*Y;20GA(Fx5p5LmC#={7X=l z47`Af1Z$B~f*m#c88eZx;M&<2)hfz25QlIS;P$p^0I26n0d@_5jBX7UBz z#a;tq*uZ&Pso&jBGvEL0Lz}zalkyJ!8YqM?8)EH!^A`Frxi2u$(^wGBnW>^CZ(s*9t3+6K>h^(foj6lDpi>?U(yTu^RrIJc>^r}5=bQqmRXPrBX%A?b8<4Qoml5;*clBOc|(Ic zi+cv=c;`b{d_K7(zbIG)YRv0Qh_a|HQ`4UnSl6y#3B4Q|teWqMrYXEN9eWtnjxh4{F{A4%C+I71io(6bD^%0PAIFyv za>S3gEz&f9n|xs?gWyf!c)*}raIstBquHh_?j|Xl$dDg=lzQ**yHw=_(V=eQp~?V# zcH%D><^sZD?q^k_0x#&)1_l-{+Q)7Sr4hst#1%bjNtOQ2ku;kj;pe9sL{lS}(oX>nUta)tHYQnX+%FX7|v`m_fK)MxI4)s zFWF@?*)(a=O+|J-m@13xcu@0%Xqv2=xD|0MZ&q-?GE*Oy^YbwCP)8AgiwrbM+4kwH1XpZ9NFDomL%Az!n>9-8~Z`brfdm_RC z10;r81umm~ccH~CxkOSf5noIhyPkpajRM#H2HN?3b@U5!z`?}I{0Fu3dPVW?)WV+& zi2o;XJ?;1jn*avbfn)b@oK|7*!oYH5p|sC1A&*lFctFU-!dQgR7hOve(PeUrzz@=! z$GrnXfk_|i`T8H?pYV{g~Il)G?p_otd8YX z8ejQ^j9{_1e5gGKLJ*QlZ5M^Hzd&!f=W=bE(-yw*gLrQOBiv_&;#7!+ngPC!Al>cc2MClwS z;1l&n3{WNp(9^hEi3h+#Xt{csL>WRDBSBpZ8UC1ttcEsIGJw=kQY&-eT!izWM2UA) z#bEFt6t0fYB%A8i%tZESl+>Q}ytVlaQ%%>*D(r7Je^J@jZ)U}!miU*AHG0pg8q#}&Gg?i=AYo*pFgkos#lvYItG7|P(OEO|NEnVR{gufUX`;kGQ4~? zC&vq!^-t&h^Nakx_4kAo>kCx%_ci~n{1wXevdhcie=Ycv75n?szAF7Ew(FH4U+wf4 zi~Rx$U*lg)KgZ42osQ`>^Y{Be`riv6Ffuc+v;8yv<)p0g<%rL1SS)Rz61&~Ni2{)3V5KI!uL;+NbgKUGz6{1;)p~_d>87YK&+dTsK*XWr6kJotC5Y@ck z05A)=#_@TO%p-~d`Z?Qf=mweMV0^6St z-^G>0lf;r#i?9yH2hPCw2v*r=keZNQWpDYAGMoYzNB!KNb!TG~Sn~LUF`k!0afP=s z(g6f**M*zgmRm|SM>5B^;~RAe?Ljq_3(>u??(8tEuUP&5GmW!AeghY(cNytW%Rqbc zXhs&_RoUWd&HhODVn+meZhaHVGfRKk=5j{dAz|59x&%-{lOO~mm(ebvTLGK5o+P}u z&qpo0cxKaB=jYHc!8bfZ8Nf1P31qrklnO}lOenBZJG!g&rngz`BVX_cGA}uM5%_iP zW~~SF*1T?!QeE~A&*`6^8u%52Lr9{EaMq$0xbppsysyDi1Mh{bBqjNSg9y2wF+ssN zH0YR9%W-l+c;L_kT_$;XI|B3$Q#;mEYfvk`Web~|SJyYPvx|oqnVrF9eH=VBnC|H8 z%DN*q5bJB;q*nsxQ%9xR0N3d!O#@39PW+DkK;>i5V4P>rD71GvTmc^=D#u7xwWRMr zV#j00)|&ifNGT3dRsf%{Ut(=C9lXg|PIpB^m0SKL+5ugiEB)2W=OYn&P-x2y8F%tFAJIr+oJp zK16;j0p>37O{Ne&TnY-QxX)lI%R_$OE?6kb@?Cg1RtHjj$gIEa;{6%2*O#m4lgb1C zbKD8i8Pb@|@}2UeG@|OG#J)^1aVf^ZbFrr0@ey3HpyV~1HB){YpQUlPs4yLF%Q$Lx zIFS95I#nMjwBsgq&nNbk59ymS^R7rOFZjtAUtlgqcNbABl*rYOevNASPhuIHR_aiA z!G-U`NojgHy|5ZoE0liB!4_YTEh&1ggM`G8a2k=VzJU%H7DrabE5mM89|fyhegkDO zN`OnB2VYbiLCH(Ydx%&22?~vs)eotg9cx)K^m(!;_m-;1ktYPF{GBl0sib(<+tPcX zce$!w-=wc{4-uAA^7)5jMk*{jbC0wxU<{t)2y|i9N&YGj9 zY=3{K7k4=d-SV+XLl86e{UON+PPK2pNeto#5o za(=j8L^%)3&U!|~7IQSWgK8j1emIl$iV^NmzJ`|AglE!nPqO2QqC_@1di~ z(@0`V)6Ycd$tANW2w#t^%4V!s?q!J;z1sNa(#jm}=7_tpjfaK~vDWEPS`Cn*I}BLA zh(J(}58x0YrNXwzAoq$Q2SgF3CQht3+$~cTV;k|U%6^Bn15FQR4MDrN@~BI1Mow5+ zms2H$^lnMNX=CCXGFt8eXONy=Sm`t9lQCd+Ms$}MmbjaPaV~U&2bjnAT-?`+exbr3 z8sa++t4kHMW#S40M0pqqWM_L)x{X{^(0X2&S5$;SzTd>rZ;4`@xm{ zl6K!eexWro9TP^1f%upgWq6IyN{Qd<0j^GWp^Q&25^^`NDRn~GXNEciDx-Il8doDI zs7W0*k$=h};T8_9j8@2Ka5*B~n}JY`6QSm#!WhuoEv4^96z*8V;%;xhEP#~{T}t62 zvYPnEog-=V-;yK(R8kb{!5=;3ZAa(xP!w(I$tWUtE>BA{7|Ffste4)ROH67MjngshM=Lr&{A^9?i zz{KFT$eINaN2->AaH>o)Eg)DbVWPtV%DeC>gBl(C37yrdinQOLsZFSPu&+J#G)I2_A@db-0>G+v_Ox)dO59m;^@d&cq1xu5GcN+@AsTxWlEt+kq=V9*;@eoNRLAQ4SF){yjMp&FQcl(%qiMjuQ7C}j>P=Sef|}ne zl@nV5-+vPEi8H3KiD0$QVu4<;v6GanaafyUu6>pK<&lc?}tG)?tj0*!=DOs}HYz zsddRvnap&7@lD!vWNmKMa{J|M*kNXs-1w)jty6lt%1~DaU$@Z+dowr-y=62WrDK%U zj=wM2$QSLYNL7x$EzP2;8Qo)++R@|HA%bO!9b%%MunpXl9U@I8Na>geO$e4+tVKq)y4>W`eZ-4j-nvzRF8Q?ECly>{&npltZ7)J#B%q&I_vt&MH_&2FbwE!@$NJnl zAs$Ehk0UftTFGPq*pwy1ie|A*<^p62v{*gBz?dcUG6atQ7geNVy$iC7Z>6!tTGcd( zx<-|3>?zj?UI*UX$y8>t^*tM#&NzqFRFPD80gQ%SIZb3`5AYG(x1YP!`7JLUlg3J9 zfWmJmu+I{v!!Q@jovag3)Htc}qWc?;R6rN25_qvFiG=4lpRs*J=N(m^F46$gUfbR2 z=e6*>3AYQlA$iXS-14e2E9f>~y?tg3={qH(Fj5s;F1hi)m34$sge4&|Nu9mtHh5uo za}QD`)8ydbBEC=TQKrgGYC55LQMtZ(WSfBLD&6iP1-!q&9&P&?NfS$oK!K`C4HX)E z8C5okVCC9H_7Nh2Rn1EknZ2|boADFQaKCZBz!s_KmyG)?>T4JL0v=%#+oy8A1RVX^ z`|uyZEXUaomQt6GKVsnJTTeGWJI`{f#+eA$i`7=;HJyh{R%8Y@?0A`^?aFAyHEJy7 zWR9%~u60+>0Omx!i(Cel_23vts2ILe)MK-z1T_I`}^DeJwkBe19j9 z{4Gb*`-S+P$oATR4z+Dp@ZlkH8MY)m4k~o1UahBh>r%Z=d{ESNy-?`u6ad!6{6qz< zjD)h0CZvQ&x04u>$HTLxWAUbhtBL&N{Hch7%%SK?!b7XIYp>%3*(ps*Tb~D7uQ~=H zFA7j%iSE91F#fH1+Hc9w{&arRxdj$DIJOGIZ$TW&QZYdE>QhGfp8I*Y zB1GR+RJp*lBbSz!VlB$EVj?XFbdTi$*f9l9LWi4hlEP#Vs7H8gFspYoaQV9}Z3_7Joa{N^{8wK->zoMi|LxwRyoZWR$ff1taZvE zbe??xL(#1zOArngo<|CtEZfT{xP#zvV8clAl=BkSz#FG*;!pvHCe#Yaz_c1f{`-I#|)#j@Q%C5 z`ziT6{6|CSi--tno3FJ#(;V@4^J9I~w<{QfOsX#EXP=?Y*1svti7-jBan`(JPpBW> zAs?Sx+4wm3>A1Gu9qohd^;+f!*Hw)Xta+^G#qx$0ZW<^Rp{#Y4cdI<2eqssTXe2d7 z{*hp%09?Ydn6hw?CSw>;4Dt$ZG2KMo0xI1Vmw^W|55xT`#sF{XMNOU)TF3@ZL5-x9 zLe^=h0U0kUiW!v>kxEoWKS#X*juK@908^om5SB?>rYvba3^N7_?*?fpMDv}bTx1T! z+>1U`-wm=C6XkfpBriHH!~W15?)6Hm(NcLsCuj417J1`QI9~$W(X?ij=er~9wG@6@ zkG;$9x<@)!^kc{y}jd)u$q=ly?UfCb%DxI0vCw zOPY$${84tKG;qMFkTn-%)d%`T0A7RU9)3wgC=r(m$b(^}Y1KHwZ+jG3#6bs{90Xx$ zVid?jZ$urxF**d+6_|0KZEjX~~9hLlL-Kh-mO^lRz(Ak_NA58S|z1d=P^s z{=6S*=2%(zp&~xCYV>U1=|Q;UePBk71o>OzBu{~OiMxm?O*!%8yy~NzUC(DOB9R=> znmY(DGH{P5W^76(83MHM&_)Mj?sV(jqwV=>-V66T-iso2IYc*1*@}Wj1$jjlmGX~6 z7-;6gEDCinJR>=!2~afglyCIRtD@& z6yCPFXzbWaY-jc;+wR1PY#%Y%dYT*+LIkDyGJ#eS#}$rSl!R%X|Bn8gYHHu@(#+AN zwTZ566+K$-ZHH&IYu*lJQ^eK#Sny;p?B``y$0K|TRq=W8`Kr=fF(OQ9mx(1Ww|&El zJ8IMX=XOeuQ~-ON$Y+exM&fs5S8%fe4Y^LM-9xx6lC$X8Z#gQK{mILvCc$JhbkaXL zlv2#0w)b1LAe#c7&s#+v>O?4^6>OqaSpq=qOK*aDh`kdj+y;~uDG*f?7((u&xnu_N?VVCQ(cEx z-r;2}VyB+-dqycD;7Rq2${%8q^G}s}U$8h^;${r%2?j^I(mh4UrOyPPtDxgC(R)QJ z#Af9_t;1y{0+R;kG~rUZ*WNBSC9i3^80wtrSbQ0XLRg;LD)RsyyL&FpL_Cc0MvV%V z=4tqmr0en2B|g#7;kExx5+S2Is=ePv$a0I5Di(4Gff6%Vjp>06ZCi!uonW?mnf!y$ z&0My^DM}7I>D{=gcjrvg28&mV(tPuEtLEOwv?7Sw+;Ed1%TYXYL*pbbj)wAr_Yq8%$+s7wkxHA|ipjZBbMp44BE z4ilmw?ZQWedNxVtZH(bcW-;oaFG~5jO~8lQ(zVPEQ;C(vZ@emeI~>}Li3K`O_3dY= z&NC4v8s>8!1rVm_+N_-fA0NJ@&&TLE*B&-}|3;prp*qJ^#NayJ7Jzu2W5#F!Ldr0! zPLm)I#Y=UA+9$zlPUsqsYV`IJ`Oci0}zk@uTibbsI4v>tm2@fb%(n~zq=RzK+0 z^ApicGy*`bHi9So`snGNv~42JaXvL>e@C2Gavf)u>2Z6>d%sq@m>wzN=3WbAdMKxU zWb!_@dLle!5`*+SG!ctIOQ>>I&(lCay5zC5X#IIBf)~zWcB#bbjrx@0Mp*x9|3#L% zm~FV%cow*`li)$;9&*MqF&UKxR^ZGD5D$nr;@YFSd{9X>=y-zrq;Qb{yB2|DY!F+F zA7rE-f4usEa|*cp<^$;oh*iJ3c-RC@ml7r@b|`xz>=I$Qe8|U|K|=6wJ=P3=11)FJ zivjq)=nXU6Ww19Jh7RSCxUgVaeX~ zY;SIB!Ah3EW4iHfa33<4r9T@w8d%rN8)Oqqq{MyLKh=@@JVbthWa4b4b`YVC5+@PF z;%Uij6-;jTNbHtPCO`%7tPQjx(=0)Brk@)tH;|p;>mvkGaZ~HHu0})pE?99Rf0N`X znQG439_Y=eig>>UsL8ia-jvhGg*#?-v+d%|B*7UXBpz~0oTfFRzGeO>wj#o+;Hu#I zf}6 zmAJXaihshZ4Y^R*8Ztk_a*lln@|5ZzS$k31Du7kyY6x7E!Ohdj(aGJN*4zu(>zveO zCRPt$>Gd9PzrD_Xp3rrVb@?7-iwI7jVL<9$fOcGCgp(?|lPAaNcYTgbn@q_ADJ5o3@z%I_zhrL~q%^=I zVn4^)35z#8O9sFD9>>e?DeEaq9~0Lww&SVN6pexVbamvw^mB^ZR|6L??xakBOZAV1 z%L~{m=PQsV|D`TxdtHa;b){Rz2kQq9p3HMVU1zHpEJnQl>~41jLqKA}UNxM&A%eM| z+;(NE5$$v{qN1Vf1@!0eVL=-=ydxo-6{rz?T;3N&$JJbfo+SWf)4B$3bqpown^s); zT^)cR-QC7&WN`;}mQV{vAO~=PxNZFQ_!u9;lL7&4?Eba863>uLGV_pr(|cMI#*`P0 z%6+gxkS#g96@eEb?cGL+l}nJHID6-o6!w^^ALjc<6#z7rXf@ag$dC&8ad-Mq3Od!)h{b%6)O=woB$R1l2`(|Q zrvKzSaXK|@6MT_$O|M3gCYmbpIu9AuVE4Nk zA)_Q5)$zx%c{{psU04mo!KRtT#0A(oHYf#Yk3}_WYbf>T4_*DNdJwwFkOT)Nu`M>QEo?HDK<;7d4Fz}NERfpcy;Hc2 z88^GAC=O~@Uqzba3D)bGj1ZRHB7IW+4k_MBKWP>hmjO*Y*Bd9(;tHk28aHmC^+DX+ zr)WqC7=k>cX+|Ba{gY;E>&#jMqGayuaEge3MVs==IbZ5fQf=ANUQVc>=Aw8ORU_Voy*-?07`F`yfQTTSr8?=l76mTKF4M z1ua4%&HMZzc9*P>^A9XN`4GfBSS7fmggiUwLd{pZ1Uy%!ggi%gkTK$EgJF>JHxq+z&#k!{l|;$mMNUS*4?JR z+Ie5J{S0z|Zh%V-Ef&upKP|EFcABoMRQMw$IaD z-wYZQ2A1JPw`t0^;d`XY)eJR;d}noqPy?VwHf9CYLyU2Y*l?)3Zw;^+z!{zOvVjwX zJkboDX~)-mFPUgY3cVx6tDgxfO_RSgY85Usm z)JeUE&1Iiy-Qhu}EI-I~S6h0lH*Isw_Sj*BpFYe7j~@=;z>LEU-gEYsmzUju^M{5g}L@cZ#$x`t~%Gx*1#4 zV)xEgVym8;jXPvRAwIu{A9hC4A(jWkd^?Wrm|_>IeA6Xn4lKM;6rep=s^r*?R7<0* zp81(p;qV$_fTP_{suTam+lf=^+w@!P8y-GfLvQ@!9qTroNoWf}QVQ@E0!Yt5o;j8M zZMk@1h45+|E;2h1Y(jZMa>sa_BrXJebPPXafk|-#eAkH4(wJD`6^okSkEWa@1EPQp z!_&%MLh@fknrs*+>O2Gr5(P$3?ldS8yej6B)L7vnQrhP5nNKpSZbI?%{fG?ChV`e~ zo;SEr7?k>?J7zc-4`FY%=Hm-f8j>VCdvPr_Ic$?qZr!Og7+FJ(ZF?o!3_p)JJFWIS zRezc1@fyIXv3g0Dc~PGfvgatfA$S*+1OZj}~#9w(69*L1ypv`KFTWR9kklwJ4-W`WX58J!4bH!4)YW z)68wMx!_BPC7Fy3WUB_&2(eL>SyU3p1Hu=MroR)B`iVyTRLl9vqrHG6e{f8%;hleA z6wE(KlHYKe|CvXVec{nw#Ju?WX=X&hQvBaS5vuG3i~7vgzXAG?L4<0ES-XC9>6WLw z5AtxzbMD44F1O;iJAhhy&G3V{Qcv6zgzlWxED)GJ|7{Q$^Zw;k;*rOGJHX)FT~jrK z%hYs=CDyBN%oq;)AZwIoJpjn}fEMFLm#gdOhm*;k=jGEIawqETJnQb9C>Q#6pF{FM z8rEa(x7UNtOM{J_;S*!TfD0`<5?*XA&nm`?Bmcaib2KbVO~3JnC2CvRfVnj2n^sxR_CKgI=pp>YZ?mRK{AWw}YhnNzT$-A4<1N)YS^4zmV>M{{Y|P{K2_*@Sa?L ztejZwK$q0#NTnpXj&it&qciVezsr*Ve;ba^ zp11ACC#d<^lHksoB3l|xQ%O$gFIz&wEstJU2$}i!%a^Qy9A{1o)8*#F`Mvk<7j?yz zPLCj8_?l4vl}r28NdIV1W;UkZ+w&Kk^t1S9UXVXwtbfa;38^Y5Nhpwzge>wlFe_n6?Tl(zpVX#++{*^lWD~9&Jkr;b*%2$^B#kKv3=DphKXU(h2 z{>9I|6#Xli_Rqp(%zqK>sR+uP@YHS-}O46!>1wuoYk~7@u{h! zDYIblhnD}K^Y+bT0ju)Kj>Bt@72n0j`r5+f@p0$E@ zb8Bn29l>`OXaU!G%rcEihcg4J>jSWXOXd64+@m{bx@eOF@@&e>Zh=ET@BwNd`|Jc8 zF<#2NL2M=9P0@JrS@wqV7%5*Bl2%E!iuNipfpaq(Ps*VhS-;D%qAv@wBubu$>GR;} z6J!qzB4-{zM>=|4qFe4yB*vzJx6sO5C=9ZyzQj!Zlt8;-EU9i+pqu6_(|~D=OJJPh z_dp}KgOtefTZwJvr(bSlh|uRNweGQf&X#VW)m$19+SDbAZFqfv;|bxwAURA6wB>;F z`w^}6?PWG;Mw;J25b`aiWn`o!>9fP+i}x=jyp4o16obi6otj5h68QoC11tIKhWdrd z*UQrPrsTW26EUq4D@5{>kCZ6e=-a!=+7tBOAC+tc>33u$n;i%0OSa+@$Z}a$V_9e= z!;9Ix7M+$Z%q0iRPp6Ly{VQ*vhW02KQ4N}@+di-}H%8#CIuA+(y9ak0)7R^k8DBT? zlV@;W@6SazN%10zs~ewM#}3OD@%rA;O?_BgXp(tM^g-RcOPlqnbu{Z-!D93Rznuh) z>EYu5fpCkyq2a0;+;FxEw9$gnwnJjpL!Nu{20F2aQ+ci_2R@7N8I1$9b%UaBI)hAt z$dY?;Hj0EhtSXpxze*ouG%#d?WHj&7;ba+}GWU=M@W?u%)8qqxP9M&F#;glleftUE-)EF*!Ni)2qr1QUk^iy*MZt#b=QR#3cr+9?7LqgXV#>S zSH~}s9rQ>aARXyDciy=+#KZ#ptu*EkTG!c8o*^6Xz%JH#7yMi8*td-E3_dqkcsi^( z_jJRk$L3=0>=Tq zYshKSqq}M2nLcEa#Hh0)KI*Zf1ztYt)wlWcPi~Fz@oYFzP4|S<>iCfAAvkdn` zkNNNjHY22JUDJqCm21%s{<9rw1KaYT(-!c7$#Bh^3FeR!;RlS)zB1T}J|@Y?0CRm8 zM%+=%9oa^|l`+0Lo?=Gt-D(bAXeA};av0&iJVTM+8ZNEozk3&=^E z^bPnM#=}j924W`*(+yNNZCiXpu8W@eKoC8UqD^I*{6xtnE zvvh)}rf{KPQeIlt{tO;EN_#6I&*e`GDc>m)rn($y0%Et~pda&irsy5t7Utz?$tHmm zK*B2C7{@6G340k$Rkel*^JZ?pcTFf}-rU1E>EmF;KXY^xi6I%bZ6%?cZE#av3fid}~Zxy#sc_C?=?Y~-5U z&vB>^JGfnSj(Dsy3|VcXBeNe_@;WEq=HF*Nh7QDs0|O~&N>UZ^7}tpDisTuYT4>vm z1zMQIWApMAShFecof`*R1UC$|Rd5hAsjN!mui{FMuYHFXFD$V5aMJ3zeT>jQR%8s| zmqQj-^Nm*6e>C_+Hd)2EuvzIlVDW}mf!e6EyJ^46Y$UbN^Yf_E^fO zbga=wPWi%&^V+afv@k_UMv6dslyHf7l_RL2X`w}Kv^dnjbkuQg@JFS5Z~_rjE9!Y! z>v&e#!DXuVl(gBwd$`Ke>{L>Idre|)1A2kS1y-itAt%~oAt$h)dg{ajPck-;#)~s{ z%^=q<9|?I}Az$>?#TGa*Hrx{{l*AXD(-E`ykpowVg%+53dV&(`#D(3uuS4vn5CbD@ zqfUCdA(IsvVVnb{ZQu476AQXcg(B+k@br93JU4*bAYH@nK@~=2s#d#{ zxb1Df^a{1hIC&c000vwgWk)pHk9Kf_<(Q9es24GuzPni zA48`7z~x5Eyu&!den(HVz#rfd&^`f=7-4iA<$fSm;1{y-R^a{}NxQC2*&|!t2S%sj zaQ_co5?VM7tUv=3hAz|ESS4UMZa8iS!E^9DQRI4b+8qZ@V-h)Gf`jIsVRRmnGCFa3m9g2pJ5VICBUZafc4j-;gQlnL2TRkQ`?eiuoqFQEwb&7ygOZ zfXhg&p7RZ@Wso)|^bs6PXElXH@E}nyC|a6_j9Kk5lEt~xhdsQYJxG{3K*usB@o0)U zYLO-%5}7F#842gSB9+l@JE2VVcN-$`2F|S@rx7}Rwp1pXtkJI`5(GX&NV%^Vb71Mc=!#fwOa&q8K06pc^k96#9?pq@+qdoXtmSM!I6}VisfJI=#s< ztH+v&3@ZXt$}q2|{DNZ5lo|=mhfjwHOI{5M4Ve@zm(blueFH+-^43jV4bOY3FBRi$ z3Nq?tK3xUiE$YGd@EHz+XiTT^ob`?I(EVzqb(ZKEIQz&i%yCTtf^R`#_V!Oc8TeLg zX~2wvLpg4lqJHiyJ4e{VU3*NKB0A1hQ|B`}of`AQnA^l=ST!)%Hh1^^oHMdPQL-@k zb#Ym}crB1bJ{CZ4Yg?FZuGv6=XKi)Vxg&d_Ha}}=NI=0ZE!eb7(bAt^;oO_@gT=9I zn-AJKt8g{nc|3=EdEaV|-Y;{m(pg3L%OYF#7p{4RZY_;!=S7Vi`+toHSFZ$<=8JK8aDaHwH z`TOB;We5Tup0jUhy$*G_pfNAF#g_~r@BxhD_WBVF>lhMqrgq&sUR1@IGKw1O-kHpD zxVN9uATB~e9d}USC+Ohal!0>A76{*9ZJanC9;-dZPb0`lU{cLBu1}6QR*|iY2Ijzc z?q_@_tRnAz!pXK2;z(}k5U-uu$cPkWW686iDnY}dpQ9qVmR~FBUb5}&*N$i{r95u3W^Z#-cos_)b zJ1NQkZM5Pad01Z_&Hw)+VgBnO@pZ6*`Sp6HKLa;^4OR$Ciu_#q_OqJlSIwU~=6`FN zm;II89bZJ$C2dS>e;)8NDx_#^YW||e|DyOV_>#xh_?O!IPi1U*2P0#LpTgx7l148o z?dDGIe^e0aC9sgpvpUUgM zEUoyPWc{D|;>`cNz>N9#i0P{gyUf2m>;JlT^M6h2`?LJF7%C$H>r1ZQ*J%$7^^ElN z^bGCv^b8avCQ4+|an9~p6i7n+{Njj-SsB0anDVp7YJ;FKj{reSJR?orS_Ad5`+8gUvZMfI2343< zS9qs@8>*d>sPzOa>QmvO&w0Ou@hKxNA~%UM{(VyS8vrBo8zIJbNG@zHjP{HK0kZEU zwPm$&0Z6FtR27+7fvFfw4NU{8{cv(fVvS9#Na*Ou;5RU^f#LK_4ILcLCza7uB3LOY z=c?!CVw3DqrfN{o)|r#1)=hTNAX! zS$JI5+xLmmoNU<8tZ%58fWB~pvb21uJfG0An3leb$QaLRTd$D5keH~yl469A%8I6< z%#zFmhY*{J)?$l{42uR777{`srH+ZgYy>Y2al-ceV_Z5Y$*@BH=UiZsHBP>7-`CnY zxF_~)ziw~*Ei7v1ByOU4gZ^Q?Duf_OH;Ej|1plS{EVUf-k1LoMQ8aV_4MCr(ZB8+ z+OZQqJ;K0GkI*V?pCC<7sIVvvf8Sfn>uWfYsvj4%iF0}Jtu-GeOenbMC-E4+B?X`n zBJw4FG+6xPaKx@=XZf#Y{AHV;_IfcR6Vo4=MOa=(&i)(&|84MEG!M_zbXm-QTsZx#lLz5=9erEv@fxA0%is_b^=aT&i^T|#mfTSS7Xf2 zycVp#4OV~VwRkzpuU-C|v=+ZcoYy{q<@X85UxWF-o$&X(7XQH~{5$*nf9n>0wd!Bo z!t3}e6EhtPGdt@)`G&vm2!FlspB?0%eZ#-I;{Szv_+|8eaSy-l@V~Up-%J8u(xLpf zFV2`JnVHy|7}yjUe0x!Z>44~*L4W+see#!S)6e>!Hx0|b&YFI|zTdi|xrvFfgRzaF z@r%1-AfRV>?RHuIoM%A4R1y5j_3@Vr`y0Q<@}K?QU&peV=w1TYVArf3LvH2R(RT%< zO-9X@bIZIyzzM<@unvIOCVrv(tXW`^`)B@hL-##Ct~03ZsDM32zjGtZ-Rf#V47&@G zQmk@z^QvKMGTfk1yUuZ_;%F^ISN7DiZs*##KbEST9<4+zc3g)WqU~f99OQ^B;9Un+vGyafmuB$yUE9q5P4m3+224y0 zzqik81O7RR{cGoa!R7xkiTZ6``i~bezs*d3&Q@ggogB=6=G^&Bae(%>Kfl%g-r@wm zdc$wG*UyYK3J$i0js(A2`L{x`KVDk>cC-AE%I3F!|4c|j_wp*{Mc?4J(<>S~+B!SD z^q`j)i9hEtFW>a_a(tGb*Z8{EyyOJ>7Z1q#-+RFS?soWf!av-`@8)KGJy`t1`Lh1! z_bsnG?8`?p)YUUEG5&rlGF^fFpUGmzHP}R$-SFdFOp!|gNL<4r276Xi&^JWRji#^+ z4h&^bZUhG-Fy8cm4M>o;P=Xja+r#_`nezmvBP zs*c>Gu+rZQ5`65MY$eB<@9&d{UU`MFR_Bpq3Fgw-W%O>@Fb`4Zkqe9D`` zI9S&fcO`E4Z?aRk*_hwAJ(xo?WaaE2Z^e?Qe8yePPpp z&5Wu##wNi+cPx& zEp*~pV4GH;<$Yb(&M8(RIi7u=+fOR;wFGe~o?QDy;mJ`$k<%VUnfLZhl3gw`_gk`? z@#&%s8u5zh6B*7|PFX)u_wx#k32}L{inga_<*+E!W@~lxa~RC|V7VaZ`&#DyZMP2= zn(TTdDtW}q%&l3yW-7;#@aI;$Juf$2b1S>e;vP``mb;rr_Rkk7k8D$+<(*7hi7RzA&Bdk4xBhw~4Ob zPS{j0E=n$cef~rK{vfNLOJD!4`p5G9?VcCnGcM-yV5U%TFvE%!bNJ5C0HYT=h+qP}nn%GVz*2K0ov29FjJAdYR^}OeN|M{-d-B!|^rudEnL%2GvdljHLR(h_-wiR;9>XA6p?Lwm849cX-G3WlkhTQ3p-FfcSthv>Z z8jkO}#wB)4o+`xydAW-?TyMxxt&F0rb?f8pB=cgcIyZL9=bZShA91VY^YhgAt(6S; zxSCV)Rwt>E?#-nVnPFL-~+qxNArUY#kaEmidnG!6WS@@=imvX({s!!fnH9q-c zeh34>9)6iZdP-R3$9N=4)XbQ9CpPIQY-$Jg>xoIfw(O{kd8RP~>q0kxtXD~Tt_=Qg zq`+MD1Y*bnb>>Ky#@_}>PHZ)u?(31m8fl!2zSj`aP~*IiJT0O-pB>aGY$gU8Dbt$f zN1ayRMJ#OJ_EsbBP*!18$d#XWr6#-WF9Uob^{#iR61yd^bSoGwGby2wbYH|2SD=!~ z=d8=+CFb3ghv!mm1;yCbTzK{>R_dES-0*KR;i3nJ9EfY=a3Dk3KsheN?VX|(5KU7^ zK@K!0cD%nF#cjU0lB_ITDle?TP#i6xGL$7Og?g?tNM0^(9W1Q*JziVp*tc7Ely0{3|!wgUbMvCs8szc*q1fjYWw zW76vd^}X-b*MX&NBJ2?m&V9%Tr!sLTBwGzARLwKGN5gy+bA-n!63}jZQ$HavzC{+z z@)L8E-G+7OrwdU-{aA6|TE7&Zz~y6&jL9Xn#RKhHu{jd$+wj)gUXa~2BaLE6X9WJI zrbT(0qD*g$ZF#T(FcEhTGI$cVsq-#FKJKn#OAnUW-ZMdZK{RfXX=g5dw!{GZB&j-= zIqmwok@K|XqxP$Zq1SKzu%xC#MYseEGr%W)cb3Nl@^u+kgJ7y6Z3^hURZ493Q6Hzv zQ3y7=ce?lhiQ$&>;)O{r5FKR^OeQ2zxNqZVIs`k)AOOfJ&eBrpKchIpO(Bqmqw1gr zMaid~snMrFkwjHbG=nC^*^>e2A)-x*vwr{N2oJ4Va1IDo;44#^)_aF~;O|2*gETRe zuNP-u-e|9MY!ZCQMu9J8=HJUCr7X_sW0$xDW`8X(q#WR;?3&~^17DK{(YJda_r-6D za*Ne6-FwpmjAQKnjzc=q+2zhel3}=sDUm zwB~1*F4_nVVrFWw!)J=1l-`RSvP-KYYK^0nhN-KuqT$R;QwB0cW6qF~PANYih}J1T z?iXKz1twO z4p5Tb3vSXg8H-O}>NnP_Nh}HQe{F-E^I-TFOzU{6U$EKNLTZrNb1{uk| zVsY$?6Q0dP{23065F|{M+H#GSJzmX#7!@^nNlm{mUs(E`E^voebPW_SV=qhYC%Hhq z5K_3QS;QheJeRB>e?%z@BOVoF%#Do5JH<6Ib21J&D*&#KOdG@N+9g5$!e!*#*Dv`& z<`&Z{x`nLL1ZJE%*bCIdkJPR-*9ufxC`FS$Y1v4pYp=qZYO4%d0+mzMJY#^AvN&8q zf8cjdMO)Rm$)A@>QZ<_6l`84(jr!Bm&K=!n*Pzlj6^C(9(HB$o`Y{oet8A=~KIAD1#&IP7JqF|wUO6a z+jsS8YRJiNwd>AM??|JqcAG;5*2iW>GGc)j5emf={?qwV6n z!w^K9#J_GE&e_A_-GAc(P~Dl!D6RS}2CLeLNiN=BYAkipq)uj}N zR-`7=LVMx5VVoxAuE8bGhTWy1#TbHA9o5iJq{tZyDNzn56g%eI-?yk+tuRsMG(7KG zVm8;pUM@6W^@G%4eD`pW0j!kCTOqzR>b+Wb;2^?EoUudN z?nKWXwBf#*7HCYR-dwfJUc7`E7Ms!WIglBlJS*{pb;{mz2~d&@+?q@w*K}LkI6#VJ z-8oFwp1y7(;gE2e55wi=#$jQ$%&jX<Z+{*o%T5x$IQr>l91+jyAK!`9aT}^UlNg+@JAv6cf;b3yP5Wo$20y zrIt6O4zo8qMp-6&DqisJ@@x8zqvM4W$b#8NL%$h|6O4yx*$nMlXl4Qvdl{20noA6& z{RRwhBqfyIs-}+av(D&;7>oMZm$)t~0CQM@_9A+ZxI0fVfwi+D?Crs%IEq09`!f>F zW5Vr>L^VPL(6p=@OXj0~=Tlrq1JR16;HK8NfR2g66o|rN@z-k*Qv<*d=gFa_M@or* z3?1-WH7%YB(o2glp7XL4fQEL%t~~MH?=hMP%i*?{NrBxm%|+6`0;snCqH~TDCo*YR zSyZ^i+Xj7scrzy@1Qs)oq%~Ef1X_Iz_+XeQw+O%~)QD1c{`%kE?SK9)ZKxT&FW8nQ z@vCkRsi_J;2pg0BXN^FXghrvVKJ#sj9BS(r3|EFkDT~&r%dxcKNcA2vyk=hNp;^Kj zv+rdW!nF}Z*1EJ3ZcTxz$}Kd9*Hkq}p&!dbJ#Rg@v6Y&>W{%T zX7BUsTEExa$>ZtBA#9`!^bE(a>P_;YPul}2BKGO{l&G<+;l;3 z^*{%cn?p6?8PIk&d4Z9^!MrXt`&Cof9X!#!jBZB{L~WzE{y=ON5ITkT`;5VmyrAK8 z{Wz;UF|1~AFT1TAoHGX-uX3ZfizSX7Ze4PYOsHL>kdNi$x;-U$*BswXr6NMwoJ$}0Wue!S z-tQW$Rx!GgYWzz?v^{0oH0yuQ%|+YnJ@t9M<|P<~u%u1tb|?2!kU7chYea8%2n~W0 zr-x5!9I&+u!i@j=LB%LeC73I~u;$cUqMXFFT5ZXSQ&c?E@Wza@s}~Go`+DZLgo!O$ zw0C6ByvHkzP?`2h(p42=vX|@~8JHLHh-@EGIj_Z$2(7|+fV5Ao6@BZJcrJX=kzLq_~ zf>^Whub7L2*Mu#(l=|EH*ee4p0(oa)@l-ZW|8Wy4n~c(`&k=jeS?qgWo$Q(@79H-?><14{ zm>qKan9Ln)p4S~EYzYpK6w?|%Ul}}5{TTCbjb+t8Dy~IFnywX>taYB$tvUHblEI;V zxD(hdJ{asmZ@->!p(fC58W!T9c;4|^>n7rR(XSG)iNna$m2}Mjw9gS09x)dx7JdB5D=qC)ss$XL zhh=`@Y+VoSiMM!PAxur8Yjb+UI^3~lu}lGM+vr=8gT5sJ=RkMiHefls&&zEDs;Yxe zo~Fyrz_$Ws?Ni}Gs$F1YII`#0@b5zMqtV0yS`g#I3+!J8!wG~;H$lGN=ntClZGhiH z687f-LZ!}2e@&`vO({`?+RXw^F5!y5syn zQ+ZyfvUzdRrVhUXY;p(a=G~L{-I+Cxhw?j)UuTNqQ7goSURcLvF1L8Eh`qf zxP|z#fFM-G)=Xt*;R%%=XicW&nxV<_dc7f)TUV%b1P?*ZFoP9?hcBp?M#k=} zL2!}W+l7ibuojWLF5foNl;n7Vp2MzVJL^uNNhY%wCvuCWZ6=N`DWAiu6IS7px47J7 zAE%!?i#T~*dtCQ(*4L|#h^%rBc#?yc23Iox1w5Ki(D~n!V=Ymt;l$vj+#Co*eGkd< zf{_bjfA?siPZ7$Dz;i;Uwr@R#<`zAe-7r`MsXZLq$4DmnocbB{9T@sdWHs_ADtC%s zWph}1<<@wv+@~WqDY-ou$JGeICLr_JYFSzywAi?M5W76VccW-oMIjFK2w;e!x*si; z%GVcrfAaSaigVQx{(4XAqqZ8>?(#61T~=_L5WNLy7ilpkcSz$~AY?j!i1AfRH}9@b zsI;k{p)@6VQ7nGbkl^0iWDp-Wi6VIevr#EV(;Ew`R8ip^3{l6i`FNov+2{8~b(Em5aMDv9) z{0sZ~%CFZyO=n>Ig8#Kyq3mIALO>^HXsP6E^VgaDbN7Pb&k6ox`$Cq0;jbg27LHEN z1kC?z|9@|3Fe%Y*M;t`_1_A(M2h{n0d-X5%|8y$@>%T4gm$U!2jl#hCZ$tj4eUv|b z`iIGXe8A4k{9ijOzdb#?l|`EDv)k_yoL?T!StJtg&Y4%F4a2DU3F558GYBlv5*Q{@ z;6PxYiV3Onzx65vkb^a2qJo-+9&Tq~ql9xYRb2uSMXeF+`4h!VDS&5zPjVBmZIzwK zLX>X3bzMGwc(Lg;|CG(A2us--R4G61A@sgE6gDDSti-8)bBM!YQDel2LL)wPjA%-! zA;*#?EhDksg?*q!7uG>=5Xgh}rd5~3S5$~6Ta(amq_=aIXd`E@MCb`I@rx%&*#}xQ z5?Pzjv!3%S!#_}k_pk6P%$eB=sl&G0)7!e*fx^{zy4mA9-cv;eGUj0{hHe~?AuUfQ zZO%lXSV=UlhR#f|&KK5ROE9ou#E}l&G&YwA)n^><4XagB$YL|R9dwjXZQ{e#9!zZA z{T53_6=z^S!t)ItjaT58N+#9tOSvRk<@Q*AIc?*mgdS@N|BIyO?h^18{mMM7FU>lc zc1WE=ydaATtNQl<_jS`UR_mtg$yNHx7*B#-z&2+*i7Jd%*5&VfLBF0|E7`zhmdu3B#vf4;d>IP|x!zhiSE%50wOHSw~s zo8h;qF~|{xwZ*tLscORGJiegmBo(73wh*MgPkfx4#n zPWF4f%R_sjYm9EPx|^U{_)6rA*{J9%CaL(Ss?4(c1pWGVdQj`XOYWHB>`%rn!D#hr zp8~Au-A>jH^@jW5=I&*$f}p8$k6!QKWwiWi;qFHtUAErlaumI)df%Vq-8hWXHEo!m zvNz|6oylZ_;=IE7M*6*GPy4&?1qYxz_U}DfL3&T`m!E=PYUbEie_=*l`T=X?HQJGcxI4vlX``xX`z#Hq9 zrIeE-YWKdlI5l&>*S9NC(NWRD$JCd^v>T$HRAIc2@EplS3GYUo=p!LOn+b{yLW9i^ zr$u$huxhrX*e6IdsKd;gtX#$!w8Gdhj>j29z>qK+k8Y;~B<^$@v(xs!GImh(-!i^Q zhQ1oN$b_OYQYYmpgj$C3X@aG~1j3w`m^^u#_ti7ToinbFnQlYf8kZ*KDTaPyC2H!E z!2B2|?I7%@#dQ5uqYju8#;`^$Kbs#@SSkY1fZ{!NJl30Jjzy@+C@k>J8Bv`YVw7xh-BPw1C6a4BuxP>>8Yn#~AqSST(EQ4Q- zZnx$U;z>Aor(Ww%Vq~w3l`L^2V9cud)tU{HdPzuK-7;A0X+rSQFeBOXKz)SA5gZ<9 zz-DM8B?)TAZH1a38drpf$lxFSb~IicJ^It#^a0dZAu09MIPTjWoubNRyc-&W9gYVR=pTf9f*wMlW(xwVX+We-$0rTks zEJ3EB=cejbq2DpRP1y}XgG`slwslO|>2^%U4C6yQkLsRiaf*D=LzP>>74PT>L@?YR zH|jg+ch0n^Wpk_3qfgrvR1;MO``6B6nCttq5NnX3C8g??VR)mo!Pp!Ija>{dFrao@ z;9fdrZ@ae6DJF+RvhlFS;O0=!~@60$7ow_D`uMlpzpfs4o!S+Pl@pkVYO!HOyghYTYpdsdXwt4O_)ov{Wdnc zlI^0kzAe0w%@nyw|9KbET&x~^E4aC+!NO)nYx@~6B@OlpR^x;8bT{1>nCpE9UKhH6{YGh&XO$csp=PUf;`G%q zH@T|`?M?bGE=C|A_LB8MBEm(~r1rKCM8Y|}5zMV8W$Qb9VoKk8q=e~3I?P4rPKw#8ozlS7 z_n)E?Gi`E?16`_7%T~{=A*E#Tk{zOC+m11pC?SY|7aw=f|0JPaZhkeW$8UQ>xEC6L zckz{fm;dD(fj{|rwqu-Za={FpKLH)xuREj&p3zPfIA%d#49xSyT!ep$A$eTA5DS|S z0CnNI-Q)clN|v*5sop8Mlxr|C3-;c!3440+L9yQc__*6<=4JQP%xp&IJ*`;sd1ATo zmeTcvbpUK$#Rg}?m#+M?AiD~re&E&=JtxCZ{3k3KvA*tM6niW2<}tBw6>Nc?5tiu) zHYqQW%!~KU!NYgvW`pBn_L)%!*sZ+OrjOf3rihPLl3DMk#I`|+ILgY`PGm-gttS4> z&EZO>gH!mU4d~Sb&L0+p4%yH)rB3K&N=Ch*vg z0VjZKS#=?0-9?v;&xp~~wB3c;dLpN>bjlH3>8a*F6ER6Wm3;B)d%$dI>&Mgv-d|j# zR>LlAV)HwR3EiCL4QtfTOu43@Rhc9t1--6YXk26Jn}a!GzUPle1uqvwjR?Y%<5{Ls zyXSQG`fPzMKLL`Nwh;A3diN(q(E#{z32_{xbAZX!{$QKys4|H=0V)hna z?&Qadv7v5&ef8#$*W|8RRyl(j@aY6}UH2Xy%3-qthf7j>B5Pb*vfH=yP+8K$ebPC1 zK4rq}--1fXpGdzpRn0G!Fa$yjpEIaw(mx=PG&g#nB}3s9Z~*#BG&aJskM3qtmZRC> zjioyWisVl0K8Jg>a)q$h^Zf4auWN~n;+Lt{{)goY#`#Xh5u1}DimEoCX~MATKD z^=OxVG%5LBv$tOMU<_KNzB4l^Mb>D8lF&>b3dY|}ASIzSj zR&Xgp;qkr~z?9wGhm{6hpQqGaveR}t<>MmAhyCb6CEpZooOMDHr_Y#)jD&o>N=mHJ zW1b-V4MB|_@_>HNv{~9xN#r3-J+d^1o{>!y*{4g9uPwuqz6F(b!7eClyE^)%areV% zsz=x7pl3IY&m9@`zBP{D$)r@dyGL7tAaDg_KVAa~BoB=<7hD(`{wG%f7|3mVVO|C9w&42IfNysZOqCkO5VUTNcYa^-(+*)7jNnKXLCP&Z$6C)<0F*|Hcu9Szpo1xaNZfBoQL)V#} zb?8eSV)0AO>t8+}O8BU}DQp6HTd6IHaX&vzdPMCY88Yv3W8kOTIh4yjA+vfgJ?g_D z^7#vZmyM`X(hM3fL71`_`yHA(565fzVchC$8q)J-V35P?SEm>YeS{p_qhZw;C>fB% zmXDmQKOC9Hu`;sE!LnXal{T?Wm-|dTFum6)SPx0S1})eaRAkJUZZUL-Ux=|Y2Dihd z%hnZ0@9>7qq|1$iTeJ?mFD+mF<_1F8HgEN~(%J5l25~quxHbpf75FMrA*Y~Ye`M2f zd%m$J-V1Yof^mPQ#(}Yz6Iv87u8Ris@nm>fdQqZ)b)X||zN{Jff58dDm{+0&+x&+6%1AY;6H`&O6 zx3J*C_n$30eX#CqrAdP2tub0P8lU|<)Aft={Ym|@-?bTHv}1OOxAN*q-?shxrd*Pd z37YiX`1x+>;oP0XYw;|5Ptb_*wz#pX#H$_h(UoI0Ub?vKSwdBz1`5tAp$FMXDvkXc zT&a`)i9ap4FmBBf;2N&{5x^kgr*ymZk)jrNpSws%p?P;p4z9vx1N_^c5y7x)I0pVlwi!ps7>twR#IP#dPoTpq|sjy zbqoe@Lx{klic6p1C7)J!4t$~mEau0wbs3#>?(|a52`a%bzA|2iTQ3VipHDgaeFK{q zQcNQjHw)hbw&EUtMG6yL#taO3v!)hH>5~nQP~0rWDu{UUwgj@oCJ13fx_v_6iQ$C- z-hhh}>KMZ}kyixb^sawPQI{g5CB=rc^8^$GgjXNxFk%7P_#*crOhgc{~;a0R~% zEHJ1h3rW7YhI(TRfEY6>1G;W-*%1ALfpiVU@4_rvMEM3_6~H2V(?vETFC`U%3iGX+ zhvW(x<62oH*Eip+-j@7z$^}hx6E8Ox5Rc%lfnbUN3TPy#8wowZZ>-3*MZZDved3rf z)q}>$eoPM|Dk15hxoK{!7B4KYsi}Fqf7lCrFi&8W8VVUh5tU&Un~RDnY6xqPxl#H& zd$nJlG{<|yb4zLER=T*>4>j+u+jh0Jdv%f?TC@gG(mW3BjkMf?YWn8>)Ep~NE@6YI zW_o{1$PG_#@}Kp|*mecl^7bJtWPxKaUX?{&oo}JQVrG6l-h<7nXm1w+B$>xOwmru` z%Rra64!GcrEaK9P-X(RJ5YP9!8szHKJgTZOjcn)-w)Z~G3q8&#@KvoJG6_w3Pz~O$ z{%M2O;_uQfDl zGP0?P+PD-^jRIz&=GnUWBfw+tlgT&DA|)Up)f9{$Q5xzhPA(3bLNe%fZTg*>Brmh~zb5>?YDI`V55vn8;byM;(hWJB%T)SEe14Pe4^1xL3RVOT{NF zBqtD9fX}~WQ?TgzE#rGZ-EiQj?n3XuAfsANOe3^W;Lzv!$d(xpP>vZ}-bp&?3lQL# zt1&lLrC&rxgh_DF!jRs!RAJE_MI)d^gg-gBmkNcHh1_%yg_O&fyzkgfi1g2eh9=u8 z>AytTN^&ERiO1bqVC9ik#H4nPqfZ0l@^6(dUy0WPZ)}wOyrXZH%M}KiTWteo${53B zeMw~5#6H$^WyCFJQ$^b^uqr=;?g@S2MP(gNTX_Qt)ix0_x}}9{p@<)~-!jLs@)aNy zHj$4Jq=<7xS57p;CcywY&qiK>y(-I%#cJ%E= zz*Y#W0S!(!tf2)nlEcsYri3iKP?(_tojTz0>L2JzxGxfw;BMr#2qdw6-md`*vktH0 zW4eIde@S4n+C`WV=Iwzi!I$DryF}qOII}^po zk4H_^vj&0Fw9q}f&>JF#9UJq*?3y+E6H{Z1M?i7+{XUdYv>x2R&TuQ}RA!(ybC-L1 z{2GICE#^0hEy`L)XgN<{`nbe8;9{}Dbs*cfTY(OgPC4;iM{0Gghdor#Lrn&$2E(tS zkf9qnL2EYsUd>H`@12OylP)o210gWT3SoPgKvM4O}f1 zko8LbjI$t#doCoUX=Sh5j1@lWa>Rr5fIEA&Lk@MoTO~F2^1`IO7&w?gOhM}ChB=GR zagooZ@LK?>`h4I!E9z#$uNuo!1Ds5o@cdx?Q{NwN?QyIW!A1A^er6KDLw{EuF@H7QiRHz=!_b z_2|bp`nY*n?;S6c34hKrFelkRR4ZioxxHxyUsM=U<9i`5s3?8{-b~qRRc-n_pXx{l zT}EeO9QM*%ZOX$pBKDG3fdBGH{B&i>|3L0F&lArx!}G0@^^&9Ia38N0ABCk1Ou_`WTA~~1}nj}@oe|y$r0a#D@0kpY_Km8&l{LAC;!0scc^z~?`FiNO=sXd zv}N@I?l(EHoD0tkzK6S!l2)=D@_QbI)Zbo!9dT{tS&m6B+~To84amA+@a*CoC%r|R zifR{YZ6s@tm63a6 zyh|ln#R{@Ry$6vkuqdFI4d1hLoeGI`DT~`mQpnmeqTR}X%}Y^DMmL~5Yu5bWsvlzG zN;=PExdq!ApT@{3__ax#?;7&0t1JjSyn5T}8P1o6u4x>=MO4;TJUjkJ0G*iQQCnyx z)`j)CCNloGW!J^~Nsz{?Y-||ABe6gJ-`Jfu|&1>;)@h7GrVNWTRU1IyM1>&H2 zW2%IVs~^)K#?wpiH?-B5RGFIojdDNZGz%LO2qXl`R8QhO3kzm*jVt(QH6O zREW&>%{8)Gmp06Vz-npcWGaVprMl7T#iRS>I&oA&RC3nNtVo3U2ZkzOwA4F2-~1+K zEn=!p+@E2C1L%?<6B5RWkhU1~+5~gf}=wXH~JtA=0 zg+N1sE06>;+MvVUXWDoGh>L}=2%+wJ)}~_0Wmf^;BKM}Adq!l>olb{UOfMap%+!C= zd!iepSI-2V?J#;ekQZW~dukOmXSWeBqU1E2gp}R)Q=e#>;B2 zn}JImQ4dV&@y~l~{_@1Y0^EFGqjE~Q3wpoEFJ(zS-~dy|{Kf#LpeAGp^DA@(!OB$T zo@6QY*GU`(@Ih-y-j9X&)7W32hmlEYS!x3@D~L`x5iiO;Fas$ovl?egBsph!-{2RB zZi(s+uw+<5y)yQr-!u1fcrb2q(^PKyS0frCx^;@|E;+V{QgsYr+|jI9ELdJ=_Qh^B zFw7B}`DBUm+MRM5JBPj-$)ZzFq>^%Zwrus%gDVytqCeg=82=A5`e&B@IipOhO#hzH zKP>mZCiEXP^&iSy*u=@m(Zb%@&hZ~a^cN&+VDrUc3keCU%E?hlTNs)+8aP|n*(w>> zI?)K)SsVXbP}IQ2!rFs?{68`Te}pLhAz*D_=0w26_-|=JK|6N>Edm;5b_N0(CN@?A z1}1vuFOr#wi9qKsAqi&#YYQU*TQh4D0{XuY0VgAqFIJy}p5?FZA6x(QX&4#)L7@v7 z*o&K3n3+5OrRFagC1(>GRRZ>ZjQ`US|5xYF*?v*pCX56Oe|T}lzft&qkM;k!<{$c8 z44wbt^pzc5O#U4E3l%hQGWo0E;D2?~ACh0l+`#c)o{%>9XP<$A?JrgTJqZL1|1L(L z6S4iewZX#HjDSwf!dAf6$>LwYU*ps)jGfJ$z8uQP#zxD|#7NKdr##{R?~{p%iI$$8 zjs348hW`v^V`QXdU}fWAXn1zYY5v&dNal zWjM!Ik-^^u{$s@7TP!TBvbm( zBaVX;W=!n=e_{4@nDFc zV0srSwuUylH=DuKV0OE{kE(?UtBa26ourVs+DnA|V_m1=;svYKay=n9F$Zajxu2m! zFm)x7aUD7kRJMWu-LXC}ubs<}tQ#wB*D;5Uzql@u9xhvqHb%jK1~-ED!)mv@&H9H- zS%<#S>gBnyRqHKqJD-JuE?<%bXUkzY{ymJ?r)tQW4biLXl-60Yl z)f*=yAQ56nPuW4{LU@QGIAKPvC>gtf3=vJAAe8hl*Q^4I49*oFM7CPGYR)7+X89rF zt$LS!H)vZB)0mjHW8<|aK=X25DmIdF(FYBnsM4y1)a^)cX<1(9gv{XMe4QNJ>UhDb zGGHU52VcrP+M_MYS}=zgws4_DHUm~f1x%P0=!T;`$yEcdgM&NCl>wjNv_JMg(zi$X zsRWM8sV=TC+LvVI^CC%`NDHqfy1+%FZ{#4+{`F9~C=lyDJ2chx2mugSD;K#yV??}2 zMCub3k^-grW>5Ipy*C%AfMvqw@2TK$avySF1y%LxP=f!XF*1zf1^Rb@+ z=ezBl<6Yhhn&4GG4AMZ!+zDDkcn1@~FFB&&RX+&|;kAF+j(`U{+Gg(M#V01aQUIC+ z&w1YNqqoBGYKJdYM3L2Y4B53eCc|Bk)KG(oOc5Xxm-YKTnmoWsF~^Hf-|1`|2A>}x ztO)kxBYyA0 zsUbWze;wcuMMRGd6hStN4oY@St+BpdcU$-ZK~LR3x$ZZ7@POkw)Y}g4b2+ek0K1lM z#J5iF26t{!uA5d!Nv^T1*u49|RY10hL8(kX{5dtPizO$8gzp5j%99vHxRoNPf!1gW zLkJc$)W=!BVA&T#xC6llR;Qi}#(5hDBBiIHh660Amdfk(1#$Z}#ny!`T!4|M;eEqhXA7VW62|wm~ zsnkATF8SEPutLf-+vIywm>Ush8LUmCLT0JV|tO&*Z7l~^s}OwCT5 zJrgRYTn~&_!*x(&mM1zS4}4e2NOj4^rW8(>qOZ>0rTj%aOFpq! z>SV(qi>K5gGw}@dq^*jejS&=>z7R%)wP;HVpa>8II;{uL35r1D-vk7K2GFPUqZk55 zJ_%p^Wpzop3eD+uSPmb2Buf=SDa}GD5>;%Dc*zJCJjQ|A>jeKrw|kr8=*WDnv&eOD zakzQw>EV=YYw|hX;#KFd;U$%C)psipa+~XF{@qJQin6@C$lmoLIP((f((A2@XYnS} zt|E=mOYw)>WHfBq`b4xy`w@dzsuU=i3z!0OST4(Ku#F0mYY6}@Py^&NHNUcd4S+8o zE!6RPifidzD4;26awXG>v9Y|}?vU^E$ZxqF_|Lag^o!3OWUoi>OEIrBhij?pZhvs< zC_Y|<&)m;wHowPByBBdzI8Axh_@@z}S;NPHaIEMF^NhYaQY}_B=MD8dM#jYpQnZPI z(eI*0gaSlqQKwPTU{=hU)R;Tp2ch2X(<&@pUpj*NwcX22dhO|? zJRrAOnaX>zqw#%Ct{Hw|9f>(%M|<#0uzT!VzOkyAiNQtVsA;Wq@BJz3;CPDoGmc#c3!B`RX9uun>-V)kI(W+OV_id48Rpgi-uMyRJa<@B0Z?BOgr;eEa9KZKQ1)KwYFKz2Yd&?EG1T);`FPr{eu_dw;;d^zM2iaBG89|aa^SM+q>_%E*>f_el2 z$5Bc(cz*_#e|kc)xBYtcq)_*xx$kEBh6xs+ER(hgm9)y^_QvddN5D@2eHwMF0Z7ki zW=lPqb2EpU;;wQ@l6+0d>imp;ee|~2c};=|U-~&REQ8Hyi1X?7VN!fLN;QR3mCphG z$ob$Bb;)4ds4VJkm7-ZNvb$nkvVs`XQlV9Gz8I-GX~~kgaboI{*(SG9t%}&Ffm^hp z3u5kEp;@_PL|EF~p2f^j%vP_TYrk@&V_n!Ig2~;Wl+VLevB7jK;KCNRM$1mi<4sM{rPFsq`PoZoP5E&5abl%d?)MyE#re816bCtr zCk|(Jq!F1qbw%Vo`av3wXZcKo8Fl%}5wuv8Yku!W5-nO5wVUyQ&v zl*CEUp|$(P7BeO`HlQgGS?||WKCg4{u^o!EfE?8v>MdQ=b~_=jiI|(G1Rk3e)MWZo z^*PPyK;&pkjWv4PoZ_cnYIMV9HPvVA^(PA-Tix?dOl^9wi20mh9urW*g&_JPMXYI2 z)+v)cn(F1MMj~#rmV`o9M$sA-iy&ao<+V07{gzzHYlOyOhFtCpJ8J>;{bsID1-O%| zJHfbcD+b-Tu5d~zijvf6^RDWzA-KE^{ami@gK#C}8*p3=inB8~3;j593a+o@?TxPL z+~aVNv@1J2oFuc{CSe<{>UQAYXE{2ROEGh1$|e=@Y@B~UaXnFB{caUh$cFN2_%P*S zR=iL;-)`t9$liwKa-KVOleeCRi&}weK_xG){?ycLCB2{bqd8xHmw~h-X5#>Q>aR0+ zW|Y!TCz(^oSLPcrF2V^FcI`k^M?_B28IjW%4O;s=Mek^PJAB#g=5^5AYxI8Fg;vr& zG%-E8+V20e(^C5QXa`?((e_t4x&6#>lH!0`^m4` zD}dTima73ui<+iP&knUv76^w*tt=1-cU*AAe7#_W^=yHEW z6)&G#`Ig|CJ{g=1-r3x?SblQ^xF8DpcA`VDa&bG519r@OfwWIw1*=E6%otWZ=Epwv zZ=w6srPoC|{ND_EpS*@6(sma8V&=HtIU%O;Ps6+MyRVR}qxs&X=mU2epZaT%eevi_ zpfHTQDY!ZAR;INgWSGqp{RA?Pc2tjZ0!m#xQw-)kS^IO1q%CWBZ2fV;zGLOC0u+JS zWA|7BOai=vxeo)F!A@KF`>4$kLoO1}NUWO=fI`XL=t%BNmhX6xcLeq^!O-I(+G$5a zd<=s~%z0<~Lt^Jn1DFCM2>qll`wX3uBRc6uW8v%(>%)fia+%nX7;;3Y0~-J7wzqZh z9-KoM^SKKXTFJcg+s;N`S8|AI*s#Miu5%Wv67CLzfS5?A-x0^o{#xLN0^YrM;Gwj4 zU2BM1@|EJk?hU!8I$5=Q$;r3a&5Sdrh}UNiijcEIaF6Uzz&oKz$SJy}{TcEjasl`O zmglQh-e*AAIfa8OixFU~HXWtmn_>KwnGIO<%@{g=yQ>%KfO2Uw%) zZ6>XIPDb0*j3;V&;QnQH?8BN<8TI|#=Ca!55yi}&14k52G|m%TEu8b1Ah_re#DN2c zVa#EXVSgc}ay%_*q~VOXJNA%roY~zW$1vuu-1YM-u6#IE$DX=&pDq*0sN9pFJNfjN zCWRzzm>)FBw}GWuRL4u{`{{PnAl5ZaueHNX=M`z38q}GutX?nWpl8SDk7sM9%ayPj zt2I0xrfOZyxjHz)%9Ce%%A!Pc2tV9!mC=S$xa)6)?TonZ#(#kKav%K)I^eedE$|Kg z+B+4Z3%(#JJNxOYay_+p6k$F)$V*+@Uug z36v4DQwQ`|?O^V~0tKjntml^H7a(?Oy;70fUzJCT49G-Z!r7u{M(U9-jkt?r>mWxr zC#_eg4>DI_%sa!*#W?1^FghyYC`p#(AQNI0^;elB^>Y0<#ZK`o2ykcTdU)WUi(^Ue zEqAIjONg945J_o=OSp^Y+j(NR#pMH4yD=x1O5!!`UghO9gC3HbRkqeEyl>bYuJK^7u)DA6*6ZKy zgi|0FQgceiT$(_n2+Mgt5ucq&Gp3!FslnTHjkYk-k-*7ke(DQm=fj)?X28&lnzI{k zVv}b86>i&5RaY`|a3M&HLKzjVOC}V3AD35>L1RWLajPa|U)8^=IDz3-(J!ea=n*Jf zS-ClT*`$|= zpb_DGzg>(6MHb9H{>b(=g`Pn>P^cDr*EUdgzEVZhK1g>`ML;IUB4D36tdiOfZ%!ld zka$x~e=^qDGg2O!3pILlk~j%XjEbwKfPbt=LydyL1TOx({v3>$* z)^~^x%8fG={pMO!AJ}oHZfHq=T}p{n2DWelB|5pl_W-MJ!4y$)nUjY+C;+~Rq^FpF;>&-SJxN@ zq9c+VeKaxU!_sNE>oEt^aM9siA0;Wn@;xz9fb=(ng%TfPB4jlwB=Q!b(B+URjxJHQ zf&)p>%`M27@-;}Ahm~x!mYPCU49tp6529vh7umImC*up>+UlT%Q#h$os-+=HC@DOwk+|u5u(<#RnQ!>!RjFwXIJeYAo!{;SXiA zX6`HN%*NmK|pM>5UMbb2^6raBz_pB(X7|Jn9gYzk0scFE-vvC^X zg0OrL7&2$IFvP}R>8PZ?kqUrTnFttL(8 zcgSf_d|2%IAuhlaA6pQ{3DIB(FVn8Zb{E5#XO*fQr1c%@NrXvnXi-v^h9n&!={-O) zDK+J21*-|QEPz_i$`P}k=(Kl)gIEmwh!g`7@s@92l8Pcns+=Bo90d1#Vak4gB&)|cf`qWXU??}qk;046RSu2kY z%rH6Bl0X3kO_E46$}~=B`V%uUTT&RD3irNkLof*yA`q{D<46JV!u4ZC86_MO;+p|c zr724xF$%sybe8o2jkT@?n9mCH#j%?xEz9Q#V3P!#ACMynvHVfHfg&;dlb-zb$(?BM=1lp`pZpi1$1306 z^BCFJN~;JK4VF6d>zwP$1ygll>at!_G_3ha!xFwC$_4q9zjnpjrM3b*zr7rArb_sV z0gfARJ(vXEIIjI@YL9OtmtcYes6WUX(#LZX$y(cIycTo2T$X6}8M#q|Ow;G=w3)|fLXETWMio1_g_QMi9W&2e-{bYF8%-$Kee zGdjny-7#KcA8>S0a;|tLk#V-1o+o#Qbg#f*-!^qcb~im)8}b~(ggbaxWp*1Z?Jd|aL0euInc>J(J{8PGBaXd%C2uMPglKr_vCkkt?v{FU*>n)9dR<>sHW~)hO9Br z)NI&%3NB@5;3vyKj5}itU>=U1h%KbSwN@WkW=B;@;WWF+QA}Db9B{Z9x{$)5LR(S2 zn7Y8Ra8^;|Gvq&`GAJ59ZRnpn)B={x(p`bO;}}n{hjGr0?HiWu13Qfj;1*rl2au0$ z7hMQayo!#yVVmrm?>dc)U__6Uf}Ap!yd;Gp1r|#jT=5#AIiiC<$K6nw560eJQTg5- zi7N$2Njl|R4$X1UMR7>Js3dl_Szk`RzNQXhBYWVQyinR>*z9u&xAtBZam@s^7@b3uq zcLeJn2sJYc%byT6{jW;uKhUn9!s*}Xm0zH;KYiacV}@Ti2e3l7&)_uELOmY>#0dQr z@-UD+3Tkj(-9+Ic>7i9^oN;W2$Q44IUwp=T7~0;MX<@X~aJYmsoZc!5nq2fAc83CS zh}@ejq?~tTJhDLkYIxWpUeK_bfb_8ss=A0g-F<4SDp2Yy<78#qZ%U2itWy_tRrRb* zrd0G~_5mktqLf|Hp_B@`X4PzOy$Q?#KI}F;@3YP7jl#{|-4f>^=NLnXzF}C{8D!vC z`ddX4wIfqh(}1yO^23Sph|*gV~4#&=@fNVMcHvk5NEA zO$A%3pzu`Sh;PPlwK}^RP7W7HNTc8BTCof$k63N4ao9omEFt4a9-}y!+BHZMvzrc(PjI@7{3+R6}?E8tJ|4VX#f`F{3w8%e^3;u+||Ic^@OpFXK zyaHN=Z@dCJTs9WA{{>pX%UQnvs{e#l@ExoDl~wQu596Eq{%1^nobTVT3jT}u{A)r1 z{XcvK{=(|O{oXV`oCp5k5B&d0DEJk$|DP@Y0-w|3{_@YSi?si0%P&CwulxUG5zzn2 zWMFzZ&o3)jf0818fAH_u{sQuUKjBYu#IO6mT(fO48#4#` z|J=-hm7e~uUJk2lCe8|q343jMb%eDBGSM@|EtLM^&Qak0xG_cv^r!%f;zhoMim0YFH35O^TEh_7Ee!R`PXht~nDT7=a>G~DDv)j7gAcIWo{V2eo2ractFca)#t zT#c4DDxS5ujWyn`RIjUp!M>v9WvRfWR6#fXDzJK5|9XoX_+1L}$|4!1mx~Wp2Pg2R zRM-*{+yBnr3&oW{F( z?E1A-CmNbo?}}i#{j9f7hLM3@)ztzlRKea*LzP(WwLCidp9!lNYgbmRemzwM+0=Zs z(%Rt-=&kW-ozJA!Iu;WU^W${=k<205)4RLeS$g+7zZi`e(}QM86mZlJt`;adKC%EvJeE(N(qTAP0C6m>|w~!FB=O%E!O87^?MD4 z>#aU9ume3$u?^@Io#D33sk)PBP<;)ot$4jr+`=MLx|HttgqO8#g4J|m`V9McaN-aU z5H=(qd%*{ZkSWMI(>0J$P75p#f-^Y_MMq|gRp~r!D=GLsI7pF{b>;Q|Q4O~=uesVk ziEWPQjT83Zh|W|&jXPd*r7iTDUrT%4?8tY^R6tRs>N0#)DN zj{?Z6B2X%?uQE49&rP0A0-DR6G&^*!boJx2^7U84Arzv*Q`L}$DEK66v6)kKk<1nw z8oJ%9i?Y<4homZ{>swr*QjB+z;cfENR8vM&oX0Y~rh&4|XleTB>n{}EJ1aTfs_o@* zcCI-sSZ<>S9tfcjNMqf&LK!FWDw9)76qq)T_~81>iyn|b{v)84x0-fZ6g4ea8g5Tt z|Ht_+Tcef6eG3K7GtNY0@Zcy|LMNzCDiRY8=ob7j#n!eqRnfr;mS##lp^d#lY%^^@ zjK_TsfRTHkM(%C5rPb(i7C$PhG6iBdcuhM~BcbktzUgCuZb5vMx@0XmQBHJ7L7uP( zJ&0K4u%HS7UeVH=n1Td>&OpLM_MlAY$GTH^`s4$uVpGS*k}ny`O>>;7UB=aSd)o{* zQg_5PW`jA)@w`rM(}!Qkvf0)nms_72QQWKhT0f5n%Uw&q6Oz9%^mv*(^ZNXm#Jn%1 zY_(^p-ttN+GUypY*w!13-%D-NbrE~G-&hY4BwWcXyq@^HNoB5tj-i&jdhy+qDeV`{ zJc4W)4T5MPJsgMOkU$SI8zEorWEUE*$CxKHCrmf|Sy$ejp(c!e8GV=@k1xmP9LLui zq2tVJmhT5Tf@mr-t!JYks&{PE!lPh8O$rO6vNroZ^@5q(+PbF0Of5|(p)ylZEsmfc zx~oxzP42|tZ*s$nGZMs#5P$`UPh=(Ag)zutN{*zhT#V%A3{vB%a$t9ZZ}a#O8qpqq zvU>i~)$Fp2m8yJmP379u+`RP|r0@A0D`tkW-fFXQoKXg)xbuYsx?F>&R~;jXrL~i( z?4}OG%_&IUsM$z4JXKAWwyq5ezwv^_l4q_`e}GTwvTDKK9?+~tSE^D))$CNIm}n9e z6tNJvRQ6~(1#ee;E<#wQ@aV8BMuR@3Wp2>40#Q$D+PF7IcT&_A;v<7;g>h1kKjBpK z!?~sr%xbOtM*j>>b6Ocs(!jWLj(KOoy?j$b`Kqg(-Ike5yVM+19TN{<#v`?-M5~#} z@M!8$Mhm7&eIv{DRABR|($m|B=R5Jy3vw6pst6s`YB3{msj%?!&x@ly<`GPQdWMgX zX8LG>dvu#FML-FdOr?_qGdLgEvmO@%dI#Tchr+{w(uNpbUNna{&-sJMw9Ru|cRg#P zfiTvOYqlSKs`W}nbv?Olca3$<MT8a09YZaq_R&7Q$6G%ksW*|(RvI5i zOfXs$c_^8hbl`FU!`N{T@wpHnFg+_=pqyy&OJAUOf?USF0$#p;#1ZT&VFPol9*S z-6w@&?o53)-O?pO(W!|`Jw}7j96aKDTw8cC>cd2w9QP*o@0s-;a+uV^p&pj7 z_oa^6bL3zm8e>(PEpONQjsLK}ndV zM(^i}$Me$$6}*VEsd7SbwDp>ZZ^sYnrFmR{kox( zLz29=ZDpZVJLj0Yaa=r}8QM;kKlX_>0gI#7RKAu$7Ga@wz`P)ttX%tUg^LDfZ{hyH zZqNBsuGM!N#cIP#F1pJ)fHIs2E2Aj*)WA@2T zM0_^Q*N5$LEl$q*cx#bUue-If@FyOz_0R6>9v(C&8#taOdw%64HWB@&tab?_Q2ZtMwG6vz9RXdRBbQ$2Kb6!JOW{1d zaoLOfI00>MTn1^ckQYTS`P-pZ(Os?YDrKVQA@=)BRuqDLfU5*R>Cmwy%qhp=O7Vn0 z7=5<+#EKUYy=}TZ)>~RJoy->Rden@EWb`Z`jWE6iz3AN~nw~MWi|gIgIVdUtM;FT7 z?LE|hS4>*IfTk+*pl&TOpcH+W(6Dc1FX#n9qSWUifpo{+{A3{y!AP=0_)cLBO2Co1 za{ffgre_2h73eeKRi<$)9$L0s!pDBldnbeHlrt}OqoI5eF`nfw9#+Pr*DS8kQeCgy z0C#EM9Y;>mNlKPP(9x!I3xKx=5x8i8^;^$iqL0|3WUyUnm?lIz_b46*?}b%smI!c= z`B8EsxC#=QWi$$Y(m&ql%jCM*JCk!PxQ#p~x(*6D>&G~eWTOFu95f6gS{&PYyG@%M zGHA}iAUtO-EgF1uPGl?wqHq6YKR|2bq3`cCoXRdW+e|Myas5k+gQh*`i}W5$$z{ zBbta6hO#dlfB(q5ar0R1CfP9RBedj8aJVnN_>iw9k+!d?9C6$apl-^d5}MT}S{ zJ>U4Y=4RYQw^55nintDvKJ{aCa&Z$yMr-caJRXO8u62y3?nveKKfP;vu@bB673flo zI?z77DNp$_@vxK zr4s%f67L;AK-qOR+t+%zef)C0b9BtW)^jk(4ohd~FPpCyfR5no&O=)Sy%EkOoUwhB zbx6#80KY1fL-l~u5Y!`C1KkMV9DASQq&rbucR@5fXe5E9Pl$VpFymUnI(eY_>f=57 z?TZrIbPC;pJ9(lTd;v@gthd$xkd8Yo66Pkc>ST_4Vm{XH@+9e{*A|Fc1aYFxtiZ62 z%-l#Z6#Oczd5M@DHo-Mf$Uj;EoAAUtAXTtCU2zi%lFf64(e)L~W*sNMP0^Hx(r4FM zDYA7!^I$r?B&~TgD}SyqVYar2>S&eHBYo5< zfH3$9*?J4Ewq4`Cy+WKhKfNHUt<2%3G&*vaYN)WfUsgg&)67Sm?)g-6l%F8k39-}z zHg)IwSlP(7sH&Uaoe}fy1>~}!18J2m-egO_i=rXz(Jri5^zFrhrRe2VF=n zrA^lK6bcKA=x)QNs~8^&4;Z?E5{KyyT*m)^gl0tjrBjlPULHGLY@~}ZNw^*scy|^2 zEh?dugBGS$A*_e5?OUw*0zGOG;4N5dR_g$AqVdxUgLaDByeA zcfp-HkP&f}x(~0=IMNFM4b69FUW3@%*sIUf&`%W2%(+ldm_rAZ<9Y?^B2p;8#}!i| zNj2sus)9=t>{qCw4)CD4TTehFb^n!_`#4Oe~ckfB6Trqm*g8o zA-~rZ%G=7-C_WOoEo`eIdV6PHO$tNyy~X`Z4?*3Uw%Wpx>h8zWInZlwZ>-@3mqQ!msLtk!)D8pQ)CMa~wy zEVKiTGZj99=i9WK5N$X-1V&}C7n>*n=<^cPLa}Jzi|8ef3myo(EJUPunmkLlARFN2 z6;Ng)@R`_G+yTcN@G0mg2PGD5z~2xFqAHY4FBH{nj=@a`cTEgcY|QN}rVgQ&haW;Z zrwJ~T%N1uT_aDk?$HxcQC7N^522s9S;f;RBap;SGt~fC$wu@@O7SCsOgx`BwU#q)D z1>eFPg#R$n%{|#XA<_*^73VaT4-zC39xrU=;HRQFzmpD+M980Y+;BXEQvugn_XY!! zS17R*q2+z}=S@Kdd>|I+o+^_CiY0R_ZbQa~&^#Y?W~p;{jQ1nLba9;7wmL%g*a77_ zL(|se<>;IF*|?Wvx#pRR|>j5yqkp?U=SYQ zmnBhR0V1=b8-kU+L<66IP57u{Zc3E}Mx}d#G?FxB$`1;vpG<7GtS}^)Hi?di(K0== zs3J4BI5*W=A}dvdF${iLSrZQxtS`UnEy>Kp=%U>hmRC_Y>E@3o+1Nh95*5IBHVoih zqKg)qCkp-sF)Qs5ZldtYf@b*DDtWv-9C^#TDDTke@QpW=sQUPy+dG}gk~$`#*)dpBx<=I2J; zBv2W*iE{0B=fE?5ZRBmWVJPI__Tq|L)J<_jJC1f+Nv&osV2Kz%9a_IBrEgh151__E zn%qQa{GeB!j-3L$8wj{gzP@ID2XKZwzs8BcWWPjaZH*N*7}vq+uDsPv2a1b8^Vk9o z7-vSh@_PF~BMnsamVh&v4VHQn_YuGg+!2>E zZaC2EjTQO5Gl>+R)h6cC$>g5mt8V$bM=USbjWm_qe#hyriG^xJF|Niv&8Z-@jDA4% zxbw5euk|G?lYFJAfceEc1oB1J4Fvm|YtvV}tvK4s0a21e@5t_i+3gV!E}xp0#`~UW zxgjA7t^JjXZnAFZCv~lqAGrKuj|K;IY@L%jXz50tBi^h>57+9QXgBvSeLZztQV(nj zM4g^E&Q8eA$nF+!AIWSVsqnfWsb9S&!T&m#uK)EhZP{~c<-pEpyz-K5UjLTODfEdI z{n)i60y`$~Okwfp{x(eKLFiM<9{=n*rxz8_xboh(+Ze+6qdJoFGl0&6(R}9TG@_Ed z$oc9FnZ=6LYdSg)%;zL9FUcEsLGH(QDNj8#1LJ0P$Isg*{mqfpmswsF9#MH-Pv=l- z5Ucr#;@Y~BA`+3%SO%Xx^E7p^{1^iRINmwjZ~fW8KH33atwZu zQoIrQQhjXnW&AS(>w$__TCW8iR)jwMSav_}cvJ{4~nxcD+@q zVPZYe$L3v&FDmtgi7%bb1FjXf9H#=7mEvf(e*Na#8&a;3!3+kjJ=cX&^_3ei^&Kk7 zTjZ)^)(|11^ba0)gdy=b3~DR<*8EY6&Y83>&#b>Eq z9doT&mDOyBh(02gvKe+*)LZ>%7D7uQV|!${$guh)Wd=RJs89WBIpvCJedauJE-Efr z75FqR`M~#KGI@Mdzi74h2Fx?ldMx|xjx_ElAcMAu zv52vF=_OJ9S7Xp0<*^*uXYmfap~Z2@qw6A|jet(yPC_dN?`k**#XeV4%Ct#r7*`~16_k3?cEWkYRnYmS3rXG zMB(26Jiq9HnV1>a{zQ0KexpSDKhXn&+W`=ggNV(;M~LB}}#NJm-yw`JmW7*=j+pZ(8hqf+r~D(6nD-uv&0wd4kY^J{BLR zk*`SO`Aq};0V{n&;OH3tY@h$8yjN6FR9;-=pAa~z9}?XEArQyR%=iZo$4vX8%%x-e zUqIr%o#sD>;{I9S`}^ShM^N0q57d8w$o-HZ|C7X*{(n#6`wQgs%i>>gw_m}hpZM3$ zeSX>gbLD?;=@&rj_Xqyv8s9OmpTFd<+kUS93ncgLwEq^N`*H1G0`cuizaW7>w*MY( z`}TSJ6>ekrw(~zJZ@(+7e?Y0f<0Aa3yk(?iVg8HowiMY*7IXKrN3&D^1%=x?{t%-T zE|jPdz7W`WT(DHXWz1ICjSYJkdh0~q78QbhI1G#U4|CC$f`okUrOdk|)5WJ4*8>!2 zq*EtuGTCRvO8O3Kz|m_f<1_R~q)AdV*6Trc`e&YJtt{7XJ=CO?#gNIj#3CE3mAKx8WePhtZw<7`&97X> zPBiGXWMr~7Lpw}l66iZHPW_JJghFuS?%P)}nRJKrE%qpn+KEiHSbpmraICMa1Ryhl zP;?+Oy!o6F+1iul8QX;kS;5*t9Y1MzYoYr3eI5Pa;=R*lbA9s)GXM-VV6WnNJ=Y25 zeFqJlD@REX_dfnv%lqxqc<61p-$*>j$GHn} ze!h#K@nwNC>JdfXiwi6gZHjII{5Dk^aPtTwR=Y!dnk35OfQof6%-PXf8%-GSYR&}v z8T*tdqB&UJhol`N6V?T#8gpxY3rsCIl@r2f6K@*h5yONohJdM zFBYl+jQ#UjnN~9;U_LD+^HcPw?B%G$Q__RmLaTBG`o}nj6N}fQ>q}c^mZmEc6>AUa zuH)>pn#xCN#WN+UnjRvvMMKM0&7TvH4A!Zs$l4kUDtOxl@jlUvRf2_8F)&P(njlw) z?7fK-jRRVZqlvSfi8@XY$e4m3Ovfpspt2b@jS|NT*)k-L;llPK3MxR1GlsLwrdZ%B z%KDUG#uy)$UzH_hF2|%$4O=CsT^^gqYGO7Ai&GQ}2%pY$4g$!6geJ%g4-Kk@s#RtYn|GszIv2U8vM3g& zb1M#xK?JgDaxy4`4uNk>p%Q20B&Hz~r<4-dkK=TSomS2yjHO$diy;?>N$ z)R*z_*`?VxYKSEAJig`5Xh}^NaIieo*J^DGU|k!=17kv2(ih`_amIAHsV-*AW{b$1 zaKuIxZ&VX^Pw}H_4y~PYP)tzZDhS#d+$UD88g!+kkT`SDYs?lCK)KkV;5bq6py##d zq%8y=!P5Nfa^Ns}g1!r`NQTJ|{cNf)lD8UNoi%+erQ1>U&ZeRZ8kC}YtN|c3Dr?e^ zN=Tw&&=WC^-pJdQk2pCck@A8;%wDVN9d=x0{Ti~=$Na7@)QjOr>u5QXQmmS{6@3HD zP5Tnf0&{kDxrzp_1(dr=4x8)5XEgkU_=_o^tSys5EE$4@wDap!IY3B<2IG|m_XF>3 zhEF$E&N{8R*`q2Zu#HS%)tHKA@N)b=v44svB^3yhg~h0=9Wy4Tigi2CU96qZOh|Au z3o}d_NuKPjMf6SGD=|)9b}lEZ$1ah`>u?_&U9u?<9qUmNzZnEq0rO$cPg4$)SK67Y zEu&I^TxvdVUB)+Y1XToB*z_)O09{zn2}l@U2;Y2zT0K?dqONacm#V~;C@S8uk_^5& z-w@5@HUtHYTZ^nl6kdJxTA>C{Kn^ZibM}piS~e062J*^ARi}fZ1bSt63v)hSqQvQG z6C0PX_U_C`U*R0X*=U#Owfs>f2SCIOIn|~tji#|I6wz^} ztuHQ>x#|X1VPk2-cF?aG%0G4ps}zn@Vypw)@DJae#GBuVW6;!K%Ol><2NfqFG`2}3 zs@IqbV6>A&F5nne+IC8`l$K4wKh`wr(xaJ2km*XYyqvzKJy4n%wGTmQ}qpq?Jv&V?%Y%1&F!75pg^LTtOd5&RZaa zjOgvBTB(8ReCM}*MkS~fF=S|ly+yecsv68jk#K$Np=rwJ*h$jw=)?38+#pNcK{%vy zD(!nSrh;<@#1H0Nd^{F1wa|R>f z#556ZV(E|OLCL1toCCC48}+HSsB3s!?NCBuH+=%o=^@}Y?&XL9Ze7fRWZoKe0ri4? z;G0v@y)gBTQrsXh`{ao7_8gibrnVuhVf{5yF8FU6eBizN9N$IDr-fuvRDl8iuXMvM^a z?izI?cWUD5EjJ_r!{d>}VV#8i=?hFWAm{;KnR$+pF9I<-$&HMpOcFiJu~X>K^EDuUMr%~RD1I{x+%$2e^C zwzh#pqu5P*gND*3ZMAZWDG*_^@=}6J z6)lprmatZG(-;ZN))^qBo9TgeP+u)+&rERdk08WnA3qNhI*flonYYvW>{zK4F9<{2 z3Y|$no~(pGj-n{0br0_a4fj}Q+ZmZ?$nzRMls|le>>7fYj}!qt09!{T2|0#e4eAme zU>z_QPLwe+Ni2;M%gn-tz4fAoP^)7qWr++eH-HL~eAHrwUbJ(4uB`Ws3;Fro1Z+cs zi-}8^u-`C%)>1%lR}?9Jok1n1H88$MblZt^ohbNgqn-oC3GReHuyixh<@ZpR? zPbKK^J>G|IKnLf0zQ+imEkl6(Ja7X|m_7k_KmcbSV#6^3XLqLWN}Ji=MGwHrfsg8s zhE^yv0V0(I`0`c~-(#KQfL3u={=Me>-tqkhVV9nT;ZMRY!*2+?FLq9U%yjg-PV!#} zyHQf6J+zPkx7+~<3}KyOb9l1(sgz&3bGf|rh6{D@F?v;ZZWK9nz>yYkTW^z%4$QtT z$q!`lur0l2xZ{nm387H;hx^D|WZ40n8d6yY>EVBTMYs==&@P_k;9(JS&vWXH0E%eq(WM z9{k09Yq36jj1<}0cm>eX#6!fGhmSZj`zMi`TV=hg3h`v8dTn+OB$?UALzFH<#Ntt0 z{J8Ga6umX_yN>|;?bb2B3F9y1*>7~bKjyyrZ<1$a#bs3#1^?%z`#+|hdZCN{Va@gb zzH~EWY_>KMa=lZw7dO23!#qPx@Ow7{I>f4CGH@dEz zfsx4zul&W^jPGT7GK24qX5Y#?8C!h=+i#X!q+DWdj!IjuQ?1iZN7i`#iC%f-S1 zb&AqK)xa~#O;A$B`@jh=`bT$IcM}Z*bz#NM)M%&?%BzoZp{#&gy!`+#Ma3kMt}N1t zc7XY~f5Gt8?$qP7aomIZ@r8oP$!IpI>zs0W%syM7lGO4W*AeKm>4Pf znNSM8I?c2tXqcJiFHO1(ROcEQ7_kOnXs@rk``OIyYFJo%&WF<;rfFvh@C!%2W=WaE zbmEjf?+HeMnEgHwwr6M*;}JwQ?) zJ~p{aAvCGa-jFtSKDig8Wzc+07rHl2c4#?{F41Mg=rx3DkM59a7YAjYuajz@tXEAqCc`gxnt|0o^I>kKm0@v@-d02(0KC*RZrtMOVjy{kTdv)^Go9? zP20{b{az$=X=8i-flcVx~X+!^Ktr8Sf}_XgBwF!JTz>0 zNL(T;F@anhp-O6i8P9FJ394c`uID$Ypy&s|e5ToWq8~E_aC?+yb2uO}%b3L@l*UkQ-O#|g5eD$;X$+ce z;!V(**;mxh65{Qwcm}M6b-+Pd8E#Amqmpl$I{L>#urFN^kH;@+iT#_dX9;4$q4)GD ztFqw~?P5%`FXT%3ZNFZpqqjWKX{^LI95u0{+;XosoWzdHI_e~F8Xyo2AmhPuC&ue8 z71*A#C|jHTCX9a!48Meto}THCjLi7!;NQ;=@4u9@h{;Nbs>xGGn^@>N*nRiO{1*f1 zKlb>WOXlA*G2M&NAr(FAi$5kE(>Ie$mVZbDXnvgdw7S0SJMCuVR#rX&BGSAyjp#TP!PKv3L93PUEe zS!)-pRx{#t2q@s(My)Yfc&h{L=W$6eul!KCb z$ifFRh!^b=IN`pCidLjN_ICNzIzBMTckNma8lDp`Wu)&!hD#hTpV{t!E%L+k4KYng zc`4bVzeTjPzS^RjM$)8IG@tlzwN;PQ-ccY{B5$G?e|OqwJVpX)Vc3t6y_?%GA<8@+ zrnzGnQg(v$JWG+Rqg~ZpUyag`Se>IyZD_gi_bygw-c>SjHNa(L{=Uyk-;oZN9+&>dlObni^)iv{&${bdPZpQ)TW$8ehxVsH zQt#cnyRVrcK9N4J1!?KPUmkZ_`g1_A=R{mOY~0~2Xi*@I*YIo?yg5pUqBW9$@Bqy| z{#jg6#c*%82g$#tC;)0UG~{x8Rj-Fb^sp5QE;b pSeD8%APC4SOMU{wzsJ