From d106d2c0d8d48c992e0616926a08a01965b31ee5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 11 Mar 2019 12:35:47 +0000 Subject: [PATCH 1/4] Bump concurrent-ruby from 1.1.4 to 1.1.5 in /Library/Homebrew Bumps [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby) from 1.1.4 to 1.1.5. - [Release notes](https://github.com/ruby-concurrency/concurrent-ruby/releases) - [Changelog](https://github.com/ruby-concurrency/concurrent-ruby/blob/master/CHANGELOG.md) - [Commits](https://github.com/ruby-concurrency/concurrent-ruby/compare/v1.1.4...v1.1.5) Signed-off-by: dependabot[bot] --- Library/Homebrew/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/Gemfile.lock b/Library/Homebrew/Gemfile.lock index d6a2cc26ee..27130421f0 100644 --- a/Library/Homebrew/Gemfile.lock +++ b/Library/Homebrew/Gemfile.lock @@ -8,7 +8,7 @@ GEM tzinfo (~> 1.1) ast (2.4.0) backports (3.12.0) - concurrent-ruby (1.1.4) + concurrent-ruby (1.1.5) connection_pool (2.2.2) coveralls (0.8.22) json (>= 1.8, < 3) From 1a102322c7efe2c488b57b5b4ffa124c33e77bbe Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 11 Mar 2019 12:39:06 +0000 Subject: [PATCH 2/4] dev-cmd/vendor-gems: pristine after install. --- Library/Homebrew/dev-cmd/vendor-gems.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/dev-cmd/vendor-gems.rb b/Library/Homebrew/dev-cmd/vendor-gems.rb index a40522a7a2..466ce4b14c 100644 --- a/Library/Homebrew/dev-cmd/vendor-gems.rb +++ b/Library/Homebrew/dev-cmd/vendor-gems.rb @@ -22,12 +22,12 @@ module Homebrew ohai "cd #{HOMEBREW_LIBRARY_PATH}" HOMEBREW_LIBRARY_PATH.cd do - ohai "bundle pristine" - safe_system "bundle", "pristine" - ohai "bundle install --standalone" safe_system "bundle", "install", "--standalone" + ohai "bundle pristine" + safe_system "bundle", "pristine" + ohai "git add vendor/bundle" system "git", "add", "vendor/bundle" From c93fc1a09729031d8d9245aab646e92da5521d59 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 11 Mar 2019 12:45:20 +0000 Subject: [PATCH 3/4] brew vendor-gems: commit updates. --- .../Homebrew/vendor/bundle/bundler/setup.rb | 2 +- .../lib/concurrent/version.rb | 4 - .../lib/concurrent-ruby.rb | 0 .../lib/concurrent.rb | 0 .../lib/concurrent/agent.rb | 0 .../lib/concurrent/array.rb | 6 +- .../lib/concurrent/async.rb | 14 + .../lib/concurrent/atom.rb | 0 .../atomic/abstract_thread_local_var.rb | 0 .../lib/concurrent/atomic/atomic_boolean.rb | 0 .../lib/concurrent/atomic/atomic_fixnum.rb | 4 +- .../atomic/atomic_markable_reference.rb | 0 .../lib/concurrent/atomic/atomic_reference.rb | 0 .../lib/concurrent/atomic/count_down_latch.rb | 0 .../lib/concurrent/atomic/cyclic_barrier.rb | 0 .../lib/concurrent/atomic/event.rb | 0 .../atomic/java_count_down_latch.rb | 0 .../atomic/java_thread_local_var.rb | 0 .../concurrent/atomic/mutex_atomic_boolean.rb | 0 .../concurrent/atomic/mutex_atomic_fixnum.rb | 0 .../atomic/mutex_count_down_latch.rb | 0 .../lib/concurrent/atomic/mutex_semaphore.rb | 0 .../lib/concurrent/atomic/read_write_lock.rb | 0 .../atomic/reentrant_read_write_lock.rb | 0 .../atomic/ruby_thread_local_var.rb | 0 .../lib/concurrent/atomic/semaphore.rb | 0 .../lib/concurrent/atomic/thread_local_var.rb | 0 .../atomic_reference/mutex_atomic.rb | 0 .../atomic_reference/numeric_cas_wrapper.rb | 0 .../lib/concurrent/atomics.rb | 0 .../collection/copy_on_notify_observer_set.rb | 0 .../collection/copy_on_write_observer_set.rb | 0 .../java_non_concurrent_priority_queue.rb | 0 .../concurrent/collection/lock_free_stack.rb | 2 +- .../map/atomic_reference_map_backend.rb | 0 .../collection/map/mri_map_backend.rb | 0 .../map/non_concurrent_map_backend.rb | 0 .../map/synchronized_map_backend.rb | 0 .../non_concurrent_priority_queue.rb | 0 .../ruby_non_concurrent_priority_queue.rb | 0 .../lib/concurrent/concern/deprecation.rb | 0 .../lib/concurrent/concern/dereferenceable.rb | 0 .../lib/concurrent/concern/logging.rb | 0 .../lib/concurrent/concern/obligation.rb | 0 .../lib/concurrent/concern/observable.rb | 0 .../lib/concurrent/concurrent_ruby.jar | Bin 137023 -> 137051 bytes .../lib/concurrent/configuration.rb | 0 .../lib/concurrent/constants.rb | 0 .../lib/concurrent/dataflow.rb | 0 .../lib/concurrent/delay.rb | 0 .../lib/concurrent/errors.rb | 0 .../lib/concurrent/exchanger.rb | 0 .../executor/abstract_executor_service.rb | 0 .../concurrent/executor/cached_thread_pool.rb | 0 .../concurrent/executor/executor_service.rb | 0 .../concurrent/executor/fixed_thread_pool.rb | 0 .../concurrent/executor/immediate_executor.rb | 0 .../executor/indirect_immediate_executor.rb | 0 .../executor/java_executor_service.rb | 0 .../executor/java_single_thread_executor.rb | 0 .../executor/java_thread_pool_executor.rb | 0 .../executor/ruby_executor_service.rb | 0 .../executor/ruby_single_thread_executor.rb | 0 .../executor/ruby_thread_pool_executor.rb | 0 .../concurrent/executor/safe_task_executor.rb | 0 .../executor/serial_executor_service.rb | 0 .../executor/serialized_execution.rb | 0 .../serialized_execution_delegator.rb | 0 .../executor/simple_executor_service.rb | 0 .../executor/single_thread_executor.rb | 0 .../executor/thread_pool_executor.rb | 0 .../lib/concurrent/executor/timer_set.rb | 28 +- .../lib/concurrent/executors.rb | 0 .../lib/concurrent/future.rb | 0 .../lib/concurrent/hash.rb | 6 +- .../lib/concurrent/immutable_struct.rb | 0 .../lib/concurrent/ivar.rb | 0 .../lib/concurrent/map.rb | 0 .../lib/concurrent/maybe.rb | 0 .../lib/concurrent/mutable_struct.rb | 0 .../lib/concurrent/mvar.rb | 0 .../lib/concurrent/options.rb | 0 .../lib/concurrent/promise.rb | 0 .../lib/concurrent/promises.rb | 487 +++++++++++++----- .../lib/concurrent/re_include.rb | 0 .../lib/concurrent/scheduled_task.rb | 0 .../lib/concurrent/set.rb | 0 .../lib/concurrent/settable_struct.rb | 0 .../lib/concurrent/synchronization.rb | 0 .../abstract_lockable_object.rb | 0 .../synchronization/abstract_object.rb | 0 .../synchronization/abstract_struct.rb | 1 + .../concurrent/synchronization/condition.rb | 2 + .../synchronization/jruby_lockable_object.rb | 0 .../synchronization/jruby_object.rb | 1 + .../lib/concurrent/synchronization/lock.rb | 2 + .../synchronization/lockable_object.rb | 0 .../concurrent/synchronization/mri_object.rb | 1 + .../synchronization/mutex_lockable_object.rb | 0 .../lib/concurrent/synchronization/object.rb | 66 ++- .../synchronization/rbx_lockable_object.rb | 0 .../concurrent/synchronization/rbx_object.rb | 1 + .../synchronization/truffleruby_object.rb | 1 + .../concurrent/synchronization/volatile.rb | 0 .../thread_safe/synchronized_delegator.rb | 0 .../lib/concurrent/thread_safe/util.rb | 0 .../lib/concurrent/thread_safe/util/adder.rb | 0 .../thread_safe/util/cheap_lockable.rb | 0 .../thread_safe/util/data_structures.rb | 0 .../thread_safe/util/power_of_two_tuple.rb | 0 .../concurrent/thread_safe/util/striped64.rb | 0 .../concurrent/thread_safe/util/volatile.rb | 0 .../thread_safe/util/xor_shift_random.rb | 0 .../lib/concurrent/timer_task.rb | 0 .../lib/concurrent/tuple.rb | 0 .../lib/concurrent/tvar.rb | 0 .../lib/concurrent/utility/at_exit.rb | 0 .../lib/concurrent/utility/engine.rb | 0 .../lib/concurrent/utility/monotonic_time.rb | 0 .../utility/native_extension_loader.rb | 0 .../lib/concurrent/utility/native_integer.rb | 0 .../concurrent/utility/processor_counter.rb | 0 .../lib/concurrent/version.rb | 3 + 123 files changed, 454 insertions(+), 177 deletions(-) delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/version.rb rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent-ruby.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/agent.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/array.rb (91%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/async.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atom.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/abstract_thread_local_var.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/atomic_boolean.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/atomic_fixnum.rb (98%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/atomic_markable_reference.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/atomic_reference.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/count_down_latch.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/cyclic_barrier.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/event.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/java_count_down_latch.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/java_thread_local_var.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/mutex_atomic_boolean.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/mutex_atomic_fixnum.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/mutex_count_down_latch.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/mutex_semaphore.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/read_write_lock.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/reentrant_read_write_lock.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/ruby_thread_local_var.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/semaphore.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic/thread_local_var.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic_reference/mutex_atomic.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/atomics.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/copy_on_notify_observer_set.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/copy_on_write_observer_set.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/java_non_concurrent_priority_queue.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/lock_free_stack.rb (99%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/map/atomic_reference_map_backend.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/map/mri_map_backend.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/map/non_concurrent_map_backend.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/map/synchronized_map_backend.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/non_concurrent_priority_queue.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/concern/deprecation.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/concern/dereferenceable.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/concern/logging.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/concern/obligation.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/concern/observable.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/concurrent_ruby.jar (79%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/configuration.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/constants.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/dataflow.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/delay.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/errors.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/exchanger.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/abstract_executor_service.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/cached_thread_pool.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/executor_service.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/fixed_thread_pool.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/immediate_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/indirect_immediate_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/java_executor_service.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/java_single_thread_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/java_thread_pool_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/ruby_executor_service.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/ruby_single_thread_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/ruby_thread_pool_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/safe_task_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/serial_executor_service.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/serialized_execution.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/serialized_execution_delegator.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/simple_executor_service.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/single_thread_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/thread_pool_executor.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executor/timer_set.rb (89%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/executors.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/future.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/hash.rb (89%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/immutable_struct.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/ivar.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/map.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/maybe.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/mutable_struct.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/mvar.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/options.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/promise.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/promises.rb (79%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/re_include.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/scheduled_task.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/set.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/settable_struct.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/abstract_lockable_object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/abstract_object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/abstract_struct.rb (98%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/condition.rb (98%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/jruby_lockable_object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/jruby_object.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/lock.rb (95%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/lockable_object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/mri_object.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/mutex_lockable_object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/object.rb (70%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/rbx_lockable_object.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/rbx_object.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/truffleruby_object.rb (97%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/synchronization/volatile.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/synchronized_delegator.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util/adder.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util/cheap_lockable.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util/data_structures.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util/power_of_two_tuple.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util/striped64.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util/volatile.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/thread_safe/util/xor_shift_random.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/timer_task.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/tuple.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/tvar.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/utility/at_exit.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/utility/engine.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/utility/monotonic_time.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/utility/native_extension_loader.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/utility/native_integer.rb (100%) rename Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/{concurrent-ruby-1.1.4 => concurrent-ruby-1.1.5}/lib/concurrent/utility/processor_counter.rb (100%) create mode 100644 Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/version.rb diff --git a/Library/Homebrew/vendor/bundle/bundler/setup.rb b/Library/Homebrew/vendor/bundle/bundler/setup.rb index 2002778342..f7c37be144 100644 --- a/Library/Homebrew/vendor/bundle/bundler/setup.rb +++ b/Library/Homebrew/vendor/bundle/bundler/setup.rb @@ -3,7 +3,7 @@ require 'rbconfig' ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby' ruby_version = RbConfig::CONFIG["ruby_version"] path = File.expand_path('..', __FILE__) -$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/concurrent-ruby-1.1.4/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/concurrent-ruby-1.1.5/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/i18n-1.6.0/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/minitest-5.11.3/lib" $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/thread_safe-0.3.6/lib" diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/version.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/version.rb deleted file mode 100644 index 4acc1d55ea..0000000000 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/version.rb +++ /dev/null @@ -1,4 +0,0 @@ -module Concurrent - VERSION = '1.1.4' - EDGE_VERSION = '0.4.1' -end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent-ruby.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent-ruby.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent-ruby.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent-ruby.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/agent.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/agent.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/agent.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/agent.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/array.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/array.rb similarity index 91% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/array.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/array.rb index 56931794ba..18e58e5b2f 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/array.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/array.rb @@ -21,8 +21,9 @@ module Concurrent # @!macro internal_implementation_note ArrayImplementation = case when Concurrent.on_cruby? - # Because MRI never runs code in parallel, the existing - # non-thread-safe structures should usually work fine. + # Array is thread-safe in practice because CRuby runs + # threads one at a time and does not do context + # switching during the execution of C functions. ::Array when Concurrent.on_jruby? @@ -63,4 +64,3 @@ module Concurrent end end - diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/async.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/async.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/async.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/async.rb index 9e75ca92e6..8fd4886cdd 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/async.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/async.rb @@ -333,6 +333,13 @@ module Concurrent ivar end + # Check whether the method is responsive + # + # @param [Symbol] method the method being called + def respond_to_missing?(method, include_private = false) + @delegate.respond_to?(method) || super + end + # Perform all enqueued tasks. # # This method must be called from within the executor. It must not be @@ -383,6 +390,13 @@ module Concurrent ivar.wait ivar end + + # Check whether the method is responsive + # + # @param [Symbol] method the method being called + def respond_to_missing?(method, include_private = false) + @delegate.respond_to?(method) || super + end end private_constant :AwaitDelegator diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atom.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atom.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atom.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atom.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/abstract_thread_local_var.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/abstract_thread_local_var.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/abstract_thread_local_var.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/abstract_thread_local_var.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_boolean.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_boolean.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_boolean.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_boolean.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_fixnum.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_fixnum.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_fixnum.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_fixnum.rb index 553aae06e5..c67166d833 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_fixnum.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_fixnum.rb @@ -79,10 +79,10 @@ module Concurrent # @!method value=(value) # @!macro atomic_fixnum_method_value_set # - # @!method increment(delta) + # @!method increment(delta = 1) # @!macro atomic_fixnum_method_increment # - # @!method decrement(delta) + # @!method decrement(delta = 1) # @!macro atomic_fixnum_method_decrement # # @!method compare_and_set(expect, update) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_markable_reference.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_markable_reference.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_markable_reference.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_markable_reference.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_reference.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_reference.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/atomic_reference.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/atomic_reference.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/count_down_latch.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/count_down_latch.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/count_down_latch.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/count_down_latch.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/cyclic_barrier.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/cyclic_barrier.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/cyclic_barrier.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/cyclic_barrier.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/event.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/event.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/event.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/event.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/java_count_down_latch.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/java_count_down_latch.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/java_count_down_latch.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/java_count_down_latch.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/java_thread_local_var.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/java_thread_local_var.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/java_thread_local_var.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/java_thread_local_var.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_atomic_boolean.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_atomic_boolean.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_atomic_boolean.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_atomic_boolean.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_atomic_fixnum.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_atomic_fixnum.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_atomic_fixnum.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_atomic_fixnum.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_count_down_latch.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_count_down_latch.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_count_down_latch.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_count_down_latch.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_semaphore.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_semaphore.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/mutex_semaphore.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/mutex_semaphore.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/read_write_lock.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/read_write_lock.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/read_write_lock.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/read_write_lock.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/reentrant_read_write_lock.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/reentrant_read_write_lock.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/reentrant_read_write_lock.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/reentrant_read_write_lock.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/ruby_thread_local_var.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/ruby_thread_local_var.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/ruby_thread_local_var.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/ruby_thread_local_var.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/semaphore.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/semaphore.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/semaphore.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/semaphore.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/thread_local_var.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/thread_local_var.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic/thread_local_var.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic/thread_local_var.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic_reference/mutex_atomic.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic_reference/mutex_atomic.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic_reference/mutex_atomic.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic_reference/mutex_atomic.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomics.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomics.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/atomics.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/atomics.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/copy_on_notify_observer_set.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/copy_on_notify_observer_set.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/copy_on_notify_observer_set.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/copy_on_notify_observer_set.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/copy_on_write_observer_set.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/copy_on_write_observer_set.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/copy_on_write_observer_set.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/copy_on_write_observer_set.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/java_non_concurrent_priority_queue.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/java_non_concurrent_priority_queue.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/java_non_concurrent_priority_queue.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/java_non_concurrent_priority_queue.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/lock_free_stack.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/lock_free_stack.rb similarity index 99% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/lock_free_stack.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/lock_free_stack.rb index 9996f78495..d003d3cf73 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/lock_free_stack.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/lock_free_stack.rb @@ -53,7 +53,7 @@ module Concurrent # @param [Node] head # @return [true, false] - def empty?(head = self.head) + def empty?(head = head()) head.equal? EMPTY end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/atomic_reference_map_backend.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/atomic_reference_map_backend.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/atomic_reference_map_backend.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/atomic_reference_map_backend.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/mri_map_backend.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/mri_map_backend.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/mri_map_backend.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/mri_map_backend.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/non_concurrent_map_backend.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/non_concurrent_map_backend.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/non_concurrent_map_backend.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/non_concurrent_map_backend.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/synchronized_map_backend.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/synchronized_map_backend.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/map/synchronized_map_backend.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/map/synchronized_map_backend.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/non_concurrent_priority_queue.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/non_concurrent_priority_queue.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/non_concurrent_priority_queue.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/non_concurrent_priority_queue.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/deprecation.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/deprecation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/deprecation.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/deprecation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/dereferenceable.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/dereferenceable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/dereferenceable.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/dereferenceable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/logging.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/logging.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/logging.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/logging.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/obligation.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/obligation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/obligation.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/obligation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/observable.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/observable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concern/observable.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concern/observable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concurrent_ruby.jar b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concurrent_ruby.jar similarity index 79% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/concurrent_ruby.jar rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concurrent_ruby.jar index 76eee54f2d457025f4481991d590abc8e10a9682..bf8261fae791e58b4badb96045cb94e017aead7e 100644 GIT binary patch delta 13454 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 delta 13558 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

b>d zDx~)-s38EIyv?Ed#}nuw=t*%NN`krt zp2c_{jGF!M1U=h-2(Y6=yl2gz{TgIE588k_7W~g2g6askhBh=^-y8V~{NS;N+Jydt zz`+qJMbnXzL731;n2r0a9r%iFix>w-?iAAG85#-RM(NQ=j=B8JEfDb*RD3$OTrbeb z2jmb+1Ti_b&fe8zxHt+V zIbAC5FVS$+?HU2zuAvB)lRsr4astwI*Zq-G{Vyvgx%O44>n{wXJKbuyUj2a+p|^^N z^Ay;U_Ofm?L>91Qd* z^uIMZ+Jx5q-5sDnTnDg4`I2w>z!Q9Y_{I8Pwd}1ZIJj9LLj+P|(az5=X4;}+1m^s7 zzHx`KX!PC{6V+g7>DDS}YBg9Lrwe{~1Z@hqrC`CNrU?RJf?OQ`GmF{YB3N)C*k&Yx z3(5zkK>0<~euEkvj>rA8D}|t|V%DfcTeqI5?-y9{zSsvYkF$&EIK!rvZFw>_S?r5m{`&2M7G!!^ETBm55FQV~(J1&Mwn-HYxzJd`w zjX#UN5YQ3(aOZ1AC&(ZL8g%s(6Pr9n^Zy#{RU(kZMFGR||LL?SF{jEOF{agG^y?6V zqI;Sc(VxDGE&~yL%CQbm@Bh6Sd`8R?LohdkE@|7yRuCiz8hLuJ!K#BX5`50Yrl|=W zL2l?`RQ+k7XjftImK%*=Vf2C(ce>d$8(>&aT@?-Gb7DB(1uDD(D!g_oDtpE#s4`r- zm>Q7>#irf^cZRDSgo%Ri)67Z;11Q826NG9gXjzyUM%CZmxp69-%-Eu}6FKd|+?sCn)R% zL8hlba`qTLR6oV25vBmuG&-QBRS^l`56pB0YMRdpJq=f=C;eZ`e30u^vIdf-g5>(A z$P=A0EMzWV_eHf!v@um1W`q$S_7-^Uoi5*>E*PIt&)o=esy`j%JQb*V&kZBHeH)-c z-gK68;Ez;^^B2obO=VYuY!KrYWu z{{Rxf8H}tFB?}z-D?5+wW@u&7JN@GC2*9lX*?-%k?Z{s|F#>$RBS84kWAhpkoT6w2 r<~13#QuLyGk;}#1oysz>v8@ck%zib diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/configuration.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/configuration.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/configuration.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/configuration.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/constants.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/constants.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/constants.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/constants.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/dataflow.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/dataflow.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/dataflow.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/dataflow.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/delay.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/delay.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/delay.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/delay.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/errors.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/errors.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/errors.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/errors.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/exchanger.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/exchanger.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/exchanger.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/exchanger.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/abstract_executor_service.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/abstract_executor_service.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/abstract_executor_service.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/abstract_executor_service.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/cached_thread_pool.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/cached_thread_pool.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/cached_thread_pool.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/cached_thread_pool.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/executor_service.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/executor_service.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/executor_service.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/executor_service.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/fixed_thread_pool.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/fixed_thread_pool.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/fixed_thread_pool.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/fixed_thread_pool.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/immediate_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/immediate_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/immediate_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/immediate_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/indirect_immediate_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/indirect_immediate_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/indirect_immediate_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/indirect_immediate_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/java_executor_service.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/java_executor_service.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/java_executor_service.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/java_executor_service.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/java_single_thread_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/java_single_thread_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/java_single_thread_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/java_single_thread_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/java_thread_pool_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/java_thread_pool_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/java_thread_pool_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/java_thread_pool_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/ruby_executor_service.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_executor_service.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/ruby_executor_service.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_executor_service.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/ruby_single_thread_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_single_thread_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/ruby_single_thread_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_single_thread_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/ruby_thread_pool_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/ruby_thread_pool_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/ruby_thread_pool_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/safe_task_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/safe_task_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/safe_task_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/safe_task_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/serial_executor_service.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/serial_executor_service.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/serial_executor_service.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/serial_executor_service.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/serialized_execution.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/serialized_execution.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/serialized_execution.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/serialized_execution.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/serialized_execution_delegator.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/serialized_execution_delegator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/serialized_execution_delegator.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/serialized_execution_delegator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/simple_executor_service.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/simple_executor_service.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/simple_executor_service.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/simple_executor_service.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/single_thread_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/single_thread_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/single_thread_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/single_thread_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/thread_pool_executor.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/thread_pool_executor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/thread_pool_executor.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/thread_pool_executor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/timer_set.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/timer_set.rb similarity index 89% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/timer_set.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/timer_set.rb index bd99ef601b..364910152e 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executor/timer_set.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executor/timer_set.rb @@ -48,11 +48,9 @@ module Concurrent def post(delay, *args, &task) raise ArgumentError.new('no block given') unless block_given? return false unless running? - opts = { - executor: @task_executor, - args: args, - timer_set: self - } + opts = { executor: @task_executor, + args: args, + timer_set: self } task = ScheduledTask.execute(delay, opts, &task) # may raise exception task.unscheduled? ? false : task end @@ -74,11 +72,11 @@ module Concurrent # @param [Hash] opts the options to create the object with. # @!visibility private def ns_initialize(opts) - @queue = Collection::NonConcurrentPriorityQueue.new(order: :min) - @task_executor = Options.executor_from_options(opts) || Concurrent.global_io_executor - @timer_executor = SingleThreadExecutor.new - @condition = Event.new - @ruby_pid = $$ # detects if Ruby has forked + @queue = Collection::NonConcurrentPriorityQueue.new(order: :min) + @task_executor = Options.executor_from_options(opts) || Concurrent.global_io_executor + @timer_executor = SingleThreadExecutor.new + @condition = Event.new + @ruby_pid = $$ # detects if Ruby has forked self.auto_terminate = opts.fetch(:auto_terminate, true) end @@ -90,7 +88,7 @@ module Concurrent # # @!visibility private def post_task(task) - synchronize{ ns_post_task(task) } + synchronize { ns_post_task(task) } end # @!visibility private @@ -98,7 +96,7 @@ module Concurrent return false unless ns_running? ns_reset_if_forked if (task.initial_delay) <= 0.01 - task.executor.post{ task.process_task } + task.executor.post { task.process_task } else @queue.push(task) # only post the process method when the queue is empty @@ -116,7 +114,7 @@ module Concurrent # # @!visibility private def remove_task(task) - synchronize{ @queue.delete(task) } + synchronize { @queue.delete(task) } end # `ExecutorService` callback called during shutdown. @@ -148,7 +146,7 @@ module Concurrent task = synchronize { @condition.reset; @queue.peek } break unless task - now = Concurrent.monotonic_time + now = Concurrent.monotonic_time diff = task.schedule_time - now if diff <= 0 @@ -165,7 +163,7 @@ module Concurrent # queue now must have the same pop time, or a closer one, as # when we peeked). task = synchronize { @queue.pop } - task.executor.post{ task.process_task } + task.executor.post { task.process_task } else @condition.wait([diff, 60].min) end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executors.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executors.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/executors.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/executors.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/future.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/future.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/future.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/future.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/hash.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/hash.rb similarity index 89% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/hash.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/hash.rb index 9919079f70..9816ca39a9 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/hash.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/hash.rb @@ -15,8 +15,9 @@ module Concurrent # @!macro internal_implementation_note HashImplementation = case when Concurrent.on_cruby? - # Because MRI never runs code in parallel, the existing - # non-thread-safe structures should usually work fine. + # Hash is thread-safe in practice because CRuby runs + # threads one at a time and does not do context + # switching during the execution of C functions. ::Hash when Concurrent.on_jruby? @@ -56,4 +57,3 @@ module Concurrent end end - diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/immutable_struct.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/immutable_struct.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/immutable_struct.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/immutable_struct.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/ivar.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/ivar.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/ivar.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/ivar.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/map.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/map.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/map.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/map.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/maybe.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/maybe.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/maybe.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/maybe.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/mutable_struct.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/mutable_struct.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/mutable_struct.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/mutable_struct.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/mvar.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/mvar.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/mvar.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/mvar.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/options.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/options.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/options.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/options.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/promise.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/promise.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/promise.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/promise.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/promises.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/promises.rb similarity index 79% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/promises.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/promises.rb index 5c5853ceb4..76af4d5963 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/promises.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/promises.rb @@ -43,6 +43,7 @@ module Concurrent # new. module FactoryMethods extend ReInclude + extend self module Configuration # @return [Executor, :io, :fast] the executor which is used when none is supplied @@ -92,16 +93,14 @@ module Concurrent future_on(default_executor, *args, &task) end - # @!macro promises.future-on1 - # Constructs new Future which will be resolved after block is evaluated on default executor. + # Constructs new Future which will be resolved after block is evaluated on default executor. # Evaluation begins immediately. # - # @!macro promises.future-on2 - # @!macro promises.param.default_executor - # @!macro promises.param.args - # @yield [*args] to the task. - # @!macro promise.param.task-future - # @return [Future] + # @!macro promises.param.default_executor + # @!macro promises.param.args + # @yield [*args] to the task. + # @!macro promise.param.task-future + # @return [Future] def future_on(default_executor, *args, &task) ImmediateEventPromise.new(default_executor).future.then(*args, &task) end @@ -109,6 +108,9 @@ module Concurrent # Creates resolved future with will be either fulfilled with the given value or rejection with # the given reason. # + # @param [true, false] fulfilled + # @param [Object] value + # @param [Object] reason # @!macro promises.param.default_executor # @return [Future] def resolved_future(fulfilled, value, reason, default_executor = self.default_executor) @@ -118,6 +120,7 @@ module Concurrent # Creates resolved future with will be fulfilled with the given value. # # @!macro promises.param.default_executor + # @param [Object] value # @return [Future] def fulfilled_future(value, default_executor = self.default_executor) resolved_future true, value, nil, default_executor @@ -126,6 +129,7 @@ module Concurrent # Creates resolved future with will be rejected with the given reason. # # @!macro promises.param.default_executor + # @param [Object] reason # @return [Future] def rejected_future(reason, default_executor = self.default_executor) resolved_future false, nil, reason, default_executor @@ -146,23 +150,23 @@ module Concurrent # @!macro promises.param.default_executor # @return [Event, Future] # - # @overload create(nil, default_executor = self.default_executor) + # @overload make_future(nil, default_executor = self.default_executor) # @param [nil] nil # @return [Event] resolved event. # - # @overload create(a_future, default_executor = self.default_executor) + # @overload make_future(a_future, default_executor = self.default_executor) # @param [Future] a_future # @return [Future] a future which will be resolved when a_future is. # - # @overload create(an_event, default_executor = self.default_executor) + # @overload make_future(an_event, default_executor = self.default_executor) # @param [Event] an_event # @return [Event] an event which will be resolved when an_event is. # - # @overload create(exception, default_executor = self.default_executor) + # @overload make_future(exception, default_executor = self.default_executor) # @param [Exception] exception # @return [Future] a rejected future with the exception as its reason. # - # @overload create(value, default_executor = self.default_executor) + # @overload make_future(value, default_executor = self.default_executor) # @param [Object] value when none of the above overloads fits # @return [Future] a fulfilled future with the value. def make_future(argument = nil, default_executor = self.default_executor) @@ -180,34 +184,53 @@ module Concurrent end # @!macro promises.shortcut.on - # @return [Future] + # @return [Future, Event] def delay(*args, &task) delay_on default_executor, *args, &task end - # @!macro promises.future-on1 - # The task will be evaluated only after the future is touched, see {AbstractEventFuture#touch} + # Creates new event or future which is resolved only after it is touched, + # see {Concurrent::AbstractEventFuture#touch}. # - # @!macro promises.future-on2 + # @!macro promises.param.default_executor + # @overload delay_on(default_executor, *args, &task) + # If task is provided it returns a {Future} representing the result of the task. + # @!macro promises.param.args + # @yield [*args] to the task. + # @!macro promise.param.task-future + # @return [Future] + # @overload delay_on(default_executor) + # If no task is provided, it returns an {Event} + # @return [Event] def delay_on(default_executor, *args, &task) - DelayPromise.new(default_executor).event.chain(*args, &task) + event = DelayPromise.new(default_executor).event + task ? event.chain(*args, &task) : event end # @!macro promises.shortcut.on - # @return [Future] + # @return [Future, Event] def schedule(intended_time, *args, &task) schedule_on default_executor, intended_time, *args, &task end - # @!macro promises.future-on1 - # The task is planned for execution in intended_time. + # Creates new event or future which is resolved in intended_time. # - # @!macro promises.future-on2 + # @!macro promises.param.default_executor # @!macro promises.param.intended_time # @param [Numeric, Time] intended_time `Numeric` means to run in `intended_time` seconds. # `Time` means to run on `intended_time`. + # @overload schedule_on(default_executor, intended_time, *args, &task) + # If task is provided it returns a {Future} representing the result of the task. + # @!macro promises.param.args + # @yield [*args] to the task. + # @!macro promise.param.task-future + # @return [Future] + # @overload schedule_on(default_executor, intended_time) + # If no task is provided, it returns an {Event} + # @return [Event] def schedule_on(default_executor, intended_time, *args, &task) - ScheduledPromise.new(default_executor, intended_time).event.chain(*args, &task) + event = ScheduledPromise.new(default_executor, intended_time).event + task ? event.chain(*args, &task) : event end # @!macro promises.shortcut.on @@ -259,7 +282,7 @@ module Concurrent # Creates new future which is resolved after first futures_and_or_events is resolved. # Its result equals result of the first resolved future. # @!macro promises.any-touch - # If resolved it does not propagate {AbstractEventFuture#touch}, leaving delayed + # If resolved it does not propagate {Concurrent::AbstractEventFuture#touch}, leaving delayed # futures un-executed if they are not required any more. # @!macro promises.event-conversion # @@ -311,7 +334,7 @@ module Concurrent end module InternalStates - # @private + # @!visibility private class State def resolved? raise NotImplementedError @@ -322,9 +345,7 @@ module Concurrent end end - private_constant :State - - # @private + # @!visibility private class Pending < State def resolved? false @@ -335,9 +356,11 @@ module Concurrent end end - private_constant :Pending + # @!visibility private + class Reserved < Pending + end - # @private + # @!visibility private class ResolvedWithResult < State def resolved? true @@ -368,9 +391,7 @@ module Concurrent end end - private_constant :ResolvedWithResult - - # @private + # @!visibility private class Fulfilled < ResolvedWithResult def initialize(value) @@ -398,18 +419,14 @@ module Concurrent end end - private_constant :Fulfilled - - # @private + # @!visibility private class FulfilledArray < Fulfilled def apply(args, block) block.call(*value, *args) end end - private_constant :FulfilledArray - - # @private + # @!visibility private class Rejected < ResolvedWithResult def initialize(reason) @Reason = reason @@ -436,9 +453,7 @@ module Concurrent end end - private_constant :Rejected - - # @private + # @!visibility private class PartiallyRejected < ResolvedWithResult def initialize(value, reason) super() @@ -467,24 +482,38 @@ module Concurrent end end - private_constant :PartiallyRejected - - PENDING = Pending.new + # @!visibility private + PENDING = Pending.new + # @!visibility private + RESERVED = Reserved.new + # @!visibility private RESOLVED = Fulfilled.new(nil) def RESOLVED.to_sym :resolved end - - private_constant :PENDING, :RESOLVED end private_constant :InternalStates + # @!macro promises.shortcut.event-future + # @see Event#$0 + # @see Future#$0 + + # @!macro promises.param.timeout + # @param [Numeric] timeout the maximum time in second to wait. + + # @!macro promises.warn.blocks + # @note This function potentially blocks current thread until the Future is resolved. + # Be careful it can deadlock. Try to chain instead. + # Common ancestor of {Event} and {Future} classes, many shared methods are defined here. class AbstractEventFuture < Synchronization::Object safe_initialization! - private(*attr_atomic(:internal_state) - [:internal_state]) + attr_atomic(:internal_state) + private :internal_state=, :swap_internal_state, :compare_and_set_internal_state, :update_internal_state + # @!method internal_state + # @!visibility private include InternalStates @@ -501,17 +530,6 @@ module Concurrent private :initialize - # @!macro promises.shortcut.event-future - # @see Event#$0 - # @see Future#$0 - - # @!macro promises.param.timeout - # @param [Numeric] timeout the maximum time in second to wait. - - # @!macro promises.warn.blocks - # @note This function potentially blocks current thread until the Future is resolved. - # Be careful it can deadlock. Try to chain instead. - # Returns its state. # @return [Symbol] # @@ -545,7 +563,7 @@ module Concurrent end # @!macro promises.touches - # Calls {AbstractEventFuture#touch}. + # Calls {Concurrent::AbstractEventFuture#touch}. # @!macro promises.method.wait # Wait (block the Thread) until receiver is {#resolved?}. @@ -553,7 +571,7 @@ module Concurrent # # @!macro promises.warn.blocks # @!macro promises.param.timeout - # @return [Future, true, false] self implies timeout was not used, true implies timeout was used + # @return [self, true, false] self implies timeout was not used, true implies timeout was used # and it was resolved, false implies it was not resolved within timeout. def wait(timeout = nil) result = wait_until_resolved(timeout) @@ -590,7 +608,7 @@ module Concurrent # @yield [fulfilled, value, reason, *args] to the task. # @yieldparam [true, false] fulfilled # @yieldparam [Object] value - # @yieldparam [Exception] reason + # @yieldparam [Object] reason def chain_on(executor, *args, &task) ChainPromise.new_blocked_by1(self, @DefaultExecutor, executor, args, &task).future end @@ -631,7 +649,7 @@ module Concurrent # @yield [fulfilled, value, reason, *args] to the callback. # @yieldparam [true, false] fulfilled # @yieldparam [Object] value - # @yieldparam [Exception] reason + # @yieldparam [Object] reason def on_resolution!(*args, &callback) add_callback :callback_on_resolution, args, callback end @@ -649,7 +667,7 @@ module Concurrent # @yield [fulfilled, value, reason, *args] to the callback. # @yieldparam [true, false] fulfilled # @yieldparam [Object] value - # @yieldparam [Exception] reason + # @yieldparam [Object] reason def on_resolution_using(executor, *args, &callback) add_callback :async_callback_on_resolution, executor, args, callback end @@ -665,8 +683,8 @@ module Concurrent end # @!visibility private - def resolve_with(state, raise_on_reassign = true) - if compare_and_set_internal_state(PENDING, state) + def resolve_with(state, raise_on_reassign = true, reserved = false) + if compare_and_set_internal_state(reserved ? RESERVED : PENDING, state) # go to synchronized block only if there were waiting threads @Lock.synchronize { @Condition.broadcast } unless @Waiters.value == 0 call_callbacks state @@ -719,6 +737,12 @@ module Concurrent add_callback(:callback_clear_delayed_node, node) end + # @!visibility private + def with_hidden_resolvable + # TODO (pitr-ch 10-Dec-2018): documentation, better name if in edge + self + end + private def add_callback(method, *args) @@ -907,9 +931,17 @@ module Concurrent # @!macro promises.warn.blocks # @!macro promises.warn.nil # @!macro promises.param.timeout - # @return [Object, nil] the value of the Future when fulfilled, nil on timeout or rejection. - def value(timeout = nil) - internal_state.value if wait_until_resolved timeout + # @!macro promises.param.timeout_value + # @param [Object] timeout_value a value returned by the method when it times out + # @return [Object, nil, timeout_value] the value of the Future when fulfilled, + # timeout_value on timeout, + # nil on rejection. + def value(timeout = nil, timeout_value = nil) + if wait_until_resolved timeout + internal_state.value + else + timeout_value + end end # Returns reason of future's rejection. @@ -918,9 +950,14 @@ module Concurrent # @!macro promises.warn.blocks # @!macro promises.warn.nil # @!macro promises.param.timeout - # @return [Exception, nil] nil on timeout or fulfillment. - def reason(timeout = nil) - internal_state.reason if wait_until_resolved timeout + # @!macro promises.param.timeout_value + # @return [Object, timeout_value] the reason, or timeout_value on timeout, or nil on fulfillment. + def reason(timeout = nil, timeout_value = nil) + if wait_until_resolved timeout + internal_state.reason + else + timeout_value + end end # Returns triplet fulfilled?, value, reason. @@ -928,7 +965,7 @@ module Concurrent # # @!macro promises.warn.blocks # @!macro promises.param.timeout - # @return [Array(Boolean, Object, Exception), nil] triplet of fulfilled?, value, reason, or nil + # @return [Array(Boolean, Object, Object), nil] triplet of fulfilled?, value, reason, or nil # on timeout. def result(timeout = nil) internal_state.result if wait_until_resolved timeout @@ -942,26 +979,40 @@ module Concurrent end # @!macro promises.method.value - # @return [Object, nil] the value of the Future when fulfilled, nil on timeout. + # @return [Object, nil, timeout_value] the value of the Future when fulfilled, + # or nil on rejection, + # or timeout_value on timeout. # @raise [Exception] {#reason} on rejection - def value!(timeout = nil) - internal_state.value if wait_until_resolved! timeout + def value!(timeout = nil, timeout_value = nil) + if wait_until_resolved! timeout + internal_state.value + else + timeout_value + end end # Allows rejected Future to be risen with `raise` method. + # If the reason is not an exception `Runtime.new(reason)` is returned. + # # @example # raise Promises.rejected_future(StandardError.new("boom")) - # @raise [StandardError] when raising not rejected future + # raise Promises.rejected_future("or just boom") + # @raise [Concurrent::Error] when raising not rejected future # @return [Exception] def exception(*args) raise Concurrent::Error, 'it is not rejected' unless rejected? + raise ArgumentError unless args.size <= 1 reason = Array(internal_state.reason).flatten.compact if reason.size > 1 ex = Concurrent::MultipleErrors.new reason ex.set_backtrace(caller) ex else - ex = reason[0].clone.exception(*args) + ex = if reason[0].respond_to? :exception + reason[0].exception(*args) + else + RuntimeError.new(reason[0]).exception(*args) + end ex.set_backtrace Array(ex.backtrace) + caller ex end @@ -1133,14 +1184,20 @@ module Concurrent # will become reason of the returned future. # # @return [Future] + # @param [#call(value)] run_test + # an object which when called returns either Future to keep running with + # or nil, then the run completes with the value. + # The run_test can be used to extract the Future from deeper structure, + # or to distinguish Future which is a resulting value from a future + # which is suppose to continue running. # @example # body = lambda do |v| # v += 1 # v < 5 ? Promises.future(v, &body) : v # end # Promises.future(0, &body).run.value! # => 5 - def run - RunFuturePromise.new_blocked_by1(self, @DefaultExecutor).future + def run(run_test = method(:run_test)) + RunFuturePromise.new_blocked_by1(self, @DefaultExecutor, run_test).future end # @!visibility private @@ -1163,13 +1220,34 @@ module Concurrent self end + # @return [String] Short string representation. + def to_s + if resolved? + format '%s with %s>', super[0..-2], (fulfilled? ? value : reason).inspect + else + super + end + end + + alias_method :inspect, :to_s + private + def run_test(v) + v if v.is_a?(Future) + end + def rejected_resolution(raise_on_reassign, state) if raise_on_reassign - raise Concurrent::MultipleAssignmentError.new( - "Future can be resolved only once. It's #{result}, trying to set #{state.result}.", - current_result: result, new_result: state.result) + if internal_state == RESERVED + raise Concurrent::MultipleAssignmentError.new( + "Future can be resolved only once. It is already reserved.") + else + raise Concurrent::MultipleAssignmentError.new( + "Future can be resolved only once. It's #{result}, trying to set #{state.result}.", + current_result: result, + new_result: state.result) + end end return false end @@ -1206,15 +1284,15 @@ module Concurrent end - # Marker module of Future, Event resolved manually by user. + # Marker module of Future, Event resolved manually. module Resolvable + include InternalStates end # A Event which can be resolved by user. class ResolvableEvent < Event include Resolvable - # @!macro raise_on_reassign # @raise [MultipleAssignmentError] when already resolved and raise_on_reassign is true. @@ -1227,8 +1305,13 @@ module Concurrent # Makes the event resolved, which triggers all dependent futures. # # @!macro promise.param.raise_on_reassign - def resolve(raise_on_reassign = true) - resolve_with RESOLVED, raise_on_reassign + # @!macro promise.param.reserved + # @param [true, false] reserved + # Set to true if the resolvable is {#reserve}d by you, + # marks resolution of reserved resolvable events and futures explicitly. + # Advanced feature, ignore unless you use {Resolvable#reserve} from edge. + def resolve(raise_on_reassign = true, reserved = false) + resolve_with RESOLVED, raise_on_reassign, reserved end # Creates new event wrapping receiver, effectively hiding the resolve method. @@ -1237,6 +1320,23 @@ module Concurrent def with_hidden_resolvable @with_hidden_resolvable ||= EventWrapperPromise.new_blocked_by1(self, @DefaultExecutor).event end + + # Behaves as {AbstractEventFuture#wait} but has one additional optional argument + # resolve_on_timeout. + # + # @param [true, false] resolve_on_timeout + # If it times out and the argument is true it will also resolve the event. + # @return [self, true, false] + # @see AbstractEventFuture#wait + def wait(timeout = nil, resolve_on_timeout = false) + super(timeout) or if resolve_on_timeout + # if it fails to resolve it was resolved in the meantime + # so return true as if there was no timeout + !resolve(false) + else + false + end + end end # A Future which can be resolved by user. @@ -1246,29 +1346,38 @@ module Concurrent # Makes the future resolved with result of triplet `fulfilled?`, `value`, `reason`, # which triggers all dependent futures. # + # @param [true, false] fulfilled + # @param [Object] value + # @param [Object] reason # @!macro promise.param.raise_on_reassign - def resolve(fulfilled = true, value = nil, reason = nil, raise_on_reassign = true) - resolve_with(fulfilled ? Fulfilled.new(value) : Rejected.new(reason), raise_on_reassign) + # @!macro promise.param.reserved + def resolve(fulfilled = true, value = nil, reason = nil, raise_on_reassign = true, reserved = false) + resolve_with(fulfilled ? Fulfilled.new(value) : Rejected.new(reason), raise_on_reassign, reserved) end # Makes the future fulfilled with `value`, # which triggers all dependent futures. # + # @param [Object] value # @!macro promise.param.raise_on_reassign - def fulfill(value, raise_on_reassign = true) - promise.fulfill(value, raise_on_reassign) + # @!macro promise.param.reserved + def fulfill(value, raise_on_reassign = true, reserved = false) + resolve_with Fulfilled.new(value), raise_on_reassign, reserved end # Makes the future rejected with `reason`, # which triggers all dependent futures. # + # @param [Object] reason # @!macro promise.param.raise_on_reassign - def reject(reason, raise_on_reassign = true) - promise.reject(reason, raise_on_reassign) + # @!macro promise.param.reserved + def reject(reason, raise_on_reassign = true, reserved = false) + resolve_with Rejected.new(reason), raise_on_reassign, reserved end # Evaluates the block and sets its result as future's value fulfilling, if the block raises # an exception the future rejects with it. + # # @yield [*args] to the block. # @yieldreturn [Object] value # @return [self] @@ -1278,6 +1387,7 @@ module Concurrent # Evaluates the block and sets its result as future's value fulfilling, if the block raises # an exception the future rejects with it. + # # @yield [*args] to the block. # @yieldreturn [Object] value # @return [self] @@ -1286,6 +1396,135 @@ module Concurrent promise.evaluate_to(*args, block).wait! end + # @!macro promises.resolvable.resolve_on_timeout + # @param [::Array(true, Object, nil), ::Array(false, nil, Exception), nil] resolve_on_timeout + # If it times out and the argument is not nil it will also resolve the future + # to the provided resolution. + + # Behaves as {AbstractEventFuture#wait} but has one additional optional argument + # resolve_on_timeout. + # + # @!macro promises.resolvable.resolve_on_timeout + # @return [self, true, false] + # @see AbstractEventFuture#wait + def wait(timeout = nil, resolve_on_timeout = nil) + super(timeout) or if resolve_on_timeout + # if it fails to resolve it was resolved in the meantime + # so return true as if there was no timeout + !resolve(*resolve_on_timeout, false) + else + false + end + end + + # Behaves as {Future#wait!} but has one additional optional argument + # resolve_on_timeout. + # + # @!macro promises.resolvable.resolve_on_timeout + # @return [self, true, false] + # @raise [Exception] {#reason} on rejection + # @see Future#wait! + def wait!(timeout = nil, resolve_on_timeout = nil) + super(timeout) or if resolve_on_timeout + if resolve(*resolve_on_timeout, false) + false + else + # if it fails to resolve it was resolved in the meantime + # so return true as if there was no timeout + raise self if rejected? + true + end + else + false + end + end + + # Behaves as {Future#value} but has one additional optional argument + # resolve_on_timeout. + # + # @!macro promises.resolvable.resolve_on_timeout + # @return [Object, timeout_value, nil] + # @see Future#value + def value(timeout = nil, timeout_value = nil, resolve_on_timeout = nil) + if wait_until_resolved timeout + internal_state.value + else + if resolve_on_timeout + unless resolve(*resolve_on_timeout, false) + # if it fails to resolve it was resolved in the meantime + # so return value as if there was no timeout + return internal_state.value + end + end + timeout_value + end + end + + # Behaves as {Future#value!} but has one additional optional argument + # resolve_on_timeout. + # + # @!macro promises.resolvable.resolve_on_timeout + # @return [Object, timeout_value, nil] + # @raise [Exception] {#reason} on rejection + # @see Future#value! + def value!(timeout = nil, timeout_value = nil, resolve_on_timeout = nil) + if wait_until_resolved! timeout + internal_state.value + else + if resolve_on_timeout + unless resolve(*resolve_on_timeout, false) + # if it fails to resolve it was resolved in the meantime + # so return value as if there was no timeout + raise self if rejected? + return internal_state.value + end + end + timeout_value + end + end + + # Behaves as {Future#reason} but has one additional optional argument + # resolve_on_timeout. + # + # @!macro promises.resolvable.resolve_on_timeout + # @return [Exception, timeout_value, nil] + # @see Future#reason + def reason(timeout = nil, timeout_value = nil, resolve_on_timeout = nil) + if wait_until_resolved timeout + internal_state.reason + else + if resolve_on_timeout + unless resolve(*resolve_on_timeout, false) + # if it fails to resolve it was resolved in the meantime + # so return value as if there was no timeout + return internal_state.reason + end + end + timeout_value + end + end + + # Behaves as {Future#result} but has one additional optional argument + # resolve_on_timeout. + # + # @!macro promises.resolvable.resolve_on_timeout + # @return [::Array(Boolean, Object, Exception), nil] + # @see Future#result + def result(timeout = nil, resolve_on_timeout = nil) + if wait_until_resolved timeout + internal_state.result + else + if resolve_on_timeout + unless resolve(*resolve_on_timeout, false) + # if it fails to resolve it was resolved in the meantime + # so return value as if there was no timeout + internal_state.result + end + end + # otherwise returns nil + end + end + # Creates new future wrapping receiver, effectively hiding the resolve method and similar. # # @return [Future] @@ -1358,14 +1597,6 @@ module Concurrent super ResolvableFuture.new(self, default_executor) end - def fulfill(value, raise_on_reassign) - resolve_with Fulfilled.new(value), raise_on_reassign - end - - def reject(reason, raise_on_reassign) - resolve_with Rejected.new(reason), raise_on_reassign - end - public :evaluate_to end @@ -1615,7 +1846,7 @@ module Concurrent value = internal_state.value case value - when Future, Event + when AbstractEventFuture add_delayed_of value value.add_callback_notify_blocked self, nil countdown @@ -1651,12 +1882,10 @@ module Concurrent value = internal_state.value case value - when Future + when AbstractEventFuture add_delayed_of value value.add_callback_notify_blocked self, nil countdown - when Event - evaluate_to(lambda { raise TypeError, 'cannot flatten to Event' }) else evaluate_to(lambda { raise TypeError, "returned value #{value.inspect} is not a Future" }) end @@ -1670,8 +1899,9 @@ module Concurrent private - def initialize(delayed, blockers_count, default_executor) + def initialize(delayed, blockers_count, default_executor, run_test) super delayed, 1, Future.new(self, default_executor) + @RunTest = run_test end def process_on_blocker_resolution(future, index) @@ -1682,11 +1912,12 @@ module Concurrent return 0 end - value = internal_state.value - case value - when Future - add_delayed_of value - value.add_callback_notify_blocked self, nil + value = internal_state.value + continuation_future = @RunTest.call value + + if continuation_future + add_delayed_of continuation_future + continuation_future.add_callback_notify_blocked self, nil else resolve_with internal_state end @@ -1805,23 +2036,6 @@ module Concurrent class AbstractAnyPromise < BlockedPromise end - class AnyResolvedFuturePromise < AbstractAnyPromise - - private - - def initialize(delayed, blockers_count, default_executor) - super delayed, blockers_count, Future.new(self, default_executor) - end - - def resolvable?(countdown, future, index) - true - end - - def on_resolvable(resolved_future, index) - resolve_with resolved_future.internal_state, false - end - end - class AnyResolvedEventPromise < AbstractAnyPromise private @@ -1839,6 +2053,23 @@ module Concurrent end end + class AnyResolvedFuturePromise < AbstractAnyPromise + + private + + def initialize(delayed, blockers_count, default_executor) + super delayed, blockers_count, Future.new(self, default_executor) + end + + def resolvable?(countdown, future, index) + true + end + + def on_resolvable(resolved_future, index) + resolve_with resolved_future.internal_state, false + end + end + class AnyFulfilledFuturePromise < AnyResolvedFuturePromise private diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/re_include.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/re_include.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/re_include.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/re_include.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/scheduled_task.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/scheduled_task.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/scheduled_task.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/scheduled_task.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/set.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/set.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/set.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/set.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/settable_struct.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/settable_struct.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/settable_struct.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/settable_struct.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/abstract_lockable_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_lockable_object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/abstract_lockable_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_lockable_object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/abstract_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/abstract_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/abstract_struct.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_struct.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/abstract_struct.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_struct.rb index 8c4dff4869..d94f657552 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/abstract_struct.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/abstract_struct.rb @@ -152,6 +152,7 @@ module Concurrent end end clazz.class_exec(&block) unless block.nil? + clazz.singleton_class.send :alias_method, :[], :new clazz end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/condition.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/condition.rb similarity index 98% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/condition.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/condition.rb index ac528bc256..f704b81ee6 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/condition.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/condition.rb @@ -1,5 +1,7 @@ module Concurrent module Synchronization + + # @!visibility private # TODO (pitr-ch 04-Dec-2016): should be in edge class Condition < LockableObject safe_initialization! diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/jruby_lockable_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/jruby_lockable_object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/jruby_lockable_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/jruby_lockable_object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/jruby_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/jruby_object.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/jruby_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/jruby_object.rb index b04382f1ca..da91ac50b8 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/jruby_object.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/jruby_object.rb @@ -3,6 +3,7 @@ module Concurrent if Concurrent.on_jruby? && Concurrent.java_extensions_loaded? + # @!visibility private module JRubyAttrVolatile def self.included(base) base.extend(ClassMethods) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/lock.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/lock.rb similarity index 95% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/lock.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/lock.rb index ed865b38b4..0dbad2eb45 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/lock.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/lock.rb @@ -1,5 +1,7 @@ module Concurrent module Synchronization + + # @!visibility private # TODO (pitr-ch 04-Dec-2016): should be in edge class Lock < LockableObject # TODO use JavaReentrantLock on JRuby diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/lockable_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/lockable_object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/lockable_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/lockable_object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/mri_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/mri_object.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/mri_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/mri_object.rb index 74202f53e7..4b1d6c2956 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/mri_object.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/mri_object.rb @@ -1,6 +1,7 @@ module Concurrent module Synchronization + # @!visibility private module MriAttrVolatile def self.included(base) base.extend(ClassMethods) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/mutex_lockable_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/mutex_lockable_object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/mutex_lockable_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/mutex_lockable_object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/object.rb similarity index 70% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/object.rb index 1254427c70..0e62112807 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/object.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/object.rb @@ -27,15 +27,15 @@ module Concurrent # @!method self.attr_volatile(*names) # Creates methods for reading and writing (as `attr_accessor` does) to a instance variable with - # volatile (Java) semantic. The instance variable should be accessed oly through generated methods. + # volatile (Java) semantic. The instance variable should be accessed only through generated methods. # - # @param [Array] names of the instance variables to be volatile - # @return [Array] names of defined method names + # @param [::Array] names of the instance variables to be volatile + # @return [::Array] names of defined method names # Has to be called by children. def initialize super - initialize_volatile_with_cas + __initialize_atomic_fields__ end # By calling this method on a class, it and all its children are marked to be constructed safely. Meaning that @@ -49,10 +49,12 @@ module Concurrent # @AFinalValue = 'value' # published safely, does not have to be synchronized # end # end + # @return [true] def self.safe_initialization! # define only once, and not again in children return if safe_initialization? + # @!visibility private def self.new(*args, &block) object = super(*args, &block) ensure @@ -70,6 +72,8 @@ module Concurrent # For testing purposes, quite slow. Injects assert code to new method which will raise if class instance contains # any instance variables with CamelCase names and isn't {.safe_initialization?}. + # @raise when offend found + # @return [true] def self.ensure_safe_initialization_when_final_fields_are_present Object.class_eval do def self.new(*args, &block) @@ -81,6 +85,7 @@ module Concurrent end end end + true end # Creates methods for reading and writing to a instance variable with @@ -89,13 +94,30 @@ module Concurrent # This method generates following methods: `value`, `value=(new_value) #=> new_value`, # `swap_value(new_value) #=> old_value`, # `compare_and_set_value(expected, value) #=> true || false`, `update_value(&block)`. - # @param [Array] names of the instance variables to be volatile with CAS. - # @return [Array] names of defined method names. + # @param [::Array] names of the instance variables to be volatile with CAS. + # @return [::Array] names of defined method names. + # @!macro attr_atomic + # @!method $1 + # @return [Object] The $1. + # @!method $1=(new_$1) + # Set the $1. + # @return [Object] new_$1. + # @!method swap_$1(new_$1) + # Set the $1 to new_$1 and return the old $1. + # @return [Object] old $1 + # @!method compare_and_set_$1(expected_$1, new_$1) + # Sets the $1 to new_$1 if the current $1 is expected_$1 + # @return [true, false] + # @!method update_$1(&block) + # Updates the $1 using the block. + # @yield [Object] Calculate a new $1 using given (old) $1 + # @yieldparam [Object] old $1 + # @return [Object] new $1 def self.attr_atomic(*names) - @volatile_cas_fields ||= [] - @volatile_cas_fields += names + @__atomic_fields__ ||= [] + @__atomic_fields__ += names safe_initialization! - define_initialize_volatile_with_cas + define_initialize_atomic_fields names.each do |name| ivar = :"@Atomic#{name.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }}" @@ -124,32 +146,36 @@ module Concurrent names.flat_map { |n| [n, :"#{n}=", :"swap_#{n}", :"compare_and_set_#{n}", :"update_#{n}"] } end - # @param [true,false] inherited should inherited volatile with CAS fields be returned? - # @return [Array] Returns defined volatile with CAS fields on this class. - def self.volatile_cas_fields(inherited = true) - @volatile_cas_fields ||= [] - ((superclass.volatile_cas_fields if superclass.respond_to?(:volatile_cas_fields) && inherited) || []) + - @volatile_cas_fields + # @param [true, false] inherited should inherited volatile with CAS fields be returned? + # @return [::Array] Returns defined volatile with CAS fields on this class. + def self.atomic_attributes(inherited = true) + @__atomic_fields__ ||= [] + ((superclass.atomic_attributes if superclass.respond_to?(:atomic_attributes) && inherited) || []) + @__atomic_fields__ + end + + # @return [true, false] is the attribute with name atomic? + def self.atomic_attribute?(name) + atomic_attributes.include? name end private - def self.define_initialize_volatile_with_cas - assignments = @volatile_cas_fields.map do |name| + def self.define_initialize_atomic_fields + assignments = @__atomic_fields__.map do |name| "@Atomic#{name.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }} = Concurrent::AtomicReference.new(nil)" end.join("\n") class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def initialize_volatile_with_cas + def __initialize_atomic_fields__ super #{assignments} end RUBY end - private_class_method :define_initialize_volatile_with_cas + private_class_method :define_initialize_atomic_fields - def initialize_volatile_with_cas + def __initialize_atomic_fields__ end end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/rbx_lockable_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/rbx_lockable_object.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/rbx_lockable_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/rbx_lockable_object.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/rbx_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/rbx_object.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/rbx_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/rbx_object.rb index b9a0e3f901..4b23f2a662 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/rbx_object.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/rbx_object.rb @@ -1,6 +1,7 @@ module Concurrent module Synchronization + # @!visibility private module RbxAttrVolatile def self.included(base) base.extend(ClassMethods) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/truffleruby_object.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/truffleruby_object.rb similarity index 97% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/truffleruby_object.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/truffleruby_object.rb index b25fe2189b..3919c76d21 100644 --- a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/truffleruby_object.rb +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/truffleruby_object.rb @@ -1,6 +1,7 @@ module Concurrent module Synchronization + # @!visibility private module TruffleRubyAttrVolatile def self.included(base) base.extend(ClassMethods) diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/volatile.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/volatile.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/synchronization/volatile.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/synchronization/volatile.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/synchronized_delegator.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/synchronized_delegator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/synchronized_delegator.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/synchronized_delegator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/adder.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/adder.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/adder.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/adder.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/cheap_lockable.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/cheap_lockable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/cheap_lockable.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/cheap_lockable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/data_structures.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/data_structures.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/data_structures.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/data_structures.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/power_of_two_tuple.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/power_of_two_tuple.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/power_of_two_tuple.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/power_of_two_tuple.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/striped64.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/striped64.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/striped64.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/striped64.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/volatile.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/volatile.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/volatile.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/volatile.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/xor_shift_random.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/xor_shift_random.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/thread_safe/util/xor_shift_random.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/thread_safe/util/xor_shift_random.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/timer_task.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/timer_task.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/timer_task.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/timer_task.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/tuple.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/tuple.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/tuple.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/tuple.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/tvar.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/tvar.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/tvar.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/tvar.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/at_exit.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/at_exit.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/at_exit.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/at_exit.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/engine.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/engine.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/engine.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/engine.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/monotonic_time.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/monotonic_time.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/monotonic_time.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/monotonic_time.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/native_extension_loader.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/native_extension_loader.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/native_extension_loader.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/native_extension_loader.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/native_integer.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/native_integer.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/native_integer.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/native_integer.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/processor_counter.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/processor_counter.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.4/lib/concurrent/utility/processor_counter.rb rename to Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/utility/processor_counter.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/version.rb b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/version.rb new file mode 100644 index 0000000000..0f611c51ae --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/version.rb @@ -0,0 +1,3 @@ +module Concurrent + VERSION = '1.1.5' +end From ea92fa608bd10ed78be7f328b6b6e0668922294e Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 11 Mar 2019 12:50:46 +0000 Subject: [PATCH 4/4] Remove, ignore concurrent_ruby.jar --- .gitignore | 1 + .../lib/concurrent/concurrent_ruby.jar | Bin 137051 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concurrent_ruby.jar diff --git a/.gitignore b/.gitignore index d283d3a994..c4f43f07bd 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,7 @@ **/vendor/bundle/ruby/*/gems/concurrent-ruby-*/lib/synchronization/ **/vendor/bundle/ruby/*/gems/concurrent-ruby-*/lib/thread_safe/ **/vendor/bundle/ruby/*/gems/concurrent-ruby-*/lib/utility/ +**/vendor/bundle/ruby/*/gems/concurrent-ruby-*/lib/*/*.jar **/vendor/bundle/ruby/*/gems/i18n-*/lib/i18n/tests* **/vendor/bundle/ruby/*/gems/thread_safe-*/lib/thread_safe/util diff --git a/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concurrent_ruby.jar b/Library/Homebrew/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.1.5/lib/concurrent/concurrent_ruby.jar deleted file mode 100644 index bf8261fae791e58b4badb96045cb94e017aead7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137051 zcmcG#bChKLwk4XCwr$(CtxB7fwrxe)wzJZ^;_+YtAJF84yrZAV^3^pm`N5d7%Ht2MP!jNKQ;eh)zmgoZ({}2nYm7K?VZy z&k5jv9#i3VO@t-%#3CT-|iz%zn%ZcC1O-{(l(9zGq$ z*zfOuJ;mI=yaLYeUq$R}ja(cZO>CW&T)ufIn>e~!7@5!;SsOYzg(&NOMG->fTd1*V z2~mRajZ{Ud3k?7u;Fom{>BhA0X2s?b3dmx0lIW>U2CTmR+aK2a#)Nrt9$^P&G^y)OZ||$OV*oWkC9(Ymr35fm7@Ch zL?T^lE61}q>16^>KPh>w@EBVe%!K8MiwBG#a0VefErT}|)qI__L%&%@!IIEmN;(w; zUqn4a)$C$dvp5IC^TwO{NJdO(9(IK}=MCn(Q(EYccHhBq+(YN&4b*zXmrEqiB{Pr#*6IqLIj)smNq)h*Cu4JVRX%HqvzB3!Es;VdL zTOp(}44ua&YDvY?MQBxM{xMr@t8w-KR+?A!S5nI7FTP2f8xfL^ec;TgiDOw~vfBcB z+dvojaYD!_@Z>CEhQoc8L0k~`uw_1FMSR9#7%Moi;q|uA0B==lMHrrL#?%}F#Dt%L zf=)9Dnlx%n7Hu{tuL!o;q87aj5PB`zTAu+K3Yu$3)db_c(no3qwN5>Bt#nMr^v>q3 zobgDCd!y$uhb|5zQ3^UL#df^+wOc>0c&RTmZUx+R!AId|I+9IM>T zPjkAiZX>*Yd}P}_vQqEin2f>!uSF>JKWr1XBaIOcOvjOSz#b^>+3uF5Z1^z_++7bp z#KyexEdva_ILQI~0^jF*;gKJ(%pV?DzBQKl97e}AiDtyh+wunS#S1kMrJn~_kxIn> zg4WF^b(l|AAFO6?$wBhN4P%&p(TF7uI3;!EdW&Rhd4plX+Yh6bmL?Be9R6modKo?W0Sb`-7eyz_O&Zw6ooQn8J z=7)mz^(P>kZYEapnH4;CWKL&EAKQ4lr}5{jERG+n4D!ZiqUF?Zu01qJH{2Jbwy1!; z6|S3#EBz5;Fv?zxTvdAwH`QpJ`8n&;6ga06Q8RVNe>NrHt`wN!Z}<4ay0f)o*1@(^uyHNkhiT-Xnf zhVUR*eidHJ(SBe+1_D6^pkDDwwHgu;dAeANQ{U8ldh*sDQH0VzH9RtwyimPBl+`C><=|9Z{kL(D10Pk}0N0S6>V_G`M ze>@D$#@;*V^!jJPkAIJxXD>3~l%EJ|j2d=;x*j`A^Tv)P0YJU5Vhx~ftJ{-B40D#; z25kPy4~#{f9IV4xK{W?vlE_`c+ZsOymH=3r(eqs&va~G7Z{J0M@nw(Ul$dFp1u$tz zu-tnt|3D3sjfr}Cc!FAlZS$b%GH6|UC_1ui;KpdF>A=m-c5(SC2zw`)YKXN>6=3Wr zf_c`|V7zT*S-p{-feiV$&b7bJZ>;eu=}T0|gQ7KDL`Ls}m0_{DXUwPx{xs+!vEta( ze00{*IlY*|A`^v{@*Q@?pcH?io^Oi9dID{=p)YbcGM7 zDC>|TdGj?qu9z;a@kVZH(y8)+;Z%w1^b~DTERvdEAZDE z*^&~C5Y*e&Y`1#P9wM}@#e+2%aaZdqXFya`Ay>=BNmFL!d`bN{4QfO$yC1t6?P1uU zA(B>6Tw276z2Ff3g=!tb8``1Dskstk#W(mBRn`Kj5Te{;2a!BqCn4~*Qg@sYl{5`P z25Q<>Y9({Ex-c>{cpWtS6x2giTBDjkZQ!j#((I-x>+N`dQ}5Ky9p@KogcR}uc#V{+ zXOHvhzzyoFT_ZHN+i=0`B61tcWu5kGH8uStG3r^3M)2g$Zc5G85wG7Uy}oh`>9x^-c^aR5Q=u)v5Gk^!cqeN~)#i6V;W;41?IjW9v0u*%ru}MeklVh+ma*Iw-rD zYmG%ie93Xw8o2e9RKdC#R!!yIO3S8{nW$zz9N|4u#e%yzrFiDD7aGVdrXO+I(^1Sf z(necPFqd(86z2w4ipCD-KU|p=jNZmx7n(Ruat@skik_8hR$FD4)+Xw06v;Sy5duMb zsHq*q)i`pojeot7XakL423y0t`(!t8v^FFZ&Tr1YqV5wBfJF=9qP_ElLcW@Fg^6TM zfLH|oN^X}ZHTMl3PoaRUBBl*ZP8a}L1qk6DD+m81`8XFM1(B$7CMCIs#BJgqnV>9x zR&7{=+4#C^!eAC?)cOKNJXDCZ!+AzfaT^QOC|lSsHg009hrAAgP)3-4-W05s-u zJh)>enj^&KSZWr^FE4|-k9CgLsY(8-h+*g8_$_HmNu}dF0slRgQqPDW8c#!U4ud=>kwHVEWpv%pptTAPq-xEGsd2HGPp;AR!GiT zTPoO3q>>~d46*O0ixm(JQVMRC%6alzNHX5w(>-^$D>MA2aa@OjLoB91VV=Nu`<~q+ zKdJGaehY885MPmapC3j$(X%X~qf0D{RPG}ums>p=2#U^mEWJKK<%#>8?~rV6(AjBg} zg_^)ta&CdYUX^dbxeSrFad_btpkpm z_vTQ2q!<6yK|t?-lV+O+(rVO#=x|w#)4<7wE!Do+Sc8xHM#u-M&p29^;JZ!LSWr^^a8}X5_DErLJ_7$SH z4ou(~OCd!SF6c+W9M(cUs3i)bfM`E261TBE2HhyCu!2ZjzU?Z542s=qKD|%i+wjzP z5-v|!(CxYlJ`#TVY)E{=W>l3}rY6^@v&WgVmzcHK@4}%hHvvaZ#oA~bTnu;PeQcWs zW~ukc)c=t5NG{8ugTFl+bOt>J~Lp z3%9v{xe#lQSScC|CKMGJ8jL{5FfUoK(A~UBSgQ*7H1xiC#b6|t^k(FLD~vL8!-<3& zes-LmOuyGPoqm6QdBpJ-+gxOd@`g_2E@8~>myMe_<&1O^;;b=L8_0qOxwnAEU`1uq zF*eAAEo7_tk%l*ca$It7n^MV4no2uzXU8-MGb8~Uj@CkjC2pBQ!qJ`$P(kn*D2cG` z=)}s$bPU-?QWV;1SYo6|)UaLoSoY z#>quu)Mm#K4}`*gzSkkjytPjO&2|K}nxsAA{dq>ErOs*`Z-;mN#9Gv6q$yL02@_){?RDO?()P8pGs-tqaZK4*Z5UtO~E1C%l^~k0#KwYjSbiX!~ zR&~aXGsrH<2l@r_q?@hhIR;z{FyAJSqURGo>JjJfEA3yy`ww>A2Bi`WKWb&2iv^55 z$pGV@UDR+3c{6Z~Q4opws8HGBGFS*ibl~?i>xuw(ekkGk4djKK7Mfy%$ zMS(pW*MGLtY$}W{$m9QkH3A;pMSkuu&P2?hyj*6P=Z{S8`{hr7TU(S{;Qg&-m;csP zS^wLv`pJk_!BBhvY{kFx__G>rqCBBCXLQg!l1}#N;Wdu?*l$aDv zV9WzR6(dN(x@IG3OEIOiyPi-~|x58OZ_uE30S9V0x?PFA%VX28&FiC*Jazt?f63vS0-+S*pp2!7zVR)6)k)UX;U~x7%6__rWqagP4iXbwwqF`m z0YEl2?$G@UH2>~2Z#A=I_B!rBm)JIMRkiqD>@PVJ9U-;80)^Tl1FWPK&}t_E@k6w4 zXTKJ06NuiYyM)ho$xQVKZ=oBqvb_Svgvu?An*}|h8*s8>=UieOp&YWz6tH9&ds#uU z23U{8s?A7FNk47l-~Y;0FZFwRJb&Yw3*zs@%iq-?{!%G&hW5gSMph=a#{aL%lC})+ zZ|)hEu`=c8px|=`sj{z97ontLT+Aarr7~UV8(vPwbR+px<%0tI*>s#Gn3Xt(sY~#T>BE#2|?p`d&Z6ll|=q!V>ssqPaF((6d{`l}wh$ zO{@Pg5_U`m4^usBJdV-{ec1ASFRkNAn5}%CY18?h?ql@KkYfDNS)$xj?%A!~(2xua z1`3c+vC&+SjDty%0dA*4eW>!bJ#d2K-nZ zf2))uaM|@D95pgowztTksas9x>Ak`S`w+z&s&X1R-T>^FN4rHo@!^zWF=l__^Iw8= zzn4bJ{{OfBApSS;`rp{}UoQVg^{`mg=Ieq2s_zwe1&$bCA7&Rv%RVWU8I?62(Ify8 z%QE;mdDAuZGRCpvA*2<-mwb=lnSu3-?7PAHMJ#g;yzoAzpVh4I}@{{5oZt*?^4`^f~iVSnW5|esEB812jJ3k8ePP1?tVgTDfXiM zNP;?PqhBk`uIt-r#1GuBA^T3FjEe=1UHdS4)VRrr#As^92C^2ln4W6tT)zdSv&fD^-z)^=GuDp}FKSF(;DWo$7e{*pTOjm-V z`p4-&BfyM1#|U89N=L+fRgjD8$@Ue?17Ph`$TrD5sZ+j&t;aa2FNY$+fV5bkU_Cko zXA3ddSGzKv{n_z;7sT%wz5e9FjM1a$Hcj~Lv|45_W!bVnK6BnsgG=B04Pi##of$R} z0|yF!?uir5kvn0{+FHe**rN$)tm{GQ>-<`%wu(z;^>DnPL>AKseDCBf29f3tB}NrhL@#~S;kHqc&?u098u?D=46(4g{AI?gxhMMvR992CrmJfnZoPWeE;2L3zq| zyg_hpkVg0buF(Rkdoa+{tGwgT{5BJaK!_?NYf|#vv*+ri{kxZI&#&iaC_#aeA9Mb} zS?xzjD)~gk1rY5KdJkowZL|KKIx38L$Oa01WMHXiIwqxl)*5qJs;n4TF=i3+Li+aa zoAp=E%@irE{L}=xM&@yx4d!0&Wh1kiUp)M__r&?T;E5u+?etpb^uR=5r<9){xowif z;hf?(Jiu+{o7)nbVONgm2PB7S>CX;#9`Hgpwyk$FaL=@9S%^Okx*bVq0lJVeCfy|f+_PSq+FCA$c40zd{Cu(6{8GtufZ!f8-3o0pB z0Vh1nql!#d8?gG+?i*(s=sMr+?Bjl%?aYwFy5*RQgP4hYa_Fk|1E?6;v>)&iV_`hJ zDX7)I#zrN^culfb70_JtvpyY1dcbio7VII$Segqr03hKl&4=Wqn*oYNXq)ql0Eh7& zz((3EV>lI{x_s4wGazx1{f*|qTtLM52NPB6fc+Ukth5lo(A}>RQ_JmC0I<-(N;p8Y z-g)Tdtu{H8f_sJh1#ptgZR>RM;dNW754Xf&NJ(x7)zsVN^@Ecb?`=b;0BWUCQ-lLI zeG)Q~2!BIlf&s?%sDaEjg3FMZ_tmbfG)JV$9%LK!MFh~zw}LJ*vn>sc_mHt5I7fmS zKKcP7sRRR_kddI5MTA|&DPDTeC|v+K_4l;K5Cu$e48+fRwP}@r}qnBMFG=7$!;u<+`cRURIdQ9 z#y&!A1yPTrhY0KvT7H3m4VoL(xms%4uQA_+j;@D9_#QHPRBqqJG)NueHi3zqyj`G> zU#bxH@v>Q=pA*OatiMe#MI#J(N&Zo86ZQpXcb7@cjql2)vP3mg-hq6CWD z0zFjDN{^EZ+-K7vIJ0?5Nh%2wz^rE2NBEg?-QItT4_-YMU)RS>(olUyFV0cAH0Sy7a_^P1|gHY4hm2Y%q zqNJ0%4~{Cn%M3}K;XBZFC?v@HD!Dg=WX0fM&d&vtaAVJwk^}~EYuP8lYmYF_R@tp=sZXB!D0rNNd^@+Cz3b1^8)9M|`ruGE?`NxAnQam$SDrTw z8*!aIiBwu`OE0KBB(Y%P-EJu?%@S#%1?!}`gMj7Zp{E2?XD=bi&vnQ_h{Y<97G%H^ zO8H<&o{M^F1I!zDDf46IsKcp)rSPSl>4V4;CQ7A?Qjny*1)urOu(T|yiJ&?Q(lczQ z?!Y{hQpyIA*Jz27-T`3=G^Kh%Q`*6aG`q@Wv7Eg($XW5^k1??2z^T|$yKL(>;1m`v zaC`cP9D{SibMk&F4q5x0zhoRfzQa{nTD*WDWrUiG+9KDmSaouTrAE~8&%J;(Nnz8> zZrebUMKyd$h0lUH^ca)`%tdj+FO(-|v7%InJgh0i(u6ISGDPk^;r!vy$ZK{?>fh*e z`@fA&)_;gAN z6T*kT-!29wiX348wh!Yl21?IZ>6>iV7c%s@5~rVIIZaQMK0GYB-JL!VyR4>KbAVu- z1jjSwKNL#P9`OaX9F%JTpq8b|ScGh#(Z>Zw0!`1@$j@47zD=DD1FO51puBj3C!jxv zxASw5cxB;kSq#7)&LY!1Lf{2Ea!zPB!?j6iY>8NJetR5@gQvhaUi;&fE^r$2sL_z# zzN0r!ZiC&8Ic2YX(*$!SqgX8aJ+u43exn1Um0aSLd!llb2cR5YtvqoO4Xy2N1pD>d zhD);r{s*S(JG=;|GPQjK7mYRl4~FA5r;SnVA`A9$lZyTuO0|)%+ZZVn);?N}ZRxou zCF<7>j|R8k4zQP8vBE`?AmTzeuvD!@{`2g}6Vo^da9hk51s_4Z;BwxD5gC*e5zTuq zF|f>ZCEl5PB6xP0$tK$_;Gv;yIWHd98GF-6Q|7zY4?86lLaUfyCCAd;Mt4+16K=J> zPY)BEWt)l37Rfq>7-p>;>eS|~Q4Vl;t2Krct`=biEdY60g?hH4ctv}$0n!r6PweXb z41k4>*{MxfHXw*o)Tp6LJT}K9tdb!y5C`_;qh1BN9@c2XXlS-=?49Z1-4LkEIC7Kf z&dWrE6L#W}+~#ud<7vA*8#j8!oRS;?scE!Jn+;b);=;`-oP2Y-37Z>e%venW_I4Fr zJ~(1mjY$2tq?JJy0P#s{6zyb=Zrhtl+%v)0dbDhGx}!C+N7)6&rtknMM(oJ@C4n_R zpeVig$ug{39+yxB2sq5y#Y8IV4$?!s&8deeeLYKkO-EJd4_@A_dIg09s?8=8A#zA?+&y9YcAVFOY$X zt7?ByariESQ*L4LhJ~axauy+rSaY!B@rcZTW#mQtf?wt1teQ`614$Nz@+DO-3-*xe zH$Lki94-oVIk?tDDu2#Hi1SR7tP}SL1@3VC!KbhVmMHCSeCGcxKL4)G@Gt4xe`M@ns@v?iaLW3jM+>0-|;+6c;#ik)K5-zc%LnNMn5G^yv2D%rXK ztZg;#DSSZ^6B87RfY?T>T6ZjhQ>CO9<5Ia11mor8z3Bx(t^55ZENgP?I1N(Dmo+}u zQ#>C#x7|N%2s{qD-@ecyJ$j7xosfEO2hifC+<-w?Z~DzO+w$$^4Kdt~BSGmO$JR(b zmxD0JaGPIh&|f+3+HR8U>3v+e7_h|LH={(YpY-~0p7pNWxa4#Q5ZvDg(*JbwqsBnE z8|QdF$ZUH?e?s80$40n6-Qazd=g03WM8-e(aIo#3;G`h)o(XXD&Na)4yD0)mJ|00J zeV_f(@^VW8CE#ih{&I`TAz&CNa5OjL{=mvHb92(L`JR=jZ+|ai>pL{%^x}@saCjj0 zo{_mD`K-&|`OL@RXTKZ!jB@Rn9`G?)*u&`Omwdw!&@Z=fV8f@KbfraB`xOoX%vhhZ z@_aiEIl5dizyjy|oR0@P<5#!1e#6Yd?vrP;M`!o3+Lt{P${X?ixisXMCd&NQ3^_Md zQpUPZ*#Wf~aKEmRjZPOHn;HztTTkp?JQ?TjJlL7Mk1oE~!*q?cGK3v6XXqO1h+)oc zAo2Eu)jupbk5|IET09w#w{ey*81$>#yTY5Ir5h8UtIbq+QaKfDkADK^9MZ0WiPo}?ohI}FGBq_gwlt^}6 zYVEc*d!dh@M3n_Cu~Mu-jxFz7&mm8CpZmt=0s&&_CL0+%CYJ^0mHaD$rzn_bb1K{O z5NJo~dt%ra?)$ zr6a5eDuwnf9oxAAY=={*P!gsP6GHu5CLpnVuof)bMGZ4jNeKp=^jO%n(JWmr+HaeK zst1x@5A4)?Xc5=Iv7Z8MoDk>?V(q^os+*Ntp=flCEj2ryAP>*aO&sLZgK(!qnrO<0 zLE(!MKWW`ZH{t8ut~CcPj1_?{Vn*JzI`l0f6C6P!q!L++;j=mnH|eRTn%5ObYwb`w zQ(+BiwbkX|$*dB*yJVJlRQy^B&VWaz$qr5=`8Cx$M5OcdgK-Tcy)2YgH^~T zABDanKVB<)y{i~j&Lp+%?UHs%Zws6M7^N&jS!G8b{j8qb_l-^%Durk=j|z114aL5v z*~{Cx8O+MVR$BACn+hm?i*Y*53re;`nDwVj;bFm``Kk(>js87=3G4M#R=I!YthzuP zS(mMybe!^Wz0bZg@;RrsJofY>Z@qd@r07?_vFA?+;w`=dEPKEVELE{*&~gcl=gel3 z#r{fNZej;|0kW8ZDRw(uxQjgSM)R8%@01JbvlTE=gNfq8?1YojBdoH>*)kvDE5R0dDo4^IxT9c{}&%=JnFG4b853C#MZ?S0 zGo=ouBR!qxv@fybXX0E8d_etSf~p5uxj6s(SFD-?ec*=9cy~(9%!s-*sf_|d*_D1p zI>cmq@!_6Za4K#n&La5aTk;U2z@@Yf8IwkX@1()B^`h)cjPJXddf1^@>&p}ViV)s#yN;>SrP<9EajMUgor4`E#DO}jNiDif}Ky7a+ohzLeLb66a zD*v)Q(7hzoS4Qa)LrfGOONA{EQGx*a&9X~2Kw2({ym4lRopoMRl6tGKy)Be%>_&CYp-UfWk2J)d5Lrlz>;!Txr8TS@x3O<>(#5t^_viO{+WCim(vo^^> zGUa!MIZli=X8KKU<8`R>M^t2^W0&uXFr5lEijd7A;v$AYz59w3BGL84%)pcl|xt0#>bTF<0hlPYHGa1O`1<$i(HG`mvY7*Zk2$?8~T|FuN< zVMQ8udc$IMQN_Rq_Ioi3DC)e6rVODi0scj}#)pT?;ljCRIr5+mT>bTgM{cHwbJ=V5tww~W2D6|xE6AF*<9V0A)?$~WXBNdta8~=p zIXHF67WEk^{W8=05Q9uud;#BgS)=sl&hX{nz%tvH{FkTqZkj(I5#S4-r$)vCQkBzQ zkPk8+;oc-^u2Ov~y7ND?o2_N>8EU^peFWae2TcK4rvb#RLweai=AiBJuP@D|y=5qm zFyfd>u(OXD*oUjqzCZ}jntMY{xkFJ!zSegT!sqXj)@w~1<4XLTORU8rc~d;t#J8mI z_ap3xP{4$uK0fy=@_3P!s~=PRq+&f(^+ z&-gE@Gm?zNw=B3CH~av-L+H!#8GIx>6tQoW7vhh4PmI&n9Z|gTcOXP~C$J;WH4z2A zA;f56JrUzSR|xc!?H3O^`L@a~1(_p+-vovsrC@>6RZNTj4muD=zhXga|M;!n0@YDn zX*IH7Bm5(XlHAu?!o1%2evcz}nm<8d4t2F`OIX@wP_{j1&6!EQ9i5zJZXMMV5s9-a zm-d^Jq``9eVRG{r;wyS17lwZHQQ>cKWht$&^$UOzi$Z=zNQ%f@H}q)~QYHFFyMu-3WS=~YmCG=d zl%z*PPjq-94NXNQHC5(9jFU&h61WPRi`taPsR%|u?Z*X%Vi~| zSo+;!E{-{^@J6MKES4oknt9=QVFt$5Gs0@_u@AOZ$zw|;T^Ol6l&4gbYj3pT+Ma+* zWctLs1^rk~5ocb_ns}^qH7qhiBPbV}qHXbCvMYRPvP#oa{Zx}yHr|+EDeLe9YRSd} zjW@r*sjxK77=ywpzxx4*DX=3Zg}pgMlU(s`_6X%35#7kSQcX}$(saP)GIOJ|lgl`q zz=ZVE!Ed0!I}=K(rGadTIFJ3*1a2<5ci1{s@tbnXTOGxsTN_^gz^CE1bZ^*}( zP-ZyYMon^?OHQZ6siZX4QXx>QZP0FRyki`aG-{+?BD-n;He6oxgu0eD>byRC0^r=} zMXG>2uKk*pC{n|jZYg$*yHqPFKl(DR_8s8RTO@dmvn^K6;us$~DkdL$N_uMn(YI`L8cU+E=Eo+SB79!zo0p!=m+R)tzKSy3bO{Y1btf3p42R|=iBFS+4L zoSXgXMxgCH7Ssqb1|JUEKE+F^+FckuLo!?*`@Fowrb>SNj~IuCzy9iJ#&p&exBec+ zDkb~7I^*BXEBs4J^v_J`ADL0Iir=4Z7as!mdNObWA*XKyp*0~*UIDY{$RH>l?H5wT zPeR?dtf4#U_UYacrNnsieTW+oEIS?pPBUQL<+trizLQP2Ya72`A0H^a#LFtAjMcj_ z5m2(!trg#(7oZ>Pb0Z2N&SqH(zo9=FPlm9Q3@FTnIAGl~qZ`vQKXk5Fr^vHU6|yb7 z4u(wS*+BOF>aVEttpiYT;-?p{SJ|Nn6KQSEeRdS#vqL=GXyw16| zitwa8#{@hl*W^^gAsD5Sx$*nF7p&5D0~ZuJZeL4zDB0C@23aa^!jJT#jnwu*Z1Q9u zjQ+((qeud<7z%3UD;7$c6tCfmD|gkMeTM8flhQLnu5q2Hrq#5i1##g(U{(c;cv~9=(_hIqdf@9b%KaP;& zfn$QwkjxxixF7t9)U1uJz&l7s*6n49j~dwF-DknF+Dln;EQ zcOb)++iD_j%USeGh}tO$3ENECLGNhNaJNSq%;;5%#JSB);hUz1@*Qi%`i^!E$UO=zFm>3j0el2K(sUh*!HX7AAn|;*@pn#4DG;029JAF%?rA9)MHrmwcG||{(lKHntC>(E*;c%auROAkSsLVJ z9^<;Lopx$cnlY6ouBwL^l~7`u<}5hqYWgzSHJ!uBTIqaAk2-t>YYspQY|^7ga)#Ve zbt!6nANFWRR3 zTXHJzzn4E^FNeXiPKDkjZ8mhH1%DW;4AC;;THRBqL1rfJ2kkcD_MMM^Fse)=`TV3~ zh%*t7vS_sut;Sy&caV$3+k-c>YsafGse+VBZa_Bkk7Ap9Xnnd!FlHDyTeS$mHKu%L z$l$-HN)@FbnzYyj9ku`!*#QS(NlRAT!K5^h6`AVgW-mHQ3D{^g%8QY+YzhFs!d^{? zdAg|r*p$27)QiR`D{3#y*;aDL9F^77h9!jb<-r+R<%!cZZMy2$AtZqy&GMF;DKlMS z5)8t7^~VvgqFhGs+{x#9fxKWP#MEMygdRK9Q#w3Ks3Gb~1L^{PZ31yrSz&IR_B>sP5(~QV38&qh>D(gE|Nh1vxEsJx`uF})X>?1w>p%=VAm9OlT~U+?})5O zMJhx+nL=3?lSxh^Hh?-_g&$km*9%vL54>EM@F7hMH(UJzY?#`Q=n0qG<|VhZ8KVrN zOYK+{r`fzmB5Om9PL3%4dnQ0;d_u)T9&y=ZzMof}@dTx*J7w2+a*nn;@Eyk~D5n1N zFM7yy<&<0aT|2(`+uHHpPI>)ny!aPQWb=E%7}2-6vFj%%sMeuaQAA!dA?~6Z5xI>r zvShxLhtv&B+jiCCsLP6V4Y+SgMv^FspTEF3r`u400`l6#<;4{L{p7{u#jp3rO9+2n zy&ssuT+9=wY;k|RdOY=_RLqvjg3wWWJd1E(pEW7N;}XX|2A ze6~>FM#_-Y(m6|(x99_hYBoLY8Z>rER!7-NFQp1)Dl#EmmeGdQ#Hs_lYL~BNW$XQJ znVXf%v2B+aykFN-7?!X_ytmM*KT`||GkFZcQi=w!05sLRJeQ`~6?_#}@#N=H6NZ=* zA46J&7MHpPC8=MnKjz$u%`G&(Nmg!bbJcXyY>Xe{*!D6z9f_i~RMWb&d&}a0&tsBA zCZM`%Q_*|FO@PZ*VrqzO_fjfh=U}@7PGH5f+2uMQ_@G7hDY`wfV_#@+u=OzA!_{G5 za1yJSD>oOz3`se^pJ^62=)nLcmzcrY*uB`#W`~oHO`B3p0otF-0o((7*JYL)^A-?g zdZTLe-j}cAXwglZ#rrOGi(q5mPoIM<@m;Vm9nlI#zbemUbw`LS^*MEzG<>q2$bQA* zchP4!6R-`qbEE|#&bN49Sv!3OIcpi7=mjqxjp7-kTDlvB=r&)KX?Z0= zV=z#OrWBHY?CQ6~*#e!fTtsrP|8aWS;TZ{ zKpqKtjQ7{VjdJisEWqj)R!QOx{{Eq@JOtq+<0 zDaEY(8EYO={ZlDX(~HB9PHlX8XgR&V^)@~KcCmdekpnVT|p+$MI|_god&Vu6oo zxSw$a#d&CXa8k3yR0$mNYVp4n&h~i_U!stosG~JdbwZZl6^(OH0;!alethfJ_8G|w zE3$sk)7Y0G)Vm^O%DAjT9ubYePR;QoVQ=QY6pl4lNSEF3QN_ByRXBe;67rvc>3_EA ze+is_T>po@sZzC3#!*G}MNfbWhaqYN16c&GA|vgkek=|N1Pd01ZA2E$C*HcKHZ*LA ze47vK8T>6tBHI^} zPr!n-8I}*yps3TUgG#Vx8fAKKtzi&2gvmdQoJrTPhmNDRT00KFP4q<;!M8%H9Et0_ zq~A2m%oSG%+hzH}G}JHw$Y`lb@OSyA=6E(wKL zYy`Ao>dOt@V#*nCV68bN((#P#fzml5V)nCS>!UCj7nv~v7s<${#t(6hsejIXGf)&p z4g#)jR2N)5qk{r*=L?)6^A50qQoqd!#@kH3A#){pmhQ*Dl2TahBX%V#oh3cBW)G+# zOR6OZAld^W0iNbq&hjq~7P){vJ>iO@eydKUKBpp6P0XN_5ESxE)cZi);)557rOw@J zn3!o7(Q2aI+WVN_GCKvOFDQ~c(ZK6`2sA*RwZJOzpKBJO5O*omIs<)RQ-Rk@fT|lL zZfBVSF8r=29d31oV96ncJmO7b$BdYRe(OnJrRA0 zsLtGM@OvFH?gzvI&(v}`Gc$+1xIEHwczz~!Tej`cewo&#CzR(l)yw2X!og~c|Bs~{ zQ))FSdiNNitsjkIzciL&-9_R!PzRP$Ev@PqdW>}pg4Z1dTK6gPZ^^tH9-my<4dw5-Gi284S@~mrHp-rMqD4Dxc!7F-!S(iXyBT9;BiDABVEcS$XRlqv!vpAyWdoMOi!mFHCi zo+=~8N7gv__D_O%bg zP_IgS0yqetC}Cmm)|y#I=(=%Klq9_fGtC2%iHiUABezGgB4`7f)GE(+HpJ_+FojVR z&oB!+Q1+KW1St_W#~NY-US+Pzf^CQz?INJwkMI_8Yi%c91E(hM8bZAIS_kaJuOjpO z;E5yb?u!P9RNkcA>;{>+doIDd{|2|jGr>G{>m!?v8|0+*5wx zn*Gg*voL?hi){aWUi^=G*FUvglAaeXI?Nrhf|!CfqWq0+SRE@_0BS~3DrisKk1efO z9k;2U)4elFi3#TW2saW~C)FB_DWF%5EFFnvIqBKyUAaBozkq53)w#jr<@RG@I?|+w z@y@-dFw>TpLf^3QPu;_^0G;r7nsE2n=&ZcoFxTt(HNo`Rb-V`nkc5KzR#5{h3e4Ct zJI5HiRk!p7DpS~{m*(Z`oK+}OX@>gsipLqXQ_5}eEAm_|%LSipgEEuXnOc4Yo=9!n z6>FJDR<`v&?l3+a{T}7IEpX-(X}^H(Mq#zoxzuEfrFHnK1wSBp#js2rzT}plsmERS zBC(TPP-YlU)Mn~+()n5qn>59-8D~=dCTP-9@>|+D%esOLU=oEEpt|OvVsrz@K*;fN zG=?JrGDpqbzwJ`xFm*PW3^el07E+SnuTFW8p3Q zE$w`_!2uVac+eBpuHFC=0`-i{Wcd&*+xHD%Z0OLQ?*JPa3djoHTpIns^~YqI^NN@1 z?xs3cpfc{K&qJ1!9{{l+@zQv`ZRZl#UC1T|+-l59{64P)JwslG3Deflbi>AMSs}RfsNk6eWwr$(C?T&4BY}Daby+wM3wZ@+7=bM`rV^}T!D{ptUE zo{v>EXN?-OYE(9=A#|LWeob62r4U4x?{8>#i5zmSNDN6Y#4gMz0Ph-33doPi#SwoX z^#0wy9b!8%q5A;=BL4{O{>a#VzyJj!OFbJ?YrFqj-9&>1_+tjexTQ|1z)>X$d^^XK z5?hH7pD?*YpXTEznXYsIn>{3ynb0W5x&> z_Q$hE-JUgWkByEdtGsyfIfY<6!YFw93pxpoaHZEm-R!6Tzu z5rzO`nZ?md3GxUCfxbeas@rV+#Z^jCed~*Gv_BY6aUXALN^$jc_xfBNT!Q9CTa4$I zg9|XP#gd~d)lbLURuUxW$i^Rm+n|>jOq`1D>23w-s~Y^@Z~HWKBTc44E2i0$dwIB7S3uc@=_p#Wl)*I_oE1y?K}R0V@| zguCk?i905H+}`jqPmS#T%odWxOMS`YA*0x#hL#0NPK=(|Z0(a%bV--hc$z-Csv}4z z)4y|{H)9lf&!C+~DsJ~k)t-Dw*t=rL=9IwT~Fg}*V>9~(NzFi$7 z#>3-O&lp|(K>79^7p><@V;k=;_Z&VdS8ZRk(^2TQ1s4M{&>VAsOiIm|l_OZL5)n<+rUlonZO-rLmC*v1tnf4iR6J{jC+Y0r%1APnJHDeo%wfiPNlk$nIxK#2&X7Gqn z;)@MzL~_iM>+{@E_lpZ@DbcH(R77g?xS|0+i55>9-HT8*9#QVdlZ8f1bp;wLZg#1N z9P&=|rz)2GBir}*fc`olBJ+`E-sj{`A{{6M0`vYz3D9Xn5HlisqJD(bkp+X0dr(x= zW8kw=bF#6cJnSV5Z1YtmVCa~nd2nAO!L>e`~uNl8;Pf@q)2c<2-qeSdFSOP zX%^H>uz_A6YjQd#1ZnE#UX8XvY#?;lsSk!F^6=+CfZ4A1?`fpi!sad%;8af)D;8j- z-fs7oxg=A0kmSd)l70UP^<75{a)9;xK(o2NkYitj6tlw zN^&Kns)|LS7VAg*Bgf~J{V7dR)0!V}e7%UD!QZ^0P(jEwFo4vd=yIElo2?1~C?n21 zpG8_}E-N8H9$WNB=(R+73rYz=PBmRyZq++0Ss6~PXtLK=w4d(rb!j?o&h^>mVuz_s zBm%6y>IDod#f&jXbLOuXna%zn#g$sWlJ|6vf??FyVuU85qtSnpqrU{Sp_B~we19bg z0`EqOpNuW_pWBCqp~~xxFc(dU@khWSv&usV2y`x>`(#ac~`B z%mu}No{r{|78nUFPHp{yES8rDG*>oI(yU}4yTH_pw`L>;b!G5~TH!6IJWZ+N268}5 z0>)?;g}jOeH~FXog`ja1HYR}+4CGlWmzJwWHC940{Qy;=E+@vrd+X>h&iAk+za~ZS zJ`C)X9r_96seM(z+)I~6@T60C!(K7{?vee3;$Snmr&LF7?h3FiLj-|kio4y$Scd;- zK7Y>5UsgN$Vxwvb-ELBhPkDe@%3zZKybR5fa>YJ|Nw}c{v=jkc@5^yCbhq$8uR5m3 z5KUi9)_Em>iwm<^{|N+SoKG|_$QV2c$S&#gF&VJKpxw34nPCgGVhXa zZsO6NT6d22#qXfd=;c(~sxtMTitz9x6Bxwb>4d9O=0|Mr_ipBmf?CES$JxivNb!dP zUoZn+JjAk}uLIf#sK=m%KC2-~5~tx4>Ar@|KR&Tp4C)#*@dqPL?#7*@t*Tn3|n-nr=|4K{Z*Otil`}3&Iy5EGJO0XH__O}- z${!PkH?V)oVf6pa9QMyDO9JDAL1*sQw9Aw;IM%?>D6@$-((IgZ}jTO5&s9Qe}Xa!fNcu*&oLm z>zgUj*{OhaqdIvhIbh#989kRnkcU@OGC7|MXA!Ed8UC z@{AF5cWvCHU70v6(kEV^OnyFh47foqN!<@QW*nEAgKuBiHm*+{@Lx{+ehO=)*b3tf>-WT#1wp5let@uwEkbB^EcUZ^(IMF#~Y*8Ymt zmmG-vUHmasZ!VE)racfl;OLTJ<8+|IW~6v4!neU?K(-Ne2&!k=6BAANyL(C|QEHN- z2^y?aC1b<41!M!!b!sxErLC;u&m7Z7AW9=96fBA@?RG-;RL(`PT$D_VQ@d|UjYFqe zs;sR3;=gVR`j862d2$}1YF|e zqX?XR*xV#~Zs*aA{q%CyKAoABiWVNlBWS^wWH0TL1)s*!Kg$_%cp z4mmF4(MvNbetP-%3B~`*@LAyiOw6mWZ@|C|JTOMoA^m?su5GlXuT?BB34)@V$ zBT`Ukbl(`DtCzI)5T5l~hju2Suck&y;ldcolj@k4W$V?(Hmr(QkWaI$)-I&Iq$(IZ zlS4QXD!r;M2DaPLCVl@-DL^(!MKehr905P9?Q{}~aq=3`;BmVI)U(M#;anU~yQULN z>YHV(*Apd64vA%;;*_Y?~irWzv0q6i_nr57^=~22W-3HC zt&c7bqd^`Rmm&qS*WkZ|Kv61D{}KYt6f#2nsFdrwqbpB7x;zwx1q0kv9-W0L9tSIC zOUb!ZcbEVw+09enHba^&f72fH26(-gom=+F=COP^g3`i%l}5CoD8FM(4x`xDTsqMRp! zVVQfglnk$Q}2$DsJA&}NAg`0+aqVmtioibc)USNBi{ZYyNy}K*)PWFAf z!=B=xADHsVx3agidwQuk-U?=W^=Q)t*XRO;#?(YTqFQFIXbr$-GOlp3BqKeO5a*&? zlyec54^$Z7SntWIcVSvzT#=MUvRawvrRxfCddVHcpP$8+!OF>M} z^YesezE)T@DF`np={B7ys{eILIn@1$<(qABwPrNkl81T(67@uq>uJJKe$>gggi%+v z+P+QPCDwl*RHN2h3obM4)n)coo433bwIAAx zwM|ro7DC2yb*Vqn`s~qZHT47ORSzK;DM&WiOwH-yW@4H4Dzj=^@J0xkh z5AQbpPkZ+tLzMr!ck9-x9tkwO9> zfY(edBrT^Fl`|Y-=$e$?kAt3~uX8bVquO@yenK?9{c$h2LA@Y>rZ}QbLFy>zM`-%= zn;e4ESLS>hqQKRrkc#Laa=cU?Yje2<;WGF0_$gl~s)n-&u#P>&MPHN{GcqlXm`bZs zY~!2DXro2c!lN&FLKYRX=glJ&7wPZr?Rz`<{++>T`5oG1fSr!qM}iOEIuU6=u3`4< z^BmQq3&*0o1fQh7r?_4n1iQ(&x0zv#RA2FYsQ2Q$A0VU+PO48LOh)D(PU8+?;F|k> zkem(6pFdPyy+RDVQ30Yb`0wz|f@0J8_7kF76&23WUJocbIlpqK`)Hx^8PM?9_?*M5 zkz9A;KYVMr@%!Y~gTA@DeE9a~|FmzJ{s9RUG(I5VhjdPFdF9I2i~9PzCpenM+&eOP zQvI%2^al7=;HNcGX>Cr5$feDdgV&#=mhax3~IBGeF4z09OPDC zD|U$*QZbyDsF0d#47qFe(f+UDAB*L?L3-|fMk#UbMsaOF|$ ze8Hv+1}y_?fH8?RnYyiV05>!k(``@7XCKVwNt;n_2vO<+dcO`}Z+7gbtZnV}a0r$` zDC~oEh*ois(2KMH!1OMZ;kWamW_5+yNwGaC_gS&NF@m%hE=k zO--{?*!CR5Gs;@h4JQFw!Ovj2@Et7MynKpiM(AJK*B6j~VJ-TSitUn*U=a8tza{a9 z+TdScEk1pF2Rl6j2T5xKb3J_vBN_c~Mg|W5h>)1EzsSyjiP_~v^@<90IF;P6Cjnr; zvQXJjKLjN8qy7NNe!e1R2KtoXy9!N6YL8Did>cZoA;I{~ra(zeI^#_TFs`oNZeZ0B zZjgw{H?lX?owAEc>P=jM!UVMU(>RNSn2%cI6*`_KgFB6N>n4NFqXCA+AmSrCgir-s zdt1?>B_;?IyT0OSd+VZM6y~+f2h!+R#gld%-(Vi7OjM7FmrF$NmC6TK=9e2KQQ~ey z=!;-Knr65Q%(15)+&IEB_PRlZHH)rDws@gLSemz#k8dxYOX=6U__z)@N z12vyk`?rm>%GV@W?pgI^3mmbN^KiC%b4hzn9OdXdo+R#Y?PjDoAjdL6g>y>_D=t4S zL!hW{A%ISbkaba7p##iNL0?ySNd*;d;4r%HOK8Y`yb-!EO8i1KiXkXGzprX4Z}Aqf z4-c~a@i=q-_dWQVrv4ADqzuI~>EH65iPThI6f1yoaaFTx2Z8XtKBX?|0`W=uAIkh} z$%ywgs!v&~*d%yhCiV&8`Ec8?OA$tKbZlccz(p6ddN5U6vN5*2+ zJX?$u5shV?MX8f>I-A_PlYOA4rIlFcS$XCxo$0Q}Axr9jPo-=9&{fmglep@euTSfi zt7lJL`-#Eqsv1{$0M0+Zer>Z*^);D+E(#Qpi&pA3cS4Zo8Voy4wHFasf;e;gLm7`) zTX(55G(>3^JyG+$GuN;wMqV>8D-|REO!aIHm3cjmPcJj4j7^_*pKwAEk+i~gIdZC6!GrUu&#{?ydStEQJXwpl&|S33#Er4fx4H+O7=~2< z=lID%Y4;Vx%W~y8>c~oeXNW&4lv#!Oo=d~o==KeRr_|>_UkbuQm!|pyItz!$`=@nb z4$-N$vMbs^G_WvliiTk^{zoU)3`KowIlQkgfT1|yvi5_QRikjuu%GmFqi-5bbRrYt zU=AhGgL}6XpNfmZ_+(^a-@JBB@4zAoql07QA3@3)?fnFgIAS*-a(DPGQ{Ads~9Ir#*+qVU(C&%+p@u4|-P#;=N`Pp*1@L<(G^X93R$II&xOcyAOc)HP4A1Mi-$sE&}971Uac14^J*4ZDa3sZnu<9;@^E@yCfx{v|d zZkIkz!^o7%m1*3jl#;O{LUdYhN3yKls<%o=(A-=RGl#0HNRTL$ovbFBOHp>~a z8O@!N0$ZpIFsppJkTifoq)G#(4112eCRi0d&R73A&Q4Q*MmMcIN%Y2qeoNV5VD`$r zWxKIu9JVT|b5;)tjv`y|pMbFKi>2sjfr8iSK7D~keL5&b(`jj7d$ZNPHpcxQx;{^g zk33AYhA=dat!RMnBITq4-y*<&gyxW>nd6Fh@Jppw)}LJ^Vv7NfRY)>us?)XiWYBKH z$3~k|)OVO|eyEaU2X5IBgcF4?GIZG*s$|Xe)av~C|#S67I7+sE~od;d9OxF>VSS8AdGvO_Kg1x++w`2Q; z7+!hLmES&-_UN0<8`B&^Xaen)nBFBkIYjC3vuv;$2yBrleF{ChK!3A5#GWvnWC2^e z{1;KOj69AA54G+lD3}-rQUV>Onp5;1#M+NNvDi9izu`7vd2(_X(*ed;+R&j{n!nIN zTT+fV_y;mj{9q6N_3PK4+T8vHI{2Mi_#7PUl&vj3C>o1@EQ@JV(y&Gp`GAg2`mJkl ztAxDYQsbH9d;Kl4oq@>2mSqWwDj=?aIaPP=q9s))>VFzEoa-Fg7p%{!D1ykFmN5d& zj+lEZ&M{yN6i$g3APkRaj;BAiUwnv0-z;pvdIQ^Fl2G8(1fXh2ic6PkFQLbtF>nKX#jvLXg7ty^wmPM$2-LVuc!sF#+i6rY)X2AlmU)i zw5o~X9*Y*U{_W%DpVh7#Qu(U!zvfuc*i{rv0JQ!H+;=Pc1O1Iw5kl(~a77pvQeuah;qNBt^LHD7R z25Oiu)j_hqyU`~l*caL&$m=iOSb zN=-$FlphLEX)m^+s_3TZR%BN*d3Z`8I!!rnw2*PBo0HSlLM>cA{zemjFI4|zXxM?{ zUu-UW&pM3>x` z9v0TPtB-wQY`fG4bWM%Ihs>~yXnIF^E&9}wtJxX^k9wi8V5F(ncp3yf0h_Qft4^vA z!6Nsq&5#b!wuuHU&;1}?rn-r!z+W561qrg5NyGx6-8t9XQ1)GK{~cbTvhgB}G&MOR zBSI$;1F-WhhXYU}XMH~JDW5PAL*4uYg-UXSgO)wvyH!fX^wr2z5?S=@hS5F7 zP1sZCN~Ie7#|~WG>yImmUD|N?eEkKcnt~FX4ZdTIU2py;d0UK>teE!it1wUXQ#vo8 zOH_7ZeYiAmfJ@}Mjn2=OUCtoCxR$&-r&PthHNp;>>oi`*xaQMvO(gmeWEqC`@&$`?XND)QO?|JaGIa)&C z?0JXXbZnR^SCq|4>78P1xA8eD?6)O{110pFBmtijPQa7^Tdv4GtQDJ}$O)_j0Y9O% z6)$UeAF9n#*5Q3s%Lkn3Lu^TsMoGX}Yb&EUYMM{#`-4FJu$-3RR5uLNg>|g(%~%E8 z=qZ?{U1_Zg`Y~7NY2@S7LyvbUC(>yV1Pmf`ia0Dr7>rxz5n#^LI2_xVw7X+RQ`9DE z5!UE)-*y{guGK+@!MV5`+f}k|cP#^%kPzBcZAC1Z;e%6o`k4u?6^NB6APkPCYHRD7gpdZIp85x;e?7!GK1Mq}CR|B$ zS7+h+eDKy9UQYK~H=U1L;j^1=fCKTNmcf1&ByTJuPJL_P<4HoQah{!$Lus@9CRf=e z3hynUDTXLuKy zK`y%|!F5Wsgwn^W`dw^|j`D43Hqn7gM8M^z_4mi za;~h2+>W@kTY%RQf-z%j=m?bdj16ej&p4)5-!hP-5R#ha1ThDi%EMGKbT4G4){q9q z)`&8wO32!x(-6VodU-aHea>UVz8WI&pUp*tdg={E=#es|U05^MxXCxFQ%2L3&kjkQ z``&DrAk35qbg(LQ#rWY|TAcCZi8ux$%1+B{8zlAfW5jU7X~N7@He0^Z_3uA@o6HVI zNA>pfq!NrI8`x4-LBgi@SnCPkq8y!Rgjn`hdZhq|h31sC&`B3s3UH$v4$qQSTfCHB ziMuuMg@6H!nkXYnEfh)=9r#r1=$0S;sh`k$D3tY7C-wn2N#F(aLdx@!TBA zxL6W6Jw%AcoFW-9spq5$QgxY-YXExdru$8;6WBC|?k@? zv7AY-b(U%FGBqEA7t4{B*;PQ_=lC_^bAf z_bh6WF9dHj4^FXKp^F;S5h@P}%87xLR@0YDv&|W#yN|$SmKR`4eljHs5OP4M46nRk z@`&Ws*%{j;31+q>$7Q8Z_lscR5zeKnewXkE;qJwLw^q&mv7FBjxb($2yM*ymft68x%Q8jKGL2R{OzBvaKl)NWTvg(fuT}s-CxvQGM7DP703wN zLgMlttml(vEWwC|){o<`k_nza)ceMq&wzHoFMBnwoE2g%;S(R}myE{n$>ESrB#sJ$ET?r6B4ZAGoGEyf~k1C_lwo zW3(h7by|#YDEO}GgWGxWd6L=AfS(G*Kx|yKw>xhm8QOi_L+<2OmPqd6_bK?~7}%XN zJ&Z%g_*Kimx;sZI*LE>)@+p9W;9S$(y)*hE*?dU$gq&(3mi1#bn+SovxM!RyUX&8l z{Ida-RmIeCjJuJ8icsQ;t^MEyTaP-;ly;w8c6#n|{d~U(y+{HNu{}G4Ovk~D!dT|Pgx~Luk{;!m-dTV!2B%c=!={MykiPgche$o@nmAvepOPVhAW0~Gk`%oa_G25i zCq?)|8J8S>x0n&`Xi&m@!xmVfAUg{gv5Vv za6$9);K3AALY|X8oBg4(6u1#dW4g!m}7GXTx= zSG(~x=j4WoB$ZDss?>T=H!#OAD4(N()ve{D5%?Ga{re!WKiNisaPx8r} z>+78}@iOUsdsK5jyA&OM_e0-jLlW}^B_A#)PlAItrbEpUhnR)5FNQ}pD~Un*dlw4K zh|@jqhocDo=%_!n|Nhs2>K{CWN{9-^0Qx%>gp*oTRb2!@HC?@JHLv@EJG-e*Hm zxZb*qL~8v2qcAO_I=k={Ov@RDqnKK=8G^Qz+w2PHiqpXTL*#~|JJ`FsJC>GMI8mA( z;Vw609yen41O=P6pRth58ubSU8}WA_(N#d# zV*SkNxrs%&D>ucEWwy*fCyF0HxJz_3`-^&S)j+e9X^D3j_`6J$V6qfw$#-t_UqL}( zhg_s3vs5m#!)Zc~l8^u+4>jRc#io5<_(#JWAIRH@cZiTPy1T2sJV4X6mT#v$Bxbv+ zbu}P+h@f4Es(P#R{kklleDI`u;q8Z2y6uj=B0zoxdQo&)bN;EdqBw;+7Ad8bJ(Gm%7&tg5hPolxu{_?G; z0jj0)rZ|IfRdAZ{XjG7qlYVqel-(cz1@TDLv|k*<_NR;=J3V5^Xe2-e5W~wZ6Jemh z@cmi(w~|w9>0_HoLAlBi z5nDX)426Tf%e2|YaC$Gko(QxI$%fn8+j5%7(12+iiGBVG;j?f=29Z|wZ{gHxKf)p{ zi7L^%w?y^F>Cy|V^pXN0#!Ztu^8?XosaMeNtl;mgc#gk%g&09Po(nNVJs^8g?XY~U z+zAXsE`O5jE75c012x9k@=4QJvxWv$QKYIwkM>|+?pPm&N{N8*H5 zTg~?ts7D@QjWlbbw=#R+(k3_~<}oTad-%SH9=sHmqv~rkA6Di%2b~ZlDIxYTs*Yt{ zJ$QBaruh+=Ge@zk>SPaMP!UAKN$Vf$)(TE|2 z;6`r9L3VsECC6qx^pF?Gvo(QmZ)MfpC5g{w%}$9q;*_?NyPeAP0_r_?$!s<9kQUgn zg9WM7*2W2yig;wKY@Ztb_08A&+XL#`*#3+S%mI@J$j^io*IK(ogM^=$Rq1>F{^!H0 zE^6fiEE|wg1wpB--U6W5?}DO>Ia5Qqhf%Yr6mg8ZGGQf zOf6*N1g>0&UB`KBTN0kCe+~vQ6uM6p9{bWuYm#nJ9VF8D>Ni*d=x}J?ln!+C5SB;! zOHLgJR%$Ub3sJ+;f3zx>{j${yqcUl9O`2Yh(A@siEy3zHcK#sFMz>;3Gj-_(L>Mogjg}f}^+qx+r|G&it8l%aTk_M~(x@%y6rymwc#y zQ9(MdF^lRZgsh{hl|!K$_yYd(&&x?jDfEz9wL@T+q55ZMv+G@IEa!Z|sqV#(ASIEu?_M(QSU|(r z$6k_xJ9)H&)bSge!q8hgSWn}W4xTC~EhNpiTp(?}y1Z2r`qu6uNnTOdvlz;gE{Moyk2cO*7LBHo3dVOu6e=9Av0{D#2w0>1U_Ixos*i!wq!RevwQL znJppIZ5&~6&irb(hPI4R=cC(bF;7>km0tKVcGqL$y11m^YOue4k@FF$#`Qh>4Lg=z z0&jq%>>x*~m|Y{pc|hm6#KLg);qsh;W*9x{T!CV2YC z5`h^m5`G>r60yGf9ph3sKxdZwbfQZe=MCpCQu8ckWl-^h0ChTbSk4H|~uD>2R(^Xb_^XKk&QC&=FsPAO^f+vwe{c6lLM4FI%d5T)DY>;eMrettqPZOIT#2z@BCjS+S zgSkpdbccV?FDiic+7?Lr>Kr73>mUp32Xg`{cE!LPq6i0+x4GT<+!t6;06N&BLMsC1ZL#~#w`ps-|Od>E-nnl z1f5mhTO;_I-rMTn`JP`syNh5hC5a~tHoiG}+u9pDovSDe1``1%Vm=lPmt7qZk%wG( z4M(Z(v?#d;HBLh%F6}rn`uQuxetK4trn+K$s>*hZYWh~1YBuM z^Jozc2nR?4a61QqYJ+`22Tee)lhGD^I3dC^e1RqH=`VrIsKKJKsll+BrGK+^xBB|u z_dm=T`$u#BNjBhLn)B}ftx#IAo0dgdE7Ft~H`g#P+txDwqMVwWsIAMMHx~(DXPw^a zLN7wx{@mm5Ln0>f!ie+HhBIut2S<>^iHm|QJwMESa$5J(`TAzz7mnbqKNJ*~f~iUl zXWrtMo!&aMu_Vf{Faw33mR1zC1ElzmqH!GI%+uED%T0x;sdI`HcPI-P{Ko0}@x@=I zBFi3jriB{i$F`-H4*Fz`fr-Ys0OKzGngUXk{;2V;Bpn) z42~+{AlMPD+KR5LBA07~sIv}^ZEY^_e92ew#E-l2hnP(tTel9kHqKdR972rNQ z`~8~XX-U4_i-Ts7O_}zIk4LEy^_mRaUf~s~Yckb;rJtHG`8PRYH4oJ>QUFh`@GdwU2G)i)fn)P!SKsRpXAbl; zX?&J8yqeri$vQb{#_LRTfL2M?1qT!NEdjO5)a2I5_LEyetZiR=8o>*?kmU|W5=jDX z6pOGFgO)ZtjjMpY6lMz45PR}|08c@5Oa75pM0}v0XY5@{0#c-*B4r}%K;JjKRXNq5 zQ6-Mb$;S}A?fkkQ%!~K+w8O9V@4C?{t!;J@@ zwIXv{<3D8rr{)k|a#DdjAY5)kXy@*Ia(`Ai6!%f_T@b!hYDU>S=_G50-%LY*J=w@z z`P>fdk#r6}K3{@X_hAZqO?PFGHL z2`?zL0~u=dmZnUgdx&EI*8vJy0Ry7Cd zTuB!m3V~VD`KwR3bz#3@vDm%%4GAw&xZ-!@i;lJUuTNh!TJowagu) zl~U9C*y!w`QlHT;#`+=t2?g=l?*cC&Yq73g)cDkl#10>UBa1LO{lk+){A#>p{XV?JkS}H$_Zmq=bAmH zIo-N#F|lQ-7vIL11m2D-XenQJ>LzW3`+CrN`n_rM6dGI~4!};~&wWUz@((G_A1k*j zxVm0Zdc?1$1u=4RzpOX6f`;NeI$)bbOW&lvN(AE-xvJiAR@R|eWXipuSsTZ?(Nm%f zpdO?e^?a>x1*=85 zl?Xee54}AER1d`sSLzh-5)M!vdTe?cvO&HQDiBL}DnTZCQtJ~6G&U}IQgtX}B~CKj zKlr=`W^n1UzgK|5c0h=NT7<$t50Tvx64R9oa9>12M?+6W_f?0+|EhVo#9ojemDPZ^Fs4zW78vb!U6HlRUXC6k`eb+9fc|l5V6~v9v>; z&>eX^z7z{L8dtYnKRbQZh5wamJA(&Xgyl}Kb)cm}!`~(|Nqw+|(B4^wqzR#5UVh2l zD$}G@RXa-s4~L{uY?nsz#e(z5uFmLsu4eWyY)iI=>qt9Yu$#CEzt-E#q%?juE*ygZ zI_LQpP4^s6Gbd1v@3&$xR^FMTLm9bsyp@dMLVL37Ih*=bzI+If8FQb0v+;iM{%*hibeX2|dG$NZFq)%4pDF>T%Ov#YofrFL zZ|vlvf(UbRex~zH|K)fXPXc)#~OgQ4D`3S z4<%Zlsd7TdjJZe7Z80}W4WmWAIZ}v^ zB$(#r{Zw@GTw_1q>d8&snKFEsYL-Q+t+G5VHAWv?o%*tjOsaY$>5(l?V&ByqZW!NU zCl{ZXIKBr8f*%IOO3zkSRBm-HOMh2x>$e?4We{cd?MAcqbP4`0H&>unEKuaqvdUylGRQRO`LQ##hr)Q(RCNE21Wn zxGft>{=A7n!$G0t!KJ3kvWXp4TPFihs1?9jlazawBz8ICy-SF+z>uK7Y?sA2@v@ENI6=*KAK;8k$1fP9*5%hI zY#N)a-zQzvdBk38sujTO*w#)*OdngNGf>#`d9+2-o)lGgUXk|CugZ1zb4(V6wRzgNqA>-rJ$#aa!H%mT|;4m+siD8uT^fW7B4v8hbG}G`YNE@HM z`Bc&7L1f-i-J&lgi^osAoJ2mqyJk6NZx=j%DPrvbUg0m?L;wtlJ`_Fy8Vk&n9Ha}X} z1F%;S6N>QH=h%a4DIE#}+3~u44)IY0#)gOBYS>7M4wVI#=dJlHDavQUyA2oH=i{M{ z(pUoJU)Aq7p7bMB!vh}5&SYh$S5Zu4m}n zQ?1+T4TRK=9`1W=n3|0pzI$$LV{hKjS9rC164lcQm)KX(iRzB+k<+i^KRUL|PcIq= z-+V_-vzV8i`L;|qe8@R@I}^>&wEWpEDLPf6H#%3Tbvg|Mbj%h!75&}<_}C?pz$-8? z#UeLkMUc6?&4V&LAiF{ge|S{fz3}UMm4039nCyI$3i0$|zQ^If1%+n8vu{}V5tu&d zF6($r-GqyU>54@qLY?PGyU(TE-P|L=d0xzl8R;mj6F7oH&VNd&_qql3PFbw_mfZ0D zwpFiEld=QxhMT_yVc9CLJ>s0Y8pHoditz{R)aWoo2@rD`^kOCZWM1fE1v_1_IGUW6 z(`K8^x}a$Pr-1P^m0G=B5_E80Na%R6Z)9~{>)58v(kunA;B=~OBl~81CH)3dNpN9W ze5#%Np-PfL92@>5;zO3KUy61-e!R51V65G})XO5XDh2wK>Srwb2OkS5-sLE08G)|? z$XobhR(UBvZLzu?rz_)~gS*kSAx!GON(bcyedk(Liy%ZgsTFAQi-2}%_lS^AJG49{ zOWe@-*!hmqe3f0v_q`cKn<<#N4pd`SIn?O2Ce&JU*L(N<#`}K!?MO|ICFXr>*Za%k zhWOjc#pZ_GnkOdg;t3vSHxALU5bP@siq`w@$3fW|1?TXO@@WL-Pb`bO5E@u?$-ZFqre$| zH2JC~4vu&B3~na;rczYkbre$-OS07EaPui0q zlfjetvqqUGRCs8_QIL4ri_>J8UgpHNB=g17Y|MQvw>k_dRqL7bj}!#8kOoHH{>_Z@ zm68p9ECGY9?${BktE#XF8ilDz_d1YkC)uxhfR>QN^`9iSr5rg0k4QI+21;<+7Z1>o z{$I&ud0lvI?3iXJF!8y~!b=fz(3zwDs*vtfYKuBQtVaAttBL%ZfhT0;VCO34U}UG~ zU~TtzywxeG$$Tu@d!wF&!J>|r;*Ay(4DgE=f-_T-fY09)5JN;jWB{*e-!bw za$W~;4H$5+r$U@OR-pxT+PY%=oux>Lgxts?OIHTjLgP&C>%=|&A zw=7dWdMzz$vC?%{JIBFF>KB8!7M`e`w!n-ikP`_aAV*k-kM{B-pA3Z_W29SsHW51Z zVS7kP;U@#i)ehTM5b6PcSjc2C;y{C`nMSwxmoVRn)WT}~z(naV#vViILrW4Ln718H zzEwkmljTGdMn-$42UAzA!}_##k~T9!%fRVkGYyWP_0^0VLIr{=9Co4ZFvNn5wi+{8 zvEyfNFCCp+=$|5%2xUMK6+;ZVKjcc%^%cAW9H&jq|MOE1YXWe%%0Crb}sEg1QpBtl>+6(@=S zi-0IFmdqHMKns+A1G9{!%3Wz*tc@d6SQbW>WcYt*d&eNn)@EC@yKLLlW!tuG+qV6d zZC96VccHt?F59;4s#9xyd*6+FPM_E-?u|EMzJKPg5%YO6bL7a8(z~5-908WtNCGENWgVcl6cq5$q>{wI3ry??8h&-Y*45%lAh{p^01MI>Db}I>4~RpaMSG$v&jJkuTUSGU&P}McfX|rbtBfcUXGbRT_qP^jRKx-iWF-AHmYFkq`=|6 zAe)@b6W_(}?;Fnkt6C%5CzAmN`KKW9C*Ag+Zn(eCs*;KGe-w#DDppR&Dj2@9^~0>g zuFy2X5%RXE(}g5^(?BxeRmoCkpp8vf!Va0$CJyc0#zB`#&)srxz4VMwF*AzkSJy?q z-LtQr1FnMnf)KAbG7%)(;bgNcZgQN~S8jA4GJo-X0CoAQD{u!9Q8F@sOyUdRh!qTN zdwAf686waPoy0|;7les-?sMNdC5>}=0& zNe?FZGb*PsfM$r&4C2sD$Yl0Q7%lHh8TVwkz_e)ZdgRi+yd@H)50^>L-^}ovEYxNt zbPe%JM>Uv_qtYUZ1?^>s^wOY! zZimN2B-dLl9c>+R1q%)0w784#W4q!sup46+B}kO;{JegnT0d-Eo2l9wpVppCOGjKx zxH{H^#tHf)!FG}q-ymJ{A(sXskLOjPRJn!>2D=9WFmN;)oU zSc0F;6aC&tT)SeI{v=?X`V%l?fj}{NKfcyHam1MrdamI@7B_#?bH6w=W*NH z*= z*94PGYZx+->1UL?T7@GjmLGcVxR6S<0Ob0mws=Wqk;a?R;WOD{`G&CIui&V6ikKT4 zt|ti){Obl>)jFa6aa6x{|4@i;@&;dk1N~R5{AsQQ3p-J})=;}7VK19ii@@sofj64` zLz*79rz3vydq*x-Zip)C3Bq3>X+Z=8u|!fT+rz|CrHr(+?#+N+c2-cp_gt5&ix`(6njlu(~=a)789 zqwDo}kTO^F3iVQ>p1>OYMP*ooHR1;!$}aO=}?Z#R|GeO5_bs^Oo=MZk;IB&mcA8?Ew)7;RI|? zx7u@Ak`fwKlGbqN7)qzaydKO_%tiN`#FB8-+kmA*Tea{^q!1oY6v&Y*8nZv|DWn*C zgvKp7EKWalj046_A+q_u_VDC5ubz*5dXM~o`qS+x^ba!~F%#SWoaOw14n~BP`G0pb z|1%q$s|fp7D>E%bCJeP$lgoPfN8pWAWP;Kfqm%zLN!HCxf>dOL;*BIXQY4c%GIS61 zEq}%$<|8Jib>fZFUE&tycBEt?<((3hd-A~B8{(ngyC2XAqJw6}GcAt;`d%1E{b~OAyDp%6} zRIZrmhAWZ8K@5WPHRhqHUCeXAt3<1k2OqO-l-*Nnr8aA@)6Eu=Pg7!}- z^#6)ib~FQgH$P7Q#&^py$tYg`fPPR3qgn}Ja0Y}5Z8~&j7n^g*gw=YDEIJ3CSkSsaHSIPQ!fxi6q3li1AS@=d0hrf|XJ}06^&{lC$xYuOC z5c!>1M^gL>V3-z zRRdxXfvAtidPo42WV}de52Yq(Q_G5dq_YAe9G2@2=wHPNkI+Qfk58bm{s@%F=Nm?L zHgraIwni?FjwZIwdX6rJ9&{$|&UAlDc%)4JdugKluNEVid1^|YNYaSN?l(&hZHsX`$)!}(RB3oiADOf=lEkhI(nqLYuX{1IO)ziMm4VxM z7RSaz_Gh#4{rTn%+@C^t?UH~%PXIj&L&d)Lld`6O_+g>vC@XHI*qwxJ8#O%E=)Izcxjq?DOaXHeuJQXcq%Q__nK~_ziRl{()ps6wXl(eo zs#|OJI8*cRy#ob+LooX66j8f?mH0N`}DxwG-OlH08PF|eLmMC=osIWtAEOz4?7(ErZ()k z&=QpaaboDVZasmmnyo!Maw+l3g<{-X$4@A@W*Do z@IOCO|D}YeQq@wzQ9*bg*Tryk!#KxqB!WulL`dN$0PJPRd~-tzU_n3$T|>seF|{{E zL;mpp6#$N3)p3bX!5mh`_-t72eFOg}MBZ_mo=pvM->vDx;nOy8bY4SOV&?mDGWh+A zvk^~}XcS=5U!g84*a6$3ZZ+PXEea}1{E;9^GD<29f+)(tfgQ6OrI;wKyHb6hcojbJ zJ_y3{l3)E*zNZ5q0*M)dm8q3cZq{mIRb0pJ5E>xEs9Yq|>#E#4T+_~! z9Y)wn1OnqSlX)DIF{@(4!_m?_+#nl4$Xru}U7px-80beRln@~>HkoA*GJNPfzba`e zLzLMU(C9z~_*V+3eC;6H7MJ-{3H}o~F>k^j6lOYY4&_$Lh43@2Sc3Xzgni ztp$CYA)DZ=p$mpytO#&br|#*fAIIff-2Wj>xENwysodIa{u{PF;gzG@bP*IH(QQb1uA{(|kLUz%TXJkGkKBVm9)6}wZ)}g)TbMVW z*daUKSb707qk!yoy0{t{r<_qI;W93-==Ms#r|DF4`}={)S}|O{4B2plX2Yi z4ijdyUpIjq23X5^(bN#hBt z9eF=$^OhTSXFr!}lIgcfGst3@x~K9QL|;y^Rff;sxPu??Bggzq46Hz=i+voW-3UaO zqAJ|!^=gztxI>QaLw?b}in-W&Nl_0`)kJkDToshZukWeiN;bNBrp{EL6BH*TJuUk+jTSb+vtmy?&>8;d!Yh9$*IX_@KQq zXo-vh`!%4(Q&~SB{lvh!fE`5iiG(r*knAH~l1J+)&lN6}a1mH6n(>WC0nx0SGN zzM}x|dAx6h)Oo5Jq6OCwsY$5lWl>#-mL$$1Ae(_N zC%Zqfd2(KO9CZbp$N6@F(s&>@zo@_f2kdu!MR}GbAatE0hGGSm3$TLIb(#VN7Mgf} zf7@p0V1L6D&iD2BTYJpJ(RINVGuRgD@PA=oN)05b5D7gux7h$49{cr3rH9czBeFjB|wd_m}naqY_ZvIU(Il-@PT)D<(=| zU`7qsW=6*c#0P|b1;Nnxl!{=g`%{yGsnQP*bb%KBz~HxB#AIJ$|62z3>MVTG{Rs=z zAG5W88d?53WZBVma9;&500#%F4&q68`~pTn!pd0T1i}K1^{m+15{zta3j(}y42*U!JSm3|rtk|RTLNAys2Ta0Tm1^${2M|AXtA<5&NmLwh!N0n>k zp>}V?Yy|e*$D;(~O_GuFMpsF=s*%z$Kvy2!z9hVja>xGkAg49r9?*us5cFqthRoC5nPdj^PcnmG^(<$!<(DhN z?nl624xGD_O6tB4QSN~&`wRfa*s@{Ro>oHGP*P6Ry$VI%b{`+Pr z)kQm^Aaa6svpz-ycNAz@#YKpquF*)F={m*0?m&&rO?fFB$($-Fnp8dnViUaa-m_8ApMU5hdS>yW4Q7js|Oak%OQd zKA0K-Qj%B5zgKTPnABv&l^9V3|CY^zsK@(F4hlJ&KKfqA;DjFkS(gbWMU#EsC}n3p+Nko6c3X zyJj z(b72-hedK~S>71x;78MU+o2pQO%FpZ?TO3Dz`jV-35p7j#Lzi>Mu1XODn?I4pTeyK zOszYRoFs8P68rpWCv=X54TYE?suhr7Mzk97^w6QZN-h~7wht0UDynwq8yWpA!C{1% zh860JYci8tXJvV{Mx6@^$^2CY{}zH3i!`IT^J&1+-0F|#`pa$1x$^oJ5XTS3DY237 zmYn$3^L*JC?uAT1W^fAF@ztKfKCgUlYeM&kB}e0@pl1ZkZ6Frg#`py*O`vbY;CP;R zg%6G3(FZ$|67X9T_1{S=_&EjJ*nGghWiJUyakhigWUmPA0$)RO3)RC{`M)9|KA|q} zE*vIpNk-43R-Zjrk(W5AlbXbT{R46Gb_gX&5iSltMMj~J!X1g z&dxmiUXaL#@rGmhA}`YN>>Y4Ja}&l=|4o{_A-3;iX(hVvJ?+Ck3H&g{FTVzuUBJXa z5mpc^kzEM>CrgNv3r|c#A+oW=@9ki6zZvve!27?Z5!2+H8-9F}{`Y^(*LnY8IFhw9 z{x_4BBGoe`WfhE%wFb8b+J#8!NUgv)x-y!`dUFYg0V#;OFmvh*eG@l2boIqfDYpxt ziek}yn3)pO=UheQ(^k8h zh{@qI+ywiy$c@cih*am{!vO`^_1z3R3HOy~8OE3`Tw9%Fg!tTH^;kT}wl8&hGWXC3 zfra7?$wR z_PCbtY|LzsLv~WdQTp5&vw@*eh0CLKBiyUNot+ZdK!}=0_c^7AO_rd-uX%$+eu2jQ z3MqKSv)E^|H_Q1U>p2l(&J9Y@ed6CNEbIHL3uo}5l3kTNsF~L2^F^zg0j%V?<9^P2 z)k3Rowu_2Q0tw5sWi?2iWx;?ikUl`GUX6?16gcmS2_mJMTf!r=xBKMq4rj=}Q*WLj z+#NvUDN6aX17+NGyG^YXYLgSu5#(!OS5T9P$n*3BP=JxZQ2P+n^a=8EqbgvwbRdfZ ziP^4^Tq$bh$u@t4!a`%F*k+UwN?llB&D|1GWzeG((pTyOsG{>_1vR@JvgGX(uzlf6 zK$NQ*N04Nx*n=KWqqcy*g2EGNILl@0ePbB|3|H8z`kQf#gUoV^{KCIlU$P?=-Iq^k zITe`1Cd3yiFJr^t*+O&)vlNZK=YxBh=a4^tyoj4#O|QO3FrHHnwY(+X##wes1wFk^ zeV3D!qvszM_qJWkLu9m=WT#=7=5L=W@j{kU(wiWg+}!8&>~05_C?VeK*MBtJ4YSeJL_cx zNX_-hj@l=)eqCG%uG2dGPz#=(H@VaTp^KKY&YhSSefE|pJ#Y$A#pC4+TevwgaKa+! zTev0^=m?uY%A8>*q@DHyb)5{gA*;&h-rOw-xaa~pDc*vx&J4j=|*C8Om>@Ht1=fvfj!v@d#jz5) z{WO_um!9Icn3%bgq*htS)?qs4reWrdw?^gRG`N)xJ>$B|E!nOFA39-h*eLoLvU=H} z5C%a=DV`;?n>iY8PP?!)b4nO>{9|>55i|KgUr^c?&CCrF4~@SUWcq~rx!gA< zRqdj!V(y-|2i@ra;$T1bEP8$=tiYKVEBTSk7L!dvyh=*ED!}l9m$?W}ZuFoqe*SIf zJTKzSJd{@GcLn+(xQY*)1>0hgCu-4sIR7KkX6Vb`V`_c|wp&J@h7H$$?BV`Xq0hgp z00ce$_5WXmKH0K=O|BvMD6RDMmGgw-6R6YC{w1b1*Ay1Hn%q=j9aY5Mwp}DP^sNf@ z^~Wc%#k$l#?*Gx@VYfflF;TMz)y3gS>#BW<$jL2}m|(x^7xu(u2C3$BkJ7KW+gt3& zNaEhmuYJ`)KYjmZ&kYmQ#ETVOlM$mIfY1pbM()O|-- z5&aG+2Q=imca!oeisrH}hRmQs?Ox*WZE-q;=AsQU;;Vsh!N-NJ#&P(R_8ZsCRWt8B-yp#tNRg?iRWX zkZpg2TK4}VsQ;sQ{;yc$aX)?uyxYzfMAQNl6R1$)VRekKQr8ilhpZK*soiV>Kgw?x ze}yL{JGh?sVEFj$?c?VS)Y{k8pA!iz7;C1Xi6k2u39w_A`VqA>Ly4%sYn#vj9@wHi zm~aq`){GxANH?DGK(FM_gq8G~&Wf4K?gGOeX`R(H%6RSl{r=S5Y)kFjFuzg72t9Muz&p*96p`nn(Jv;V$UExD3x$ z4EM!w15%Xt=+t2V#<2G;C%@EOm3k{Nbhz0Gs_F^(~|U8bEe#v7W1dl7k08)_nZ=| z9ua2QM=mo8H7QmdV#USKiZq1Zs#5(nc_iJD`$5?lJaFf+XPrjj2;=pF&`*t$YXPGM z#lm?_%C3E5CxC+qw*`|SvBXLAC2VBA7<3)#d1+tu&rf&eO!8i=t&=XptgasL{MD-O z^OBJM!7z=W`Rf;v^ZV2xA_QuZkV+3^dCUS%MVFKHuP6331AnGa!V&4P5OnXqg|3c_ z)L;IZe+~E}u>VxU^zXp_r^`WB<}X8>tcBRZa1}4aXJF4Tbad2+(y$_eW@YY1_vEqq zzK~XISL8ass?fg-%UdnFgieM(C$@WkXFl9@u77FepBM~?B@)a$@M!*)CESqYXP@Gb zTzkNtoZrfkjTHFAsL(+kP3%5p*oa!NGIjU!%~tOlz)1&-5I-fIYZBjzMAE2`67PqP z*Y?xsoCfN(gY;*-%MRBYtf1IIP5cfjRmFi1NAg0%QyPipS*#*>cs?1fI32}gTh$0y zKlcNS`Z;@o2m;T^M@|ZlUNsxRy2s3A#*U)_<8Z<#muwW0HJdDa}t~R=MGao9uhn)B?v=?6fs6Llqk9#qedvZ z0TWe2d%kb*W~w_vchFz!$vY9b&1LaS+e*)?%W~cyy}iI|1H7Raq=^yx3j?wOG=QC8 zG~~>Oaiz@V+KxMZ4tBv|Fsi6|@T&dn&*tyDDH_=6S8_-t+-rR;AF$b&Q`RsNKNTl= zgA%Hgr_w|zKTp=juoWkX39^+sWLkF&lVCN`a^RZ;$hpC_VB`9Z%7j)ldrTigtk7xs zw2tTivgfp*VH)L(77=CuUUDHBsqNT);&VUZiQNLs&YLxp zF!WZ9&3i8xnnfxDeIH^s3=%yA{A4we_&01>@wBO7{jhENJdzO+@?urJZq-yh1dsDM z<0Dx>Q##=^&XGlwVI}&YL?$OWc0Won!{y(^p_6`x;$J@hil05a|MNWlKfRfh?5!>S zi(I!z;oq~yN{Nd3oYyb#o(>9mVHBv4;?St@kh&(=DH#ZCCT>K}R(P-ezRC_p0)=l78mg6T!E1f3l@B}UP6 zQYfoFQx)DL%jfaE%)K8|2X8-jrzUKPf8TVb@#*4zOv6C>W{oA)CZ_Q8(5>SFAbowU(>)2xG&s)YB^_dsuMA>2W-^8HD=7ut$(M&1$FUzSv@8Fp!-*Vbd zG`m7g9WJvDK7Sh?IZoqF=j&~LHdtLo7zz$U(M{~swO|wC(}cOXO4V(|9;ykp5;5YA z%KFGLZ5BvL6?iKZfcOd{${gg&zl=4fFI$!GN0PTlkCYG{jZopF7JSPXRI=n5a=TcK zVW<`{A^JmJ^VFG>A_m9Iuid%l+?MTPNZ*3O-DPa5j_k(IahZ|GR-(4f+rU8cnYa;H z63SZ3^xbGNqIIfZb=F{I`s&3jDz=H$&gy)DENP}b4PRm~!U5^>^53C-(*fUFDZ91C zW}qT~f(F92Vlk$^e&qcWU`pC;jvgGsaKT2TaFeo`K2(~tx26cd-7^2hQO<8+(EJ<) zSV~B#av|VGk)^aBb}@T2SzlVhhzUuQfjS;>qLdI}n^~|fs-Z`S$v7*^<7HYmxfLm0 zN<=no7Dm!??vF-f%AwzZy59p)OA)F4lIlVlJxOt{Zr0d#9TzxHB4{>VSpr{$^+qJh z+y{e_szy!C=QZvL6>|+$aXQ}0fr6daRJD4|YeBq>xs>3QrZ!?z*ZPCc5RQS9OGzqi z7;dKsjwwE3^0(Gc`Vf$5uy-TUUYDVtY+_?^fxXdHchGNb=uHgb%G}0y z5To0v)CsjV(-PhHIF3~g-Yiz?p?6r`rLzbrgdaghY zoFZ-{_xXI5i*YtAmi5LL5jpJEM9GawkxW?T=Ag!RS)b8<`hOH?7~_$fYmXFNLj0<+ zs)BD2`w8#s$R_bJl0dx z7;C`9ar6hkxNm)b&S|Ycwr?{6Rd4AmVu&kH2x$P&g z25AC41%{J_ z)uV)>^SB#!?;TX9B)FrXL#j%WNv(EXpg3pn#Q2-~$t#Fihir`}+&Dv_XP#19O6Yg_&Y&hVpClG4<#+PdE? z+ZGHil9!CG2lg{eOrc9^11s4VS((%bPtNA4EVeq6WUS#;8S4%<5f1VqCgSOS`ip7v z*R_V-ZA)1r>M?Zhm?P^EeIrFc-q>Whq8X2n@TR2Q$!`sGaDZ*;cUeW;*m83K_6xIk zrLfiPhamdEQ%035UEFB{r&AAop(ab>aBUluw5@!DDfD zGnTZrsVhD@KJRxt6=KTNWVPn2pu+wcaimEo)h7BYDw#yFpJv z3-6Xg)ePY#N$Td*chvaYLb7TJ+4$`2rgvj2SKJF^()7wTDc;Vonr&)Z0nG;XX=fMj z`rzrC(QYsK)88rDY+;PR@+bMT0Q0BV{ZCUgWk(YeL5qL$BN$VMc2=JI@qWMLwf~#L z2}zJ3PRKpUEg_wro4D%|Mt}fHK>UkP5xoQ)J%XveX;1G7_MPUIDmgC{kYT)ZlX_4v z|6JfKR%NWEUUPF(bG7SS#aX@1nN56h+{=X%DIG?o;Dx4JRqX@s%hj*X@$OJHx=-at zmwHEuVRDRBt>z$mWxSC3pk`%a1t&-4!lsxooC1gSq`6%|L>hPG34PpUuI_l|?v*Kr zb^Ld&z2HojS8&@Y2P)gdiWQgD0It0w9m-~lR_uqNY%iDFUcV9O2ahY0Rl3kKPS?#} z#0@p#g78BIB_TSCze`%0nuby9o+z6~=4?5*$!oX^w+*s|-GxW4SU67OSG@KvOJ7&3 z48KPJ!)Q2Ap~213)EQpcGuO9TqXDz0``pd@H<2K!W5-5Q z&^7}V;hH%KU9sEhL6tTA8-Si+UePq;N$g3 zFNQirRI^bdW^`3Q=Sf-e(o{~gshngL7nbF2)tM0`)o&_Qh^-~w=gM?y0otvEsi)>gQ28eyo1K>-iiXXzV_ z%vykD*!Ofvcn@|txvzIYKUN2js7n%>Y@*0kxKDLqdQW^#?);2Mg=OBU3{blS4#~^L zsia|<4*@Z-wToFhUB~36*lk<{YDpT+64WR zG}Sny)LofK9_b@1%cse2mUf*MXf1^-4VKmNJUk)`a-O^`XrFEjn13) zZ!ry07K?1QB%G96fn&;PEBL#+dY*doDsmk`os}+)I}sdBVzWy{V>JCylRX5u`&!}h zBk(>Ffy{6j)Kmqi8wk;}15^d*S5@MDJ@IpiMKOl3O9>gU^`LrY3S;9xQIf-cG}ZAc zqyGw%<}ydbOa@TGSGCYKi$^H2X>oeNXpY>cqQ)9eho65Va~E%vQcezA@Cn62^i(`{ zFC#(;b@fVT)h+6_6m)ShUS?5noNa#fd)iivpW&83zD}HhOgzV1Vwtb@o-ZmllPD0w z4XBCk&u1WG=OlhCjuEe4KaF1xiga2Ii?Y4(r;sW` zhSww?<*IW5Ko!{Bl(`*Bj-NvkIwYOBZI86XT9CrDs5(YgXN=q$i0_LEG2tU(rqls4 z>Vl-DdRPr;cDg1@i;#Za$Ztbj1HxwaVE!?#ScMGy{k z*7(d7fpIx_Vvd41#Av~F;cJ{D1inN(f3xm>FTsOr6U=IH*H?}kM(mv(Q-L8*(9 zsr5Gjh1&#~`J!@Kaic?~5!7!K8FVwvk^7Q*OlVIr-Ao$?d|)<94({cF`Is3L-h+8B zN8%+io#n689l`HAm!$Dp!fZaUmuOQhDFCr?JifIB@5bp^R|uvQU!Wj(qOYNeIRzo#9AWXbbMm)ZtdPmXRinr40=SDa(ihE!?ZYtLKr{MabSZ(7R z6%UE-Gg4YKOX4NyzDQGgEUR1>Do+|Aew09>-3Ju?&kQ1Bce28F($PAfxkjI;@z*A;{pI$ig1daP%*a@1- zKQ?$V6I$6(ibv>(jJZcMpJ}L6?&J0uHU1{8R}qN)pojT&WFc6?V~@&`Ay~~+5vU35 z=&0=#uVViFzM9hYLL@Neh<{JQI6cXMqgYf3`5C3%>Cl}4`gl4^MW6r^_*yy$gI9Jq z{eTTtF_*HGt=Hx_nlYk0aNX4SAYHf32_i%BRJNxdE8Jc;=GmnbYM6$23AomRG;hRg zZ@3w~<%TK1(eQpOPV(PLxD1V((SddS9hAn6CHimGsk-(;=*e zA6YLP-JM1D3M*@?;!5Zz*u@q7`hk_rcNT(n&`xFLaeW&7Q=pKbvO>K`XX7H?*rq%P z%w4e`R$g@p3}!m%*UXb4t8zbP&R?7e457H!=p^B-m<|Ct-aUtXT9WwR7bp4o^b`qi zd?LQEjV(M41;`w(09GCK6kOq;xh=?v`>x{pC{v=N5e5ad80Y9}KHKW2!q8^G{wu=y2k zFL4%(dlY&03%dxkLNgpkM$t%ZK?rrU6k_NjrW@TsiLzK_TAakvtz^L%&C*ykr!P!@2HiV@VOZmfPOb4+_jnm_$9Q_paURA6>74o z)Ebp55*rc!+ARv z)aK&LAn2H^+Q!a3A|bHoApqzC1&aH{+FX||piaIoHE(GMTH~6N+16A|J3>_6c<<%h ze(`1L$B-z9+whRb#hxk0ZDmrEW^C!2OwODo6ABzTZz#9r+DZ~L*~x>m{SF|~o#}TB zF6G!rHEC)+D*Es{j`KEOCnS<)0x^phew%lpJ?%l7W~7f{n3|4^CfTNICtNQV7$mX; zdLlW==uBTR>x<_dk=*2T9lGkuo_bjG8k6>n_@04eO!ej|nq!gClZL0IUp=u~>afQ= zt>TE0(Rmw#%Y;byo=~iz#YrR)(zzKj-KjQ^qrrENeJAkdjS|RORHTmDmFpS&-UIS3 zL!J9>g6M~3^~kh1gk6`7-!J=4?RsOxE_*9`jqINDojA+)Yt7XKlIZtuQND=ymrUk+ z8%9um;T|4LquXX0dhbvt6MkKymka8Me%aAGcC{q0GR;}P`YoSg7dhXJnu9+8YXg2G z=lgs{4>v7KwC`|UNgoM3-G2Q!I~VmcuWY9#?|5FxA1R&veuL}#e)<=eeD!Wm;HN_G z8>e)yLih0Rh*n#EitHci!<&8z&zHX_ec#zkU_ROz13qFIgFl4Qhd;`G@6n9hb*N|z z(UI$I+elXFyB2@%j=Nu;7A4U-@qa)?TFCVwD(Wa*36@OpOte&8M5HI!$ZGPnK7uX?}yNlE@+sLMOOqoEM zi1TK4Ts`m;;=?;bEE&Csvy!kZ#;HQ(yKhiGGTU5(LYMc7-qxuN*{6iM{adZbwDKJhw(s(Y z$g+9s4y=X(6L<-28bk7)1RFX_F@R9nZ4m6;3)(ljj|mR$P3tZV2fyc4=M zdS~53DOnQ`Z~QWze<^a|+MOxQo#!9M|FPBtQE$x-91)`Vn zkQTX~T=*25cd>t$(XkN~@Cs9~Fm(l(tZ*q8GJ6dY%@o|IA$s9!l@1R1iy40ty5*OP z2URjQ$~_Dw%x4pg;3Y@$VUXQ5ET>oa_H2+dBourYTZ`cjYe>KvF3_st{dJ{J{}iFO zRtsj(mjOtE0Vz8Fi%d@_Q%|f~A9)8M(Blt`Xt#b0Z-RksBL=vGewL`ntKSIym9c3< zU||y0wGj0NhEUj4#r5HaSecZ?4e5qpnM9I{+6p5h{npLuzYRwFv{i{l)U#V-Y>;ji zs|a-0E zgSXMBl3^68cEhnuI%<=K4U-v_0Lh?+Rf-hz6r;k~^@^2hs^MXdk&C&j6s(l+5oyvBSG=P z+RZeQI$+O7s}N(airk@kQDtN$!gsvH0K=2d%Pv4hV+f85cCXP-ez#Xw<6txY8~gr8 zSR3{JatSx^xDaL*1^JrgSz!Zx@V@Wu&V*b_hV-xcfvJw~`#Q{ixH%txHz%4YjvgHm zzI=Hm_!GhLPgTu-5gh*^SZq=pmF?k2;Zf4mRps~ovOOJ))Km&d7*I>dkU&67Oud@c z93`))$q1V7w?o%TPfGjx#qIb5!;Y%W5Y!=o>tNg`=f@8_J-V7NvbD&eQDYc_ixC9a z0x^W#)1YnxFjLK&9eb`ELCf|yw8zco9;-&BEHZAT>D5NE0DLbZ(t*x_i-F}X;PHQK6hXt}84=vik0?kh}F7kl66XX%1?h+Wn?sk~d40dIjL9B(Lo0$)Tnkk$^ zC7lMBk`f&(VA~ifC+f&aC~}&Iyf-+8Dsbt<&$*YX;mOVXDr{DbZMAdZwAbI)_)8ov zF|U55;`&;_f#x6{A;*l~7$cEzf!&W63NO8!It17v%ZlmEs*uD`AAP16-?v6!R4S*( z#F4}itK(G*E9ni&}7Z=;2vpaQXf+)Qpg*J;XtD3iMF(Fulg?Rml+yRmSGc7LL81R?AP>7#q!o*d|WShJk|#$qj0j z9zGIlzhwr9I70S~Es~i)WNRnUqIahjS_-`Qmk=%$%+;$zu4d z%C%Ohoe~8!=wWP0U7ED_O+wIJ>flu&aNpTr6Iu;tu#Z!)W>k!5?m2&Tvy3KR(AXV= zM&{9!9JA`xww7st5 z0DwivQwX?lH_SGaDMQz!o{Z^_q`D>-Hwapg^FjYWtwWPE+foLY2H5%Uc_$;wOpOb! znF2^eokMOIoU{`_LQ3i#n>#M#j%8(q#$^>+<#`TKlVY4--~-J|>^ft8XZ4r$$WGv@ z@V27ia0AZbMQRG2BEOD+JI9}O!-CK37@q6)xtC*TxF_?tC&$v#3X{#^qO--4c1N5a z@@D+ZyTcfx61&X7>uo{e32Z#k2T}636e#)jV)dVmEcr6EhHkhUoPGYQNP1d(c_5eAB%5M#^^U{Y2RBZbgNm|v76 zDhrCU# z1Fbu`5Ha9Zl3^}O+7^04!JsZ*Gxmoi9Dx%#tj?#z4*rvbd#Y}sZxf9ZC znFhBDCm8?&Q)hs|D419>=bm7}OqQ8{WHT@iZYh_Ll|`0(R4X_4X|`oe>U=K6V@)1s zA^*;8=iwS7cWlU-A=QeFU=E6SsuDM#0civ^Fx5w|3)fO<>hA4Xa^T{($czXzPFS$X zO-d|H+3HUUI+kX5_@t9HTD-G&lX7;wC*=`P=uB$6@2*Q8c$5@KbZ97^IyOncEW2() z{84}o16!2QCI9iDKOoihN7$=R({?lTMuK1!3j7n6QsO+8trroYxS~F_#l!?nrG< zPo55Vc5A4$l}sQWE&+v_%1BE-;%KcH1u7R$*k>uyHleDqdfM#VyfuT@(MMcH#19&P##HLTx0+hSn6bJJ?3f)e%!HZ5$6=Xf$_jaEzli$~VU)i#`U*Y{P#?Gm|vL@W3 z9dyufc5I_#+dH;x+qRu_$F^b$+WXRsuz#eYQRhvEvWw7t?Q&89!qV`Q!$-As-h|*x>mjlmP zhc^Kp{;yO%WFo7*=UT+rV{)4mgQv;v!9B%93%_IGnC$Q^0K#sEB5q0F2Gg+Ro5fBz{tIWj!jDU?&HB4q3$`yr0^yeJ&fgs!j? z8x#6wH@Ec(BOUo6^3B}>WEVQ^$S23cBkD~!Re3OKe^Q5}0d>E6qfBSJe&>pO>?%{V z(P@PNV&%~4b?WFsMdL;BP+RZ|YCOyg=begjY#Y-Jr$y}hpARN9BkhcdEO3o``69c}z}PAJEXE|(y0#NpGzML@ zd4&z)M%D-4O4y2moIFwm;Ng@?_2)3N(%%%xeNaJ+f3zHZ5>H+zV?k*C<@Z`73)bXQFEZCzIWDPuaOzh%{Ha&+!X zms0a`8#L(Ka*Q(ks^Xx7_e__mO8j^$M!2I%m6p$(lCl{^1U0qfjh*cr_U2xC+b|!? z7RSd=O_z6hoHceEyDi=v{GS!zO<#=;x)ijk= z@G`VlYDQ|Apyp*{dj^fi$6l2ZmFdn6HRV@onhSC(yr2`~!6fh)ITnnteh$%fmj`8>+9b~o$7A|I$K#CzXvvA-&IA{o9SRvM;~j`t6g`jzVfebHh|0;t6p=(MwuRFbUdpR zEDE84#+m*CwbEK{H9RlN?(1ce}9<=!rw&v|1J2(4Mf7F#_It)u39!+|p=WvyzM)jjhG(P~mhkPo}LtSv#d9a8+a#HF=g{ zWj0#Wo%*pfi{Eplm9_zYaZ5^man}09Cp5BLhug^+x!Fi@y^#lmL$zn{CjVje!Gw#5 zyHVY-IlF2Oxlg1jAP#rb8 z#MB+P(V$u}XliP=vcf*;GGPd!4_Jmtt@--{_o)T-pjU%o{~;qfw_#Z~w9M5)yR(L~ zj@8tV16!09IaP_vM(7QQT}k%QEUElQUpetsK04pRxOl!SCXclT# zNL&=<03MS*)$7L52)jDytsYM(Az8zC!(ECArrF?#(Fk!{)>LVR6{VY$p`!GPpvfE} ztDOg@$7QnRO8OOv+4OQVvTZ3WeW_tsK)XHyz*9ddoVfI9Tl0A; z2!E&8#RA#I#jIinv9DyFr;HzCWr`Lqn-i@;GjV>Of%es^LC6xoqXD!qb6XC!ViC|a z>CYQ`g)Li^+}ASN^;qY}9w|xG-$l_-wFCDtCzoO`rZJGH*s-b{r9~@0{N)0TX&qk) zh|ft)LewEv(Y6R05HL_)si`wwC5E+H#`n&QtXS9E|&H=n9~~=o@%(ME*mMSG9N)ykxwfk=!}r5uBNVLTQNR&m<3av zF&frLdt{HPr;>I-ZC^E7s{vS0w~Jck9cY zf0ZLVV;pdyg(lxjgE-U_DtdN?*&twvkiPuHff&-LNGDq8;%{2On7>vnr50Yl`klAQ zL|JA3z{-#@OflH-}&*cVduO0eHt>`~&-z6!5P zXrcOW?Val~>0c7<3EnrYrleZG4l)1L?tDf&{RPp;6c+XeG32vmzGsROR$RC>;eLpSah9&wRD$+mUp0z5D@}jZ|fy)+y!QbRV>%L@(;~$bWIc<4H z?&{VfUI)Vlc4dFZ-4t>ffvLqqazWHu577m!L_{PBYDA#t(6vBU8mjU-q2nEOl!++& zo-fOv>_U@a?Ak1-MK+w7dp$43WM?NEB{M?9ga!%&ZSRQXrta!5Kcf?OHIfxn6^UVY zP9Bp(2cTl-Yz-`YG^8^g!(M*}DEEfwsf`4<2nP_6)WzDD2N*w0wbIhSsj3HeY%tF9 zT2yJO*K}0W<(3qAK@)DDXj>sqCMN%r{WC5yNu6+kx!LMVVau<}==*f&3 zs`vDly$sLcfL?WdJPEGD*RXN^;z6R6dqw7)3ww%OLmw|{}ZsW*f-`_9?I;`7l;p9uC1*uF&`RB5H*g7N^B)0g2}F3Pv2SCPB?ryyh(#$cJ-$Lw9Je6zuUUq zgrCC9DG40pYO0C|+C4B&elVB8Z`(e{P?XoK@2H5M5Iy|dw&s}dj9f)!fz~CQh419yULb(-Ku={#`-Ihe{U*(;TkkeJO`lo$PQ~j$U?1^ z_2`x#&=2RO%c}t{h1+2yzUd^r`Ooq7$PZ`=}Y$^hQ z!g5F%2`IQ@MqH)>qDa+0fj5p3S~DfA{Ce1C>ZRCCAiAw^_jQ?i+%T6k_aO55#UgMZ zRHS4$&czn+2fu;wdF6-um*CTel@?QlX%KChY2Fm7T1v83%8ukInwr1cg0(7Ok(a&7 z&IRU6*R!!mlm2AH?aHcU?y{*?YqBM5Zj>*PJ}+{kY3r^a6x~vjgb~y#`f?o;bkU7@ z!|$>Rx<7V-e|7#zX~f-i6$Je|0LQikFYHNJ>Vyt{n|R)^@h78N;}nFwUxC`0%PGeN z{DJ~+QARA4Mn~c9U(w-H-TY%fJ2T;=0-~$HtIaV9vw=ch)dC|0oj|}XqmzP;f7V#J zUC}L;6cMMQJ1*L9TRoga$sdLD3}Ji6M;N}~9ytDPa|9p&YdAYv=PZGPs?km8Ojn^H zJLI{b4f%6CK=X3uY<#~3xxsVDo{6T0%o%TDGqf$DTgAJ?qC-u4$;c%4 z1|0!+Y^Q^2#Oe+(?L^ny*jrbOst!m%!jpd5t!zrJ7u0xS>^9MXVN1%GR-qReOE=0h z!!=Q;jcD-a&E%h-5W^%fAb-U<_^S<`(|hM%VU}M~87#sQo`+UT4E@GO(KqPeozAON zx{5}Vq|&6F+c;%=y_B6?yG+a>mk}eOoZb1=g)*f!WImh`8_1IM?N@F>j-NA$1U`!1wTvH{&wi z?U^M294gtdpghL>#Ts|bTwWax&;2F>x0S(V$D08j;*09_=>)V}R~?$4A0Upz;Gmn) zZhup5#Q7r*SoN&|v}g|D>VK+PcGmp_<_U7vh3|rbWKkt{NXG7~SHvuh(eImD5IxB6 z&HK905HNPv2Dx&tM9z1|0As?(PWf?1wQgPL;^@_#KA>Y8a+Ju-gYS^r+&2>1D5kOu zn)QO3>fK6Ji4SM|*;Hh*$H|B}R-ZfJ-Da*?GIGL*iN%jO{iZ}fyLXHX|~fnJ_0w6@9@4Puf%vs z4SZc8lgv+ZE11;rW@O{2DCw9HUY@P`pizbHuecavPvFjch%N8n8;M_nRkuv{%J8#w zTv9(A!HcN65l3)>>k|#_vgTkT%{}OpkyOfIY2~%;g3EeLl!M!q;P6y9xQkA&6HWuS zO6{*PSO~VI(ARVAF>78T``73HZ)_q(y+&i|WA$v4r%Z-jYN zZQp@v) zajNH~jvG*2+JD324DM49GhpJ(epgPc2I)+4R*qJ~^l#RxhBE|Cb+|746kMeO?H5Ha z$RCG{q&l_tnG1}9d5dBlO;{h#T&^5FU$m`#s@I%=B3e=>C%~MbIb|F=93k%|}^abi6L*0|dhh}Rgkiklk zLoEm*rkIq1zy(uEO;6Rr?WAJc>jEwv{p2+Y8sX`&kTIyJg?{8?-|-}A<`Lc4Ar_RU z6|33o3NNy5HB5kQH%ozp;f+raZpWiqRoro2CAs?YuR!6AJN_V7%c7BHS70VUiW#_+ z4WUJzD4~Hip=_vgzL|tzLO5(E-fxj3!tG z!*4zyq^u;vuyBWp;zo|*h8!JvC3+3Zp~`vwc;Y9JWKQjbfnfHp)#)ud#12*h^|?nI znZtd)VZYw{dkqj>h=~7l5L-1*lPA-mNWSUc>IUN2$1WGDp7i!Z-Sr6#OZltht*4+0 zy~cSRh5nEX5r$&yqer+qx2G0$KZQ?*>BinoL9PQEzfUxrH$s!-r&cUi_$TI8zc2C! zxexV;%sS02E{@^u()g*t%safM&Xv-R*kFg|yBaOkfn z2N^H*terYvcX{x5m2CddEobXvcpzJy-U=x4pc*Re9t1iQ!^^Yni9NXB1pJu8R zY(^{o^Ss7+(9z1<40S&JXbBmsQpN90Ul6sAf5o^gcnZA#RB}e2|F;oj?5S4w%9WINnMgacq=yR$B04ka3F{#5A;8pYrCxU%KjMNY z8ITAp>(~2LaB7Fswk9L{&M?wMHCyZ>%8v?#5*fco+$fSA#2V2A!kxt$nLfFXVlkUd zx(zkVN)yC>x)Q{$l(yllFrcqo9K~Ld6OIZbni``R;FuP{(by~63k_EFNaM$e4P@7e zRB6^^M@p5E$F}q$>>fMPi+2C9)gaZEhE7~-QtebWAFMb@s?rjycp+wB7`(&&ui-qX zn-uZzhdUP@hzpI}yikXtb9RZ%*r`r?+fwP}8qqDZ)Jk4md3>U^6TB+g?rFyp*x&T8fH(S;;*V`~H8?J{7?_*H$4q z&G=|^p3QHN?~%V3z+#!aig@6H#HwtIX+S&`u&Gsi33A?$j!OBEmOrABOGB?E9-ub!J_DLdMQ>al*m-5S-qBeGR9QlN7f`$; z6>q$y`>V}6zY0!Z|K&$n@+MUb);dj2hs?YIJ+eivA{)V*lq8LuHIOx{elGu}Nv)jc ztf6XPc4P!QJ6;wSm z`{Rv2D3oJl`5?Sy`Bi9wD!Q7~2L+c3;!(b`tF$YAlMAmnP2`A+Qj8~qgu?%*`bU^B z=rx$QR96lMQn|Q~bzo&XPwd+4d9YhZD$>4Yg}FbHyhhU?1=4C47*~8~bmi|4D{+Sk zl3rB!=gyE45}H6*U^PkIq(>~7s$qh0eh`%9Adj^_a+MsdF&6DX%)!E7=>n_j%=PpY zm;V}upFor%#|Gu?CQ-VA*Fn-pbRo$rvy(LW&A$Ghj~7a*(4-NJ7M$&H=c7voJrS|O z5^&YKT*h4(B4h$h^Y3;C%m867H^>#)`;5YfN(Z3z&PVyOgV-vV+=^1&!5GWj*P-swJ^9taJJb{Su9v*kd}Ix{Y?-JULuuFRz@)DwwWe z<%(KI)An(rp}zQ%y3WghiSFPQH%Q=b=bGvO>#p^hJ|*E^F6U671_CBRV$|?~we78U z4B_=?Yn)hu%UPcrNn__I0=qM4oeZNql{?=G0z(2C9O*-GT`*dtA-9q~cg!UsLkoZ8 zPkAAZ;pxKun090HOz?q-NZyz!((jjFd0n2e-dI@!arD%GKs9-M4m=vL?gzgadp$g}F+qMI&C zRsyR#cer<^!SN{$vrA|Vg13Yg*B6;ms?6BkltOCpuOd>Ve`>};ov$(m)%?LKVsT_@ zHmUZm;lQe^DQ;pa_?*+4rCq)~Y$LCdbl#DnUAH~R`rl&h#cJXCPir1e<+Ywqk%O(J zD*bOYTpfPnnU>E5mMZ#%hALSnx*1!`kVUsWss&pcnI&6mkvUttM5CtGU4wMh%c{we z;Dw87v`c8YeEWQ(Lc3;KV=Q4gW?bLeE$wj-1xUvvJtgcL4gUEDw-~l?%@(PZrvZw& zv1iQuI+%H28~?jFhbVTAP!Bu^AJN2Ng&hG&Tb`k_Fru(pRztk{W_%>h+Oq-G{2NS^ zOO!1(sJKln5!EO;)s~9cfe}%@p`T$ik+Vjfw_Kq1D4J_OUJQ*4v8EKyL0ME3UHdJw zDqixVTJ!xMp2c)69vX?zzDXPNKhc5L5^41IwADX`{D|P{hZ!bxBoSI>ZzcM@(&L65 z>+KQtTcKo?^#?kVB$Cue=RsG=7;Exs=xa9p$aBP?Dso(f`EykJir8S&?Lk?Eb8-o` zwp1=`kQ((8<;!`Sg6W0GJr$0WxUh>ySKx{)VSv6J*D^hxVuN>4m?k-2fyb zL{j^!_RhAE(y~sQ!VRjY{>f}Rq=IVZQx9ZTP;Nw4rG&ubrhBdN9Glyqb5r{u8Mg2j%*m%WqnG`P%r4*cyV(Wmv^7Vz;xaD!U zd&@cu_AQ1!;ff>g4vgJ^AfLVj51czmaRvbF$swjb8=ZKIyZGEYMBbTGWJ&z_f_RcM zCt@S#c{6C;(w@0AyGgQS{hJ5>8We8O3Y-~s(9Qu(i0X!5&)pAh_}vZ*nDajkpo@Jv zdHB8Px4=isXMwrS>!^`o9O_=&-E}zpL?_5gif4&efyki2Eyz!A*8 z$O7LfFQEB`T^s1G!7e1a$^*LIjT zZx~SEh&=*%en0yA-w*U}$CIU`0D~a*3Q?V9C@b=3Y7Y{2(NpXwESRtr`88|$^$k~Z zC;M`JWf}@i)|}x5Kq=Q|Yg1B<7`_L{)(rp3dl1`~k}!6}X~@#C%^Bd#88#rH)$jfM z;nRWxgB!YM9Dsfd;|`%Tvo?RtzGsKaNnsUHhT-6f;~xYGFbj{+PWK#16jKpgP~4&C zz$#SHB64!j3{N$C(6Bv?R9xMJm2k(27+C@@x)pllVO_u z1e4-r2hp@lB&1*GNWWU{yeXtS3s!2MtZ(|xm)}^stzF(@R%&-0^Cn`Z8Mq<~&il?u zf*PdF7`Q?b2_~m7R<8zwpFBHDzbaee*D#6arY6vS39n){TQjZC>Do8fPCAONrP^is zDINt`>%ek3o;Ss>V&X3LH}AhdUtN{tkPko&XDUS5flK8c%t!K5MlMRRR(|0K#%gIa zcoSqk1><$#e?vxcgR-IPpMOvsfbD4UV*GwVRGYffhr|DM_F~uKAM2O?EY^}78^F`? zTP&hT`>Q_F>{?`;1!7QK;mH02#PA(>F58W%+YcnLM9r+VGp=GxB}hk145y+OP6ljx zf#wZ}gl=zc z3?M_Du7h5}1$f2=dEVu8_E@*DQQMr*9L?ezw~YTvyUxB1D`cLg+Wyoy(i6*HQ zZi#g~c&TI$e;$zdQS?Fps{|}E!aU;l=|H9Pi}@qi=aF}(jvhw48pkcT)6XU%iSL7R=Z4Yj>K@s zb!NQ<`!x(a*S!zqm{v!8)-95cpV5&@XSa3f7UqNoWYR}ax;w~(PoQ3jfT0ar_y?^F zfulo`*~%_F^Dq*#E@=UP{>(WiHI5;_QJhEvdleM;@4s=*N~vQX8i5UQ0r)PI2N%#a zVcz9oic6<#$K$Ls}F~Qk@ zM~yD86RInGmvLzMhlH%DQC6mowpjk ztyr)ZNA|QYJn~zpi-|R4>>q(O=N6cg=Qu zUrfByTSH*))z4&K*q_1Of!R0T72!`;?lE1{DBqslm(U90uQ0frC;NLH;FZ89wC2E< zbk7H6`B8Q)%*)X^(I-(Ki?B{qg$DMEhAlV%{ zV6dP#b=5-V@&f5a*AHoMeYpO_acQGj3X99jsX|N(FZ>3`t`DhhCl#QIv{p35wzBA z*~Ml)X5?c-vpk6I|HbQ-;Q85mFiOqQq?8r&L(g&mk4{VNx;DkjlBC-3^FL7F?2bV1 zvxW2ZmeK1W46^c%&SJ6zH2uNsbRN6rc6QP3q)M;DCgt|EOl7w0?o2RFjx%W=LcXir zn}H2%Bb#u0V*i+ph12TV0-S7TSvF=HU#cn>o(TjiR~ELdC=wS`8rj^${^`u9Plxz; zz{AdY_KS5QWE4IHQ@*Cs3*rB$56=>95S)%bC5_u2)~}O8D6|PJvzdN=oHKTrFuHQjpfa0wP@P&@hat}mHo5*UcpTx z8|*C{kKi@Vhqj|^I&p6nu*)6nmcaRmQ2^aDBP#!U91r_&oKy1h4o>9E8|sj2$?0$o zgY@r!W&IfFWOr2rlZk4hHck6zr zwSkA?ooHNt5Y7?5x=#Y+Sh^W_n(j#M2j>NPctIAO&ar0|_b-{0KY!31P?6_kJpM#I zjc9rny4&m=Wzt=phSw{e980?pO;mAb;~F&`G;$*d@{iuh_Y+0vU|6u>fX2WC`|UkK zdMPZ&NV8LHlPy^T)=k|(ZEk3BnOjy8O+{{4e(K&Xk%c^a80jMsC*c7|gC+1vK1LUyg+y@38>jF7#Ww{L$` zRB#M?I~0Q?WZfAuplDVV5~9@g^Pa1>UB?!!z7V=CqA?R|<}%1AsW@It!;znAlDPCZ zKdrv-WEt&tjg-qUu!7%L=x ze`TCb1U9g1uP{2KwBZ-JpQNrBs~M8h3>BfUt`w^ow9&D0gG7>Gkq#Kg>rZ;M>cAZj z9+Xo!xdJ+Jeq9ilhr}8+-Jj^k=zYJvS+w$W!Iw@gw@tihDn}&sB7G>i^Q%MojwkXXWpPS_0Md;l&pw!J7HD(A&t zXpqO)_61$gqG##$c|Ke+^H+U$5AF8fxkDX^E4KMJ6OXN`ty@VY?_5^4}8)embh(ePTUemZq z$#n<4;O^XG!m3V^Xshtf9z}`u!m_R1Kt-|)P8$9#8mE5WCW4NU*=btvsx!+39fhSO zz5bAjcQy}AF%4^uX(%N#H~_>tX*A?f(vIuDTOZ{hI>^78hmP z-jv|;Pa<^}&gz0G`{H)I;*a)qf@t5f5lVgm+!1Yi`9G%VgKme8eS@K2w?-n}k~0dr z;{)&UDocI&^FMhj7Qdj`j`4eV623}4k*wzVLONf`=h6-WXJO6tg4PXTCvmxs<6OXD z5!_><6o&P~En(ITClpdNx1;*4G+|-ij8{3tp~@ckKf# zr^Ti(oNz(3c8Ofna5qei@wLoA7GgBXeI*D8)bD5XT3h{WdQ!=T~{PQv7@n9(dK`Njth(^3nNa)0XX@ zLjJ07sGnwL*REJo*|2b_J40^$fs`SXke;j~U>K$~gJe@z?>>PcuPy5!tNmyBJ3O>a zR=dS|H=%^_??mSw`$+?&_;0UhYC9N8_h528DRRVz@q zgCRNfVbM`_?2R;1Y*zIxc7Z~dqu%OOwqbwKg@Mgp(eyY2ci7d#6pbn ziJcg!k4*~r>4;HpqnI%)3;Id&0a8qi+gkZB)QoL{m9ub3m>c@2g-h5xJHLqmHuN67 z(jxFyj1D{Sc?ihf%g1oBnBMxav-nv|Q$fj5AlDHLh?}esz2rlP&x<3W{X=pMsLn{?k*>5`v`Fn4R%!F5RI~$FeW{0% zD+bt-X4F765k=_4T>0y{2<(4#gBLKgn8-J#7kQoMIuvBvnH^xe{d@?I;kt;}zWKc# zkh@W?#@40)=;RqT`)yva1({B5@W&#=z|yz1Wu=gpacQ4&-E*w3A`#x78_%%sLq{|J zojDE%G@Co&>gHtw0H-XXpjJq)toxc1Q(#i_HUXIbGY@QC!+aTCAQ(8vZTZDb9 zu{njp<~AJ1Gq=Szq|y($h+Zi^bmZnk2McXl>O3DB50(%V;u1+HTHWh6>_zGvemZMp zp_Pj9N1n1`V%oWa3~rzzuWt|xZs2mZPy5kc;{DmXgzn!+rC;5EiP%t=+nq|%UKRi@ zBJU^glfg4K`7WXl@3I$@*Y6`t38WOJ7JBwdUQDk-)VubsRQi-%;%z%EyQzOs z7yGa}SEZcjawg~&xBdBnC>&|53G)jBk z^9QU_f`s8C4NPa+IH^UD3O3-^g@>9PktbSTWKNG9%_HYuBIqSO*^2`&X`vx|kWuRS zYiNf?;m?rZ&kD>I8}t=8`8Fd~ybM%mQ&0MCNh$INvcXdV!ezb>jVJY>q7}$~e|rYi zqY&Rynx&lfn4wlYDc8V#kuz2l(hLdMV*RrI8X&b>o;f*vMuuf}JXNdyB6MDbCvI(5 zf?9R4d4oXRQ@}X)?;cWm3BT}-87GSpa8ve9`pv)G2SFk58T2Ym5NrxeZ1PNO<7CVh zeZ-K~CNR^Ir5T7_vLw@;b~==m`R?(Ku6-|sgOCJ-w<+byYV+Q7 zEKc|=_dmeb5d_Iy0Y>fk0a{PQbvrUSDZ^&$>{AvYegN0T*lm;1t=XOPq@C6Yq>?Z3 zpTB_63GKLJO~7}Bt)vs^xD)X>bE?sXXd{mZqg8nC4K7&$vO!G0dhw>Yq^Z+=Sihvi zPQYRFt0LlMG6hSqu?h;i+y-Gf1Ub1ykAn+{CC}1kq57Nab^BI)A7zizWtbg&Ezc9m zN}EPKsgo<9t(`A+)WrrS&K1rQ?dR%a+$)mOlPnUyH=apG9Q#4#z>SgLd>=Ixg zRn%&Fm@)Li%(T;$`){S77nQ~x4M`Uu{Hg%(JVoAhP~5kK8hQ0=w>|E;Dq^&m$jLQS zrD&JG2jqGm@oN3JYGmVQ?_!57*nB-w9Cx~4$0Xtv!Hv#L9YIK>E$CaGYUgq@MWs73 zgc}}F7s9Y$#m|NeR*=(CfT7X`ZUNm@e^& zZfq-2Qo}c4qldR$0ooO4v&!{U0{Ng-63;UQ>!w>w3 z6MIw+_)swDE;)G=3H5~nvo?kWy;&WzoRt-|jJ<9B%E1j-5=?XHuAcpdv{A&>+Qv)?cCi*Az=~A5lG4Qc9yj zcW_Uv5V}I_o^gQ=(*PIbxJ*cWYkNhi$7c}2gij`Aw@~`lUX0%}mvnNd7qmmSHuDik z*2t8{54=$ycol2p=kyQiir+CVt^;%fbq+zX^^mkiQ`Q3{ksendVf9AjF3Ha6X6s=r9o#Yz+4BG z_YPT%c}XCxHH&Nt;@DOP0x&VIpXdG)C0$jp(w(J(rP|+e(sBpyj?;{>Iy7_=dz;}- zgaazjJljW#`nhYto2EO615}J&&*9t~HsT!So9RA?mcH`cK{)!=F{jREJEMgHlM_c^ z`XF#D#5HTWooA{)39oj6Mcd>4(B)}7VdlK5(^A5$e?i;QV#L#5bSP`qr|r;JCO*-m zI@xB073nNJ`86u?7crKaq-duzmz&_J2;`|qD6g5x>DGjwc9yAATmMfpcGPVaNbn{e z{p1=zqO)_G+ZHXsvtIu%o2bi=mmE<-KT!hh-`tX$*)ZG6a}tC)(vw<&ORFAj9*D4E z*BdIxuL_i5-U;oSEA5xy^AtT^!MwI3st1aIc``{YVJ@Ndfkf5GmM9m;G+44taRH zH?bE@Bn@sTszh#<93HSsFX9|ZRCgPD2o>tD5Y?VevT4JwPMUdz0XkwAA;#2@1+Qwc zu)t#(5O07Jif<`_{HG0Yu^pS4RJK{_MzyWURDCGsT9^V^SW#7V|EA(ca_C~0SN6y6 z&kX-Ad7bRzINO%nb&zJ`nIH`Oh;RjO*`APGtV_#fWbcuk1O%{%qSuY8a2%jfY-Q z&h+ygJ7ne^^GAd$0mi1lpWVq&<}115b6j{+H&Om3R}$F!n1H{Vped)ga7-P0`b|&N z>`PoAhwkKkf>$IZk7z=fu8dmenZJ_Vi+d9{PijUrL0vsf1>;@OxOX$*G&@cEX>BRF zFEYU(JC1rRHyw9)uC$&9Jn?WIrUFf_UXE{*at||Oi<)ubJ5W(7QWsgGJWfiZ%Nct3B*qi!?Sc$X-rR{loS_S&9jD>5YCf=FnHE{$@$~0b6JpL(oLs0LA`T#etZn{GhV~EpB2Fl70&< zz#|JN?D3l+6a61y5yR4-pbq^uEYwh zId2RLcZz0gHKj~r|ydnMa;_C%&P1A3mrF3e5dP~sKS9L1hjah<;TZaVu|DYjAARTl z{0jm`M*mAS&s5%W1Sq3?HoeqNx@hM75tJZoAZqAkZ7}$CplY5wqoGj9SL3%!w$fxi zFTJsW5)r_g1A5BN+n4^l9Yy>b78nXS02%puh@V6Ei8{r;cx5wJ5N!;;w&Hk|^>Nwy z^ftvq-u>?V1>(ork*^2V=B*an--jb_<}q+y5@2|oIC~TrwZ{u&$eHON`9TNc*jNAO z3t$`A2TO@D6c!NgCY&Pwv)E1poQv3`ddy9FNFB3UQqB6rL_sq8xF}HyyT3D(RLmRs zcl&&Zv1JHPULj)}x&6n}=``){H`0V?Ol0n8Z*OT}Yx_L3c3;_NL9Qs%Ji`XgoB^dr z$6K7p94|rdzh!2@a#Ca<+hch0n1E)aEbfvCPDNCTBbLY=X>?1e>{-a9yCB_!wu;GW zI528>fhLnTu`3sPgZ-~3P4j$UQ!4WiX@#ZLY4(Ciqn!lPP(R0&4un);w0$V->?k)K zxkWX&F?Hf%Qi}(P63HAUUiEQ4J?ha!K_$Wf*#r9%EbHN;cu_yc68})v=<>S!Qqj|| zqOres_TEE9RY_6oTQ8)wEnbc%w>pL=7MMy>m{O(_Et~NuX(|u#y}3X^Hq8M+)M>r) zU$_jYhRY=eIDp@ADRF-l7~qOZX|l55hv!AO4bzlvD^kNJgCFi(+~ycHiIFzsO+{pZ zF4jCn>VQ_GB=lm7YW-sqSBZM+4TZl$QBiD4DF$qk=O)DYyXsbo3{+A~8b%q4vk`ZU zhe}$AkY0c_qmIJeJh#>$OjO%^VZnLd%*vie=$fB+QeSx`fm59_IwRU*uFY8z;$}P> zU;Alcq#YcV=){lkD7TdQk~c9Npu+PmvYdt_N&MXQ5H&5XQuS`&998PtQxlZgiW4O~ zgf>9=>#|&A(P2d#*B1>uuct5V@i$)DG7ERg0~^Y{wmohMxc&}k5Fk+H(# zXrc3!V;euM#da+zwZ62^O*pCWRg7^3$6|_{CXk=U^A>_0FvZ zy}~F1YFlL8>@o4PP)6%iL%Zd=01eC&9Bdmgs_XV>-y7nsndpmlg6P7bdjks}Ml{8x z?Ciq1>N<3{N2zr~KU?goAKi94%vP$4ZM5ouoCq;0TTV!Tzk{zZ8fr6c#I90$E0^7$ z0WJ={Ao@1?i2kr0s3JR*wHFrHCEaC;e0vZcIb-Hlj^b=dAtTW$7>dyHXMw($04z8= z4huIS2{emRoZ(XQgsh`q&z0_8?q;~ZRn-^&L5~Q{sLhUkEnI&YuWs6H^ZtjncMQ{XYqEqZZQHhO+h(P0v(mP0Ta~u$N~_XlrH#otXQq3)udi#~ zzD|FC?&tq{V((b7BVw)Um0#wkm!KUtrQo0)^P;C6XK}o`k3?=2xgw!ozhK57?@~uo z63b7*>JEc$_PlrDAk7P!!j@obTWo3i;$?H&69{j~RVRl&vw7*FR!ELcAbLe-XMr%X z-59ln8wqxK*u~9E8AoDJ}&)E=-Qkx3d6AQ2A8}XLmHv+GhMptu|LfX zn2%3wCou4wAKNDdpYr6(e{{ZP_!sVfB_{`SJ7XhOW@3iFbuOY5wdIf$;CY(0mtC|A zQGvTJk@AZA0MmKF2?)Ti3UVbDz;q{ET*;d?F5*30AzrCG%fjG>OnnmVo6HE5kyuyK zR?=DzvsXCye7s&@^)TdcknPuovH***e-841JzU{4!QmiZjtn(KVPMq*_E#v58p+`6 zmU$z8XWfYf7R6GWk!{-~eA}=U$s9dZhKN)the@Ec)lKht$&Kumq5_;cP~Zm(i%hCj zKtMmNj`lh7i2D?ySyK)14_phESyA!;&Z^khOtBIngr$P!NZ#54m@dyt*2hZXQ-Z@IbUI_`pyeeXuxAO`Oe~Vu zlRfNiOaF+Owob+E^a*BNho& zV?^X~N8`%f+db};rEdn=qu1N)f@%N_Rvq3dq`uH?G}$#otLBd51^Xq;p*r(dpT&G7 zZLmdt#5UeY*6sA?cFZGYvRi<^nVzuKF6JRkb&Aw!B>O$s)!8-eS%TmAOUQDxV`jgz z^zAFL&8-ESJyZ;bLraD48O7^gnq$sdt`HQTnn=rk)Er~}Z^faIv6a>T4n<{crMXYt zICH-Sk|0H8%6xD@Ru%E5ay$_bC>6<|5J09A_VnVl_;^z5S-^KfT~7c}CnwR(H-%_d zp?O&`Q_mxwcDBQxJP#&wzxa54KowFzt0B-wxM-Bhj-!juQlm9Z%mF%WvZ@?b^kwpCkBc`v$#bc)6I>w}Rl{J9 zr%y@OtQNv2HdG@(jbGDGV#C~M$-3d;)n}pQj$$0OTYe}vzL{FA7b!&m3W8J^TT)jz zy6fhdpE|2b(o85X0IBq`8$k$#ilYxYLl}mJswaQ@{utEzj*t3Zt*_Es^IMoy>kH%UsQ#v{Qd9oCbN!0vYdrCINzeNw`jGcofoTzV z7-~1tv12dQ+!C9iD}<%N(sf*6J^=)|ZK1(a=yGv2QeopMr`WY7aLCu=P~Mdjt% ziAKSp^Grn12US6GLa!bEYDvyu`nj-oi)Htgbj8-RD0)9+AP}|@D(h@ic6Z%>29`cF z?+ef+P)FbC7dd!(Xg;fmU6_7{%)35zCHt~Q<-us$f_`~iWPP?JsidBN(ZAO*P0Qj%98UGb)@PE(O%4QD6`bPgT1hN#hrGC2;?k=TUTNE4X{t$v& z75a)O6$?%v?6(j=c#FKtc{J9BRo|{KeIIZ_l9!A3BPRU9LRTGbp=YAik=^lECfCjD z^(Am_U=pyw2xY1qexMbg0yX&vmAXM_lFZsICG@sn?I?U1r*&^^d0G?u)e8*)R);Y{ z0Vrd_R~eh9hA2FTX0F9@u_hX$g`H|DEznN+N(@jFnrBX?*!Lfa&L zD18@fMRFca31+7U3K@l)F_9Mu@^A4s4xZhtuSgY**ME2*8+PGsPtPQF;L|iEe{TbA zI@&e_7fmHy0cuRiR}mCNUq|;}SK!aeV__u(Ylu%{JI3_N^^M{qbYc~LbP@DQ*dTL0 z`MTpFOj-ogCX!Acs9_|^9)i&aEkdxDODOj+sgLla_M3*uEsP;se*Ue$&-H)(xBe?- z_`m(Fe`mfdH7_frC6tfPna*i%ZnD}aAX&gCGfhMxdI-H9fHr1=Sa?DF!mqy79<{pu zWriiwti+W?+IcT#OI4?fjX$CoC^5}Xh{1`4g@WEiiX^g{T<}gBB+iS?R~N0bnw$x# zj1GCZrofabUx*%ldTcyBW;srCEInOK;%NiO$IL;Nf7k7W=O#=RGsbQ-?DQYLY@xpg;Syxbjf~kMbNI1Z0@RupBV$zX*fYM=dv99D$C1Df`vV% z*(9)(^W+<$3Dbc8y_wc8ak$%)A>1mqA#9FHl3z?-niXrS7WXC`#g?l3jyk&BFL44i z^tXu&KY7q+6f5iU+RkAGCyXs?`1j5v&9_5b%mPT^yNtR>F-}_=j6B2m#C9pxLoI99 z+c093*GU_&-@Z{I@$@QbJ4#7TNFufV=+oy(tJG|?K-qj7vYVIyU4rpBkt~e*zJZ9c zeR#N4#a)UstL&s76YgQw6&YmeJ5aS!x?*9jP$z<}LF*u8Mv?^1=a-In0Bdtw23=)c5giwj+_YCtp?tBI^wZ< zA$PWTQiQTtqxx;=)K^dhInjOzlTOG&_?)1^Ng}bO<5-cicR?;4E`I!M7~6ckB{u%^ka9h;=Iqd8XST zx5Cr!tjpP<4@jtL&C}q&&Ui{glwhpWP@N}}Y@Yi#!8SWC)#7-T>3rI>=%hG2p^u>ba1c=}ZOqc=EKJG%T-rG76d`pRS z&1MUHaZ`yMKGhI+0|_#qHy-?D@xh4MbtkyT4-1IZSG4UTh|#6eNiyAI2u@jr0=aw6 z!qBB}4P9hLK0u%mbBz^B}b670kU%z^11&v;)% z_I~M>JVqqe*&|05TmoAWDepN)_Bn$BhWC@@1oh9K->gb&Z(L+RF%msMs@jtw3eRs)H~wt21DxhQz}14*Ew)sZKD zeFel4xF4h2qXg$-?2B1F@PfH&kjfXk=S-anCnwGdZSNdMX+1T^XdaB=>{|;(C7v zB^GA}e-XT72@1R1DG%s#wF}pnXm$ZCG zzpkiWxx6#IV-Byxym8+H=N_4so^>xVHx5ysslL8qc?WgZ--A&kBgI)MIU2&3ZL2q2&NKxPn89P-p2>wl771vyBSz6$Rb0x*y}*w`CRZLTtjYhZeJQmPEQp z48gh(6$lN<+LTPRsfd;shQmd#g{prFJS0F?jln20CXgyHLsXRY-Exi~7i_7vtl=b6leq)gi00)_|B{u#2Csd#$J9#k<^@XFvPN4FiIAepKL|`YY`+B3qW%O(eNldH(AD+} zcbI2a-31`ty)v8EVTpr7#|LiuX8JnoJ}Y`C4l0JR9ZdF z;f4|D)px$%Tt)UB;7$(w%a;h)KXDa_f1&=cv30g_)HgAv6SB22bars~G#mcSLS^*r zRN09I44uqv|F^SUk?gqSr=v4Zb5mHDN;|^q7c~3b+z3KVNCJ6Ea$3suF(-6O!Ayu7 z_!rAh$#*`<%+J)d?#_1D%kz-^5VOSg#T0#DIjmOf=&HC(EimA$ZD%@jL5pVPJU_lq z8+RIFv{H-mq9ZPlynTGhgmsLLb!j*Ql_1O9HZU{MncYs^jHH7>v6Z4ZhOHwlC#N9~ z{UuQFh>X;m^&(2QGS$<*vhKi%JyF`chT13gEQU#})vic2Z;$O*mx4q_!O^ma1ll`= zDDwS=o)DhXETk=v#wp+eWI+IV9xbA_a|pN{K&c@O`HlPu_&2^X!n(1?pXh~s^1=U_ z3rhV{dE3L? zU5bTeKtdL?9WwsnIp|D#`fclM7w#Q;4&NRKTT^Zz!jAp(;5De;zk;M)cTaIyL5U+B zDc`(F`6nk05AH<#47K*@uD!#CQz2GEM6qyaNzt63j&acRdQPGwdsR{0(ogR7D+_NI ztqj341X_`&iGk^X0G9}qgqq}i(H!WI__A4wems&jc*j_iun~l2M;$;Jlyx9lW zy*M2I6lU2Db9nm9NJiMM+q*U`SFw>0Y-Odm(uBKP57F&o`w#1>{zL9_KTjgD>POlb zLPCu9*vaUGTnkXlyU=MTZr%{OQgM-U9Wqe)G=7RJ_!8AjL5af{M|yG_9;M}*TeRK9 zYGi7KTE=Kzwfeh%CCnRiE+|EtH>cUqMdHjwH3?aGy5jNxVU9L7by}cIPxtk6#*iw8 zyDJ{{P%=_xjqG66N=4YhOIMOBy~-?~9vG%(s+j)4LUit5bh6lzP8F|9k+x8;D#@>F z6=%Y1nY!D}Hru)ZiLG7|X511H zbVe~Yk8q4#NN5E0a&xojFN24)HL=IM&_FTPlhnwp)Cg^0RruwM5~a$DmREg0p;d1^ z!YHxbL7^o%eE|v(FwR&6H!E|FQI*b>JWX?hUEpdYdB!yT1Q6|n^3aCpvqHaCbcn`D4;a=R{4k_pnRHGB6OwMe6o0d=c2 z+envocw0SKv^#D*E}}ATt+i>XdsqGHbO;i;34_xyRZ|T_$rSH@?<1y z?EYJ4tE}zWj^v&R&sz~bsHV#nDhS??4Tvj#-WE}&D`E_!nKr8W3}zN?vGQclTk)vJ z>BXJf#*B}i8+S!kA#8b8qJZ|&#CxVDx!Jr&UjHi5U}c$1kjjR>KJOR(ar!=vh0GbZ zqj~49g&!1;~#5GIQo2_c^=E2L0Z>@?hV<@HwF&kjd|Hz2`}H)6*x;+ z%vw_b>72o7rZq!$&CE7;9j7xi*zAmiy-Om|SGz&7A;7E3fzNjWFD1JF*LW zI7o$Zv$XtYvd3ZzxwIFx5eUd9c13xeaiJS*4(i|Y{G8tC0e;~%S%I?)?+oLuYs86Co1sh|EhIL~As<jvvk8OU#i;3r}Q9h&m}*x9PM z8`t!QI|%^?VjWBt)ls=18)hufY`r*ep~@CQzz@fl3?xN}4PWF~t1n23KQLn11C1E) zbCN-9$^o};YIAQmthP|QA%k?G3%3#nwF7I<4hL{q}U5(M_(tfRa)?jNaemGfqs^epXZ3I zaY)a&%2^#UwBlf5x&o&&5oTE7PtkPwZzGT~uFBZa18oJ5o%=CXL@O_|hEhDUcPb-cAv3{Wh?Ev zUD&$Bb~jt`DeE4qwqZ5`%oYi=gZHsx^62u}KEf4fu+Cm)u$ktD@A>12&%^PfYOg!$ zwK?Gf{%KS2y?JAxyWrcWgi+%|zgw(NVksKW?T7EtGv049u;g#km-H$7j|BH8-lg$R z$$+q}vw@Ydp!?sy%C>+1{{33Vb!WT83knKK1ghf#3hM%DBMQ1W;P0O)iC?w7lYiVd z(u0zztC^U2lAM+>HiEyMnUkWWshpUuwiBnGxt*a7Z<3diq@Fx7)zd!$pP89ckpr!U zpsSp&T$ZD$ke{QXWn^ZOT%MDno356bnp_?;h>nu-I$M~jTp|gM6Azb%fiYkwap`uj zUxdnWNQ{bBg381Q?)x(@Cm}VZ`d3b3Qo2^(h@Mbbz%n`pIz}owzi(VnoL`zB$cTY~ z9!P=}v=)DQ1VCYMmR~{?(qH{$#agY>sZYox{>ZQt{%1h_7r_(-MTJ3=K@$b7-g=$Q z-&1a$$W#^ug*bfe*qhDIpYK478Q6i|9Pp=y>Z}~76LtZ`6$SmZ_p0?~)Dr%f|LHCI zHXn}oR=Gnc#8j{R*6}*qu`|%1>_t6P+On5Ix?dQ)CuAlH%IgGxJKfPSPk5L)u(LC7 zAPNc)+xg59=6?MAE}>C2N)idpn#k@O73UY{7X|=~uJH*dhPp2`DX1#_=ui(xVJkYn z#WDu_3j1HCF~hcdX=9%-vHuZB`F{$eh>eqj`+s(4`YMMcfcy?>mO|T)1EA1>Pl;^Q zN={itE*LlK4@V;7#@Np&XulGFp1jpPD@=j_glP+*^B!e8(6B?Y@<_vjC@~K`)^Ud6Gt5P=>2`G@2N4mXz?pY@9+2 zJ@a9x^YLC`f6s0cO_sgXo&)1>EO~VC&6gFT_#(lZe!1#UXMOcP9Y$QbO7XcnB*?wR z%E)nfoO7?tHTViq%+~#=SW)|sR!%0PDPv=0K3O;;f zC6jG$bCOgW7nN2z497+zG2<2i?YtoU3J_#0IEERbAuM+E=k3SirTX&C9gVH}6D@5> zEveR0gC&BGXD6|TiKOkM2`220>1$W4C~awnsaqwh!4T*N!VQWSat_A4;)tTnlQjGb zaL_n7?UMBCn0I^VRm!U^#Tl7VkGO@_N6ig?%-_j~b6Sx*F^sj(t5Io6Tk(o%suPC| zI_qaJTkTgEMCG-tAzyW^mE_arQan$qc~xc~mFQaWl$zYm!OjXj02#9j&4R3sC$j#m zhq#X?4mOz%2k^wAAx_C#xZyZ_al*c%;JTejO70f(^|^eTnuD0k{>2vT5EQ<6NtNg$ zuz*T=z=p8=`Lxd40dXF5SP*M5g7`|r{0`Ch%0wF%?P=+?Je~+GQxDf3>B~5b->W)B z)}8-3TtGkqA0P{@!WC{uI-yhG0Oi@$9I{ctrr;>PERDX^Znm}gW2k%1`N>cAeU7La z_$7)JX36vZ)Y&jmnXM>)dCgo+0wlEIelYC0lV}b$5Gr*si?Im%{?g;e={egEQIAx@ ziedOEMQnjpI(eq*Edb5{0*gcVHnYQqO_9^TicBvC&|B`$v4&)bKjjs<|B;icWbE|s zm1dQy<>v?{y0>iIDC?*T6pe7We6F&1LNan7q;+Ujkl^vB2Nb5TeFm+ueS5D_z@^gj zjDE`zJtPw>N*V%ANcu+^bE;#6D2nwWV*DdGQ&LD)YDp$8EEUbt%~-p zwl!%kkj5oOnGAD6EJX#P$7e0}-rszD4jX(Kl~Y+j(ub&rGs&l?QwJ#whYlo-X44&^ zo3-}b3VCxU=FL9loqQI7ta8zozGuewJP#~$?E1$w!I;u|c^+h@xxR48K{Cs>iM|u1 ze^c)GzG-5B;Xac|r-h#fI?fUi{FNMX04WQF&UmSAj%dM|G6a^(<|^Kob%))=euPz$ zBq8_3^NwkJ5&Y-&%A%X;F|FCe6r`2-BgLl@{j&{EL>8s~GkSxy-{O9o5XhRzk!o*V zJmkTV?}rQN9bhtU@RR+@cPT5p=tJq0Z=ZF1TeT{Jd`NV(+}8s#KsBZUuL>x(^ZMi} zsD^@YbtpTH+l1nmop=#4sC|PC>?R{V+e?9E5+1WuV8qR}{I`fN>RM?E2c!zbZ$K$vCDPP^gmYxNzniPkT|y$&s|j|LmubnSxIrtnN7 z6{!oCkS^atm{Zvc^kp672t`V!_htJv&Sozu@2~Barn7LVs`7aFcy4_Xb@e94h7iqk zyaIC~W=_AYycdwx_&Uo?zg{2g#bu{x-my@u8=cgWLDeBIZ@Z#B$JyjQH|VFV%yM~I zz1q&}3F>qz5aqB*6-D##@BpHncyhlZHRygheXVBQpfin{1)kxlE39PSAilqC-Rc|# zLOT>1Ik_2(x*QJ}UvefAvrYsUvtw)ow~rw5OWDsvd^Wb)VfUR>mzt!}N?=WCMJ(oy zf5!C#fiCV6!e2sb3&`cS@r2+Rt;uy-7bRaRq0Z|};?lp6rY6`}FW2%L+FX-I%cWe( z1-5mAM|3K1s?ZIp*6lZW<3xNmJzC-$reA7u;0xPAdM5y{ST4@@S~2Ci1Qr0M#Om?I z-;T!AkMJNE+ko88hSV<-b(5-4ELh%&`_&Z{yzsg+8}SbEdF z25j7;FntZSk1^uM1z~)G4H`mcD`EdbImSgH$*+v^eQp|*vFyZQd+z<2j3Z6|RWH2S z_RxLQy!8tCH_WJqkDwDc`8zy`2eN@Xl7{04o^ly^Tq2!GZ6pb`&;1HPHWw9&;Ip-p6O|?|hv#qmC_NP47+eg_Ae>68#~XVD z7P~2r!i*%oQP`q_P`MJsPN+%AOku$;R^}Y)r@-9YbZ^WQyK&ZZC~#{e5%{oIH(U>W zcVVi7TTg9b!W;gP&MZ(;JTO@2Ky(w`jF>rqtG`PydMx;-(I$b#jN1d-%( zc~J!GsTJR71@f(%3KII`h7}RsEDvJ_by<+>NLHRkSiq|meJv+dk4-O}G$9|0pU|9|PGgpHG+`{zg5_Ve@qu7Qrrjz|AHHPBYlzf=QFcOaHX;v>Yv5u;mponZ0{Us8dYvqqHKg&Hh(eJDnW-^5`dwY=4CD zAHU`QM+A$axNQ3P(E|^`_`VY;j$!)(VyeokQyj_XxA0T&H<)R>aZ{Tvtu`WbX+pxr z3W?NG#FOGEO-NsvADq72K?r8+0!|NnI!JniouUe=E*|Z6WXRfhIle%Q%HUFYhDbQ%H(kD`o&dpcy>|4x7h`RE=K83 z4!R!?P83K0(o9%7{2h=*@G##|S@Y8ak|XGS2BgZ$W1l#Cp26Q#8oWu^MXg^-F2LDx5b|EVVP7U(D`1G;m_uZ~d4nxwqy zS)L$k&_YU!3%6uWyRKwvLeGjGW|-83dM(0drsYMFy8+0ONn@q%N>&I&S#@>q=?mJu zqKe%KQgfzCqdB`$Zyz>GmGotC*CgCa^b79eYw>ELy_{W!p+->IRS_UUP3>>keFzYT zExxF&PIl4;;dv#QuB*(0Z6>pOEe76dXlwC0L$Xx(euJ8maAJr`*bg(qKfYF*x5nPx z!uUv2-g?Xo&ji^72dz3)t}4E#Z7w=y^yQAEmE>b+PI)k&>|CqFR+7T$64j&`nOkzD z7ePhNw)2I5F)%BZ6A$&Cx8>9&KBYVdIF^CN@%18%$o^@74D`s<5Rb$E6=81M@R^Fi zkCBwH^OeK@H7Mq^5bGp9CPO64NW^1@>BKwt3jU4?3>+7Supyq^w@!CJyqH|XzdNu` zmtaU&DLHmIRc=ja^at=`g9cxgcfR#wSn_~cppWD|cr6>QM6I;Hmq5R~MlOs1qFVsD zPXy~btoAF@ClU;~H_hiW~*{-?R;uM1~=$`mRh4rEvnNvwlwT)f(`QQ1y1Msfn z%aQ50iB%w?g;d0K1XVV!!LEhK505lx>f-KVDX$oL)|uAd?ie~>hWYqD0JoqQ`$BgN zz+tm%q*tX7ob)8r zJ7@{Wwu1w?g+eB2WEO6I*0IdBFnFc;P0}|QOZU4d_m5V53j&kM@NxEfQ}K)>XdwWG z)^?1UhhZtI7}B)RzeAwoEP&3-Y%(d89n6P%-{+RloK4T;*oAIg)|%0hLy;*^ucfwO zf2bTgNkH~FE5uz{yli#kHcmz9SH-(jE_N}OY{WBJaCm<`@^-Zs#2ZN^xnAHc!SL*= z>l&*vc2*%9)pER;9j`A4^wFa3i>VvJ;UvFN?85Yxquw9~=vDs-)1HLQRc^8jJ);hE z)J)EVs>{YUqWpDAAtEQv8SY!fft{4Ibi{TK79EP%oYGu&<{6%i8~*3KUYRaU67f%B zJcjs|DRIWKQ|QiGo^KdROAxRNS+o+5iQ8_wyH2x>XPP@XYRc=y+4){9RM1GkC1od! z;%Q}8I=i~`BXhyMRgu-JtR=5r3E7?B`2wCm>#mCFZ#}+P6m2GiVY`;MR*f+y5brFQ z>4wK6JljoGs*8B5Ac1f%_dHYNk?#USGDdHeMt*If(H9xQ889ZcOVKZ-H*HA2K@?XAB=j>)Ry#{Gk@ z_Ldn_k69PD{GQw0wRaX93Y}I7Dz%tsqol?NnfF;5H}?*HqhH|1NTFQqR@*>7$$RQJ zo>=G+#O&2J&?-sTbC@XND9!hQt(Z$MIcg!is&ID2UUl!#wf~AE#NeKgk@Fgmx;G4Yp1d3N=IYgJ0vey2K!spK#zrK~Y@;q`C_9y|r zPHU~TTO=UE0Ql8-3F_s$Ug)2dumg)efoMYZjiDBPE7gEIq1aK}YcDU0D;AfN6jmGQ z65IpPg!&5JDc$x$e@;ZFtrx&2;N1wf0?-F!j6h%vku~NloP-@sIZmsH;fLcS$&Q2I zTX7LG`i2qdc99czgZdf$3}`*CI$zez3|rujV624nmxUG2Rwa5yOVPIR2{QYW6 zKHlAp&~*I0yK;X9%2D9w{}gO?z$!^Zi6nQWFaJ51=m5tw=4FJk5afy8+dVT0egjJk zVd`p^d0&&)K^m|C&YKTDwGiICbEn4rgvH4^lk$p!6J)jXRTwE?dZsmOs&|03%`>o@ z*LmS$H_#l0A-~TD>y_&$;quDzkxYHKFm*P&WL@;9psSa2$cQS64yGY3&M^6m5OK_G z_hAq})p|!@#jVq~P+FqfzsRvqLcey$XZVR?Au;9g zFlrhv*2$91dQBVG;ocKHQ2{Z78ydq3u47?kSjYH(C?asYu%dteK{_XUq0XIlJQ2B3 zBb~=_%fQ^#V8Rt%N|1RsY>ztVo%MK9VP}mSS zua^7+(Sd=Mgm{vNLRLEnt-&5vzu&}qu^n9Jg(&tBpp=eVz6`>GsBu3?@(rxB8Lsoq zx9JwdIoj2@huXSGxz5C7_%P$?pltWiST}6!aL1eEy~VyqvbJd_e9HJlJoqA=152(?=IzySt;Z8J&x$_>k-k-E<$Ka+Ftc1 z&@gaN>$Dy&3oXRAVb6Ky1>f9zOOeIMC+4#O_d-!?N0oBLry69~rtuM{QIU35kbW7( z31pGiD4E_*W;ChaHZ2C$8&qoSX-Ga+zUPb?m5&759qwheA&q{QU?Gcdd=fs^n)%MX z-M*KapF)v8tt>%oIBcNT?3F*6&~z#v<~h_9#H5e0P>v5<(b`&T8aD{9`|fV|pfxuecFs@J zk3@w;mB>>o-io!}PjP3>?t3=pkDq0 zs+mJk+>(9z2TEVaE;uMVXweA%_>T|vqkL11apO6cASU-tV#;cbCKhCN)l1m^J)L_? zU!xyaM~3wUwLy(laad-`lzlp;Bk$v8IVb&Y{ZD#>@5i2NN;C!|=SAWMx>u#aaUV`3 zfmYO}_CSu^%1uTgI@F+k#fdnEmkOSKM_HVr|zoyFgfOc^fdk3<%p`zmI zHKd%m)S=wLpHR4KWG}sS z7y3#@AK-rb3iJE+5TC(q9{g-hQ2((45c{X8O!nV)%c@jQf9pbgoKG6g8T-W|N)ZU~ z&ohGnl7p;iVoF&C6wMba|FBrMv6-`;TW?$8XTk^UXD8n!GtKmi)Cy=mg+CaerxH}RLUI9FF|_CuHU3SjeG zsQO7tDdzTElw`*b-E{<&GHhVToW|#&nkHpRmS}HLkeu)tQk&Tp<}U-yQ6@STr;%iC zq^k-&Q&?v^t*c@s!si!_+8SNuhNF$t97_VL>W7fAiChzo0uR*tgR{lk$c;I<$Inp% z4jDZ}8Pof%5tW;$TASI{<1FN)E|;*1x0%J!!;3C%FK83N9tz7dcINkn%woiS?U)64LUZsp}?MHlBY{bfY4J6v(@;0Wkp>VrW~?tW@1ax)0X&#Lw= zxTZ%=3jpP?pPA5QZmF;to=xRDh@l46AVakr{WC@37n|PAGT4%82Gb z;$Wa)r-!GqFT_+v0-yxP*5hI+L+7jZjbX76kIghe5y4I~$DDW$Fi&|Pt;$E3QPAiy_jTe=lWsZW3Bh#Y5+!#?-0|6#%iKIh{nfg6t zgL2>)u&P)E3f(g>Ww;w4q9)a!tjh*+W0&TK+>%H&Dxpwsf8G{* z-xZ=@0{Ft%oVuo>=yBuIlNb>eVq^Xq1J?! z99L~(G9J;$kU}r7Kw#GA7&}E%UH$UtR9=QmZb;TJ{tGl}yYKE9RHmNpF7XTEuiBbR z-YPylHM?}}L3h@m>6PYXVFxz+OEkjxTe2o8rdyKnW$ImuFkB3|fF9JrIqHG~xRLGz zny=asO$s>N0jsUhMWKY*NqONv>dcjO09xBS0#P>V!GW>Jw(oTOzL{^Nh!EzS;Ul{s zD%@9FhQL+UDG&y8rc~ituKUoZ+uia8_x$z9xesr54*e;>aQMgW@IRh9k~6R{HvD{R z|NHkp4$2hC{XJc;v^FqMt{sMlug(VBMs5)CqaoCPhp@LwI=Gf~AdNnO;$TVZ5x_f< z-MlBLjOy3HPsa&!cEwrT`FR3-CF zIhaJz{d<4yuAhEzj1b`;<-*RAEDJ7OWgFtSMYE*EoU?!~JEP~{2OfF!vi(kg+NoAT zPoL>+_K);g^`9od|BU~?wL6MpdOuei;DbNPtPKnn{L%3Ezw2n-$`7FCQG^1Blq z^=o47ke-&7;KT467*-&r6Hkjuorg=uXjcLknJF^Cr^8%R?lA;G$T%(h@5{_`JT)|b{8R_ zVVM|IhmYMj>rGxHU!Q16!>oV#VD)nRk+}m8j-xE1-3QyY_)vM;Q(JwZb!M~B-=%`5 zG9L&`=7@C-)rgr2tF?N;}`$Co%|5OCggPgQe|PxjxpBC zT7rwWE$_e%gza{D=7u!Ic9r^Am_AD8>nmtCYD4p3Sbtuusg+~c$HcHCOTuTk}h z?mA}rFZ%3QA-%zJr1j$_gl774q=b)BDo5g4RZ8s-cGX78 zW;90Llau2()3|i96|oUseL{sg8n;|mg%K*F10GX|1=FHLy@iy8+tdDyl^o@|&|{iH zjq;47*bTeyQHg@nN;Z-7fxVmk=gl9EkwW-R@+i&_Uyn35>#Ko=+u9s!I~CyCRlSrk z@Vtg!{+cMOow+~y9r;s#ME@U;=KX)(II_L6ef-FoAwO2bdj<#KF6HTLZuuh-kpKxW z32^asCSB?YW!9}-+CjZ11Ms%Q5SnA%zSwq+cce{Bcx;|d(|u7p3S@_zA!K$_*rV!` zV4QjcGv!coyiYVyOl&?B5@gn%K%vWu3&c;mV>6gN-8@_Sbx$J5y)XsNp}E(!<&>Lb zHzcmI;rPP3J$Q2`f&w{1$_@E8HBhrV*y1#}S7(&QlCoZHB*|s`RAJ;ZpJ`1ubt~WA z(6+FOk`5;+!8Fp^IE(lxAdL9!!yO+V-l8=4BoJtx$JR|%Xlum<%D$x+d>GeIISqXh z|M@SlTSSU!E>R!2b8^<=;1_Br05p9sy`~h6K<=8o-O>G3B)yT9S_G z7lYZ64hYU`S}%cK$&U*`1Wu>gIUcm8cD=njeZI5^vx#yI5#$Y4lxrbG*SGt3+p9XT zn8MWyLb^I8BgKyzRJYuSBIa9hE@RifZ+%nqZucN8L^_X(EfB!~lnvH|u#HrQg^bBke+w8=6*?rp2MEY(2UoR$8SR&mnmsI&fNJUubm*yoXyHO^P>B zclg|$a`NexIQl5zB!tH-4M`8=VFt1VS>#7vc8RF%?ga(|P@2z1&LYfVc}iR`cH()>@H3)u#_(X}0^Q295U%axUVLx-RQoW9RGtRTUsBQNn$?mh z1}OB&Z^4kd!_{^Vs7U#wk~JLH&n1f+l#;t8?!_hstL=-$G>Zc7ad9X~Ch-p!C8dte z_#}_sO1S@uXUsrO%xpHE3W7_k<{&d`hQ8Wi^dvG-uF$`)Zr^OjlCw{sll}Hkb~l-d=t^;C-o47$*uE<{-Wr5LoDS z1Y3hPri$G2Ba2MZ%z}A=J_8b}ElGlDh2+5%Ce*f!>dNx5?JyhxOP2%t3D=l61|U>S zlmy)lUG|*2t#EW)rbixCh$uE=K=>&$2RyJh#;SpJI`U|Mzq?e;!l{t@gZd|n|BE5RSNPtoN_qX#MEXwO|3%t6 zMQ0kd>zY-uZQHEawr$(V7rSEHwr$(CZB%Thv)1n2y+@DH|H(RhPv<*5ujjh8sA)d0 zb>3l;oWC&RA79=%zYoAW8n;j|=EZk0|JXyAS-e9Y%14`#O`f9M{xuAnl^Q3dIL_$l zP50!Bd#S6WT*wNuiol%rYF%6%EHJ5zWp$Qk4J%m{eEM%$Q_ZzHc+k&}H~x>divRIs zretqz;q-qJI8}=OyGU`cP{m5_>leI-!<-NzGL&L08W9nst_k*XIs%&spYV4&xbI&+ z$xU?xi>|eS8&f={>#hMWukJ2j_JQ7!>KGn;Z$UBo@_vMNivU3fC2B!Csv`M=@Spt) zAqS`I-CNjE(`1#RV7jM?S&eijhN`7ACl1sPQ_JFuVExg+y!UpSPJcBG?;9o-NI-iW zk6i(>=MpgQkSs!6;)`j9E-{wFQPG;&kfA{dK#p22BQ=sys5=W6OhAEda>Dblm+$HP0$HHWB-IP2b)*B z%-;Ib|JN+{Ys4iUho_#4(X z2>}Dfh{bl{@DhuJWwoRa7i*K!0rLt*>58taedC$H=4^=vESN;qaFt&YI@-K=zG9A{ zFV*js;e5761$S!AZuhTW<6pb}Y!q|3!g}OeW!40$*6Q)YYX|6okbO%|{GA-fmd3_X zH!`i!!wUt}YZ~awI>(=)`NQ32)!%E^ktP>jeJVg5)PI&)XSX;RR@Y?H|+$9AA znq@KI#Zp^BK%3D}q1?$oYm5djyOONlGj8;;k{=vyfO6(1HHi%nP_Le;*o*X!m2USB z)&jsU_Lwaad)F#E$!Ui*sXworH+bG zLRBIMYsHGKm-TX4*X?b!02G~Pu)^4#E->wuL|h^kdW#EqEskB>{$kfg%M#DVI!)A7 zWT#mLM#swCGrX%MfFR}}qB%!zbD`r^-@(QXUY=A-O~$8;jrNwD3bs~=8aqVYcf$p= zs~NP-#P!S5BF`l?vD#os} zLrxDLHM`Zpr0%va9LjIp;131F4Ck#JycKZwU`s5tcwfVk*TMOOpPgy*GugFSl4aVq zMvjgRy$7h<<0sKO-+MFwOvnq(cm@YXJ?Uk4J7yLS_Sb3vV;PmU;3#3>mr+m3D{SC$ z&nX7sNt?7C*&&FhhnA$96{Oyo!PvD*YkECxb`_P+-&$uV71aw6uMr7IZJ|~i-f%vU z9xn_^B4Cm|be;!8YN;E$f;5p%M2svN~zbpyn$I z>qN;MRZbt=E6vmB2?Je@7`4ei`KG^3H<;%4Up2r!BPL+$QUW?N5BGSKV5Hqf;+!%) znhmA0q1mgMu4qh%86zpl(dHe#a1-aBk$FR@0>tjTxGR-Q53Y%t`?M2x#!i`>*=Pa& zf7Xx)pm2u@g!hc4ZcK2ZL5PPDLCkiS---Jc)RUzr4WPa0^qTgah1*IcY~j6wlIRUZ zyicVnGmkPhU{ux9)n$B{pbJz2`*o?=YfApKqf-eqE2n+ys1J@QrJH2w(F}B)o`Z-<9v>zQJRFxnP~beD<~1 zBKX#q5u&ZW5Y`BK$lV7aw5!UH_zFG#dPYOg6fO?ODF>Hid1_W)G<3Jyy$;k_o$6lZ z;p)FT&$cscw{(`FZ#7Pk0OiLAeEGd=B7W~B2SxH4Gap<%8e%Qj|^!rF$dxd$t zbJQm4;Va$mOmx{L3op&m8N*A{5DN5<^K~u-kKe!VW4K0aQF&JVtHkI;c zMX0>R%fG(!+xmIuuA0K~VrUAl8#Kk!H8qEC0)(~R934?lsxyA|SX>qnUwBLJzm}&F zLOFF(uwTCj;QkX;^grGkDg#VR1TFq=L&TIiq?7WB``1;6>v5O+Jqd~5-w=dA9dl8b z3{aQ|#0UYJesLfg92nxW-@t}orlK^>x53CB_X+~-|gcaNNK8@$aJyRj_0f2RT9he6<7FK~GA11`Am2OaTi&m?)*6MKm8 zctd19Mp9A{+K3tW`Vrcfu>(eT-;}{Cn>csl zJe0Iu2QwFn9uHrm&+SWJl@s}&R@Go5hy9~$l;}WYB@DN|n<0`urwp4G_q|XR)t>70 zaFyWlf9B*|I5{>;OVgX$N^1D7IdCj5UlE{GMECHB-d3Q^<6OWJJMTe5=mzMuf=ibz#oR!qcY_FMX#KbKy$h>hO zVKzg{z~G22c1K>q!b@O3XrnRQzsxxjp)T`7OTegHASd?58G-o}9W zL_Nbu$Ia6VxA{FYPQWz_f${c+fPG0owE!)_Fx5n`6)AkL_1cjP#N5z>9UFA}WiaL# z46m3n(Bc@#Z>X}Z5^Cf?tT+>3mqsjCMuAI~AB3rwlGW92m$z6_Hw#;;j^xMPT%wtH zJWt~_R$vHyKW(XdlOXDvfl{fBRLavzBoHuS20L{r=-^jN1rqzsKgs8o?}0dst<10F z&2{no6Hh%QD@iob$%=qGRUQpDNZ~8j;9!AEOcJ)FUXRuWEppkKI2TTKDg>m(=RS6b z35aC^TqspMhpL3N>U3(u(*G`lw}I+hPs~>hZLCfJB)O_nm6n9Fba=KDCn0EI<_)@& zAc}D2BS^##%EIbjG;bg0#BDnNc%bft3)A3euqd2Us3y>s)e&mlG@&(ta_A67rfOlI z3pw9bj5ZSC#3@LW*3WYOvy3QYcdjpL7}=Fr`%2%BljfYGb^iLc}ax+SmMgfzS zG@&xS*1*Lejgu(2EepO>qzJAfxG{3E1{*iI@AIfAcXu?@`HEF!(B z8_j+?6)qI(s<@zS3w|@YC7kLAvw4T?(dOI9A*E-s@NGT6m>2P_kWHGuk-}}KfJ~CB zyyvl9$M}3;-`xMkm;g6K!Vkpsf{=WbPrNlK-5s#W3+ZzP{Zvkj6ByTwg-!_vZM1$b zP)9}=XA^PZS&<(zswj+m$fhrfUoMYNRvaT%nV&CL7N&|KNCGOH7gw}EDPvAo#uB26 zB25aHC~_#AcT=Q%SyCR4=P{Nn5;$~+LP27h`G$(j7d2*fk|p6C@{!-;*7q&^hw1cG z*MpcQus3tI99pSUMnLI;%CaXj&)iY2KD80!-8e~DuOcwz3lY4th&AU;t}Oyv9Q$vw zJokhF;Hc9Pt74w>R7&M?E$AP8#(yMXoR;X&RvZ#6`at7yGJi{iwpheb;V+7OcP|}) zftPzYd7lABDUZ6CvCH}hhAE;VV22F2lcwL|fQV7NknJDB3bog*ej`y1Iz)@V&|PIt zkUwguH=bZ$o;^+gJP=4t=F_A{@p{1p-~0r=x~KM^6vWf_{_$aAy$xzjNI9_84g2&$ zgu5d(KWy1G=|&;{$>N?$Il%1(I&p(Iac{b87#MAfyrQBish`llfC~OwR=8twHY(|j zXC;96XEX+|@?=PAG~NE^$RZcCt7liX;+p<%DCI1tULxL;bP=-4BV+;cwbNUxxe)N@ zsYKAE70Peh^plrSzo^rt&~20M{7hRE1k>35T)SBjv`H&ry##_kJ&2#92OptloF?Ju zvpEJOm#Z+ZkFcVA)nGV;>LG~S;R@WQ z8+P21i>phw@a?)U041+ zSHT0VxvU)#1vhxnyLb7?76YIuQs$Z6XCt(4*5rF|`6>Lsp%x?Bt(udaCfa21OQ=68 zG{jXYRSFIn)rWe5Y)RZ*nd+7Nr|F}+9axw?`h2A>c%eauOyx7<;}4?*HfT-_x#JNm z3tNE+#ayN7k4dkb?&C)Fg14=JQ zA1dx&L<>gcBMQQyd<>--=Njezis=M$ycZsr1xg&>aN;U1^K#XW(k0WcDw&ngM-Uhu z$(9!u%WTCv4Rs;a{IVh^G+IDA2^6N0CmFg-hYhTg^)wlNppt%lCMDfsr-{S(#1%Z) zj7r4CgjAdJ_-GdlU}zcov}bnF<~x9)T*GT@8U*!wBa*owTZm+y18W#V(PNKL1J!7>H^-SfERV`mdxEAD$^sQ_x^5QQo0-leMwzKN_H8x>-HdWUpWto1gytIoKrxtn~ zA_168rw2&FOi-D?cEuStZkT-%?P|E5am(e*{PFrJv0@(~3-hntp`8)(9>|@GjjVd- zlJR5-IG>o#Y6W_JzPwY!`85cADbZc&4TS#MkDY^IWsYtCfnf7Yg3?*Aku6qRyk#O32pxxGFq{ZP{R## zEJl55!u|+0-9IqEEZnSxUDctdd(nI9jV;qtk1&?zYkmUk^-uq@klE_hHY>G}+ z`3u4BLFAeTFmK~DUF@t2F)c1#Y|5Ir7#spebx%@lod9R#;JC6QRyiB+i)Y0)llxFeG(d6*5O3}nxPR1x36sA>G z#snT3(>h#3R!{B3`Yl5`Pt{4IkwGsPK^lFt!Kn+{x>#?D@ih*GzAqi+dbuH@pfJ*K zt<8Mn&?3p~R+TmZ8YQyujYJEgLK=i6$)Zw)ayFRD($}liDTej-U1_ddt_TnUkR;#Kvsz35+CKY)^i!OwG<-yjangP zX!9O)=C71Im@$-Oize3@jdXq+{O8MkLJ`?~O(i4qb>6E&dQRYz?|B_#^!K zhRKatWBxFBM~7&EI3z?Zz;< zUcAnBEE(xjBOL=7etYQKI8*iE5cYtq!OrFB@*-mk)2p)+XtiGu3#?dameDBRJby6u z0zhgU)5obMnE4{p7t0Z^SeiZ(zz+fg?mW`dgsaDy7v8EyWxctvUv1_J)TBWNt@V}% z<0iG*gg;LRzdq9GS=aTF)zYu;mM@}4n&`Pj#@sIXfaye<4s#JdsH}7LF=-O}*TgW};94$_@gn*|6o&2l33rZ5RZJoP))Ekq&Wo54WL_AYinqUt zz=Tnf7H1Mio=IRAAWI5)PkmouMS6f~U6knN|AfE<&8P<6$X3|+8?esBEUl;B1J?Ap2~rjMjCLc9&Bh!pSp%&jt>$*!x?ytiHp^t( zhWxJGb8Y8^d{qt4a+|{vq&jY)f7|1#n2~U1}4#UR893A@vR+mUq(_}~hrzFRMxgFV><#K9JNAq2tiKP?0& z69glWk z_s>~wlSUJS+T)617YP0LkaPS$GbK{P!7-Vj4Yu;WKr@rQ;d{*v^8XAuubZA1 z@JNN3EV$4jcruo$hfL2CuM;n`HrMX2j~B>Zg8DzoB$f&>g^{`s5~nGMBKdG5j09g` zCYikwd0FucBtpX$zd4BaDgzS(nT4F!YhmnC4VZc3T2dN2ZH~N0_L5yEZcnbPyp|Tw zbji8wW@tGtkP%;7`M8Z%FqF3iaZ>_=EK=1FdgJD5pu6mj+<#qC(`R>S&V2j zTlcv04N0JqGtnicj%9lU`mpY|P6GhUry+8*M^qgqXDfk>Y^_6g`X$E%B&V17EEIPyvaU8IzbFcmeTEG*`ybTh1J) z7a|@Xo73?};}@`MgLzCOwM(scYayUXX4X4n_te1{8OeXH-as`4U_4P^4*UZVK?}@H zTU8OqGHu_uJ6PZzeXA_gQM83c`$)Bu?M3=jn5oVCFod3S06Hz&J@U1NF)w8I;=nOBg*}IotjIqWgSg~OYBf)$ zD2VXwy4^v)u_AO4>i=71S$qGz1XD8?PaNjo(#m8?P7^aKDU16y4=2<%_2tN3Glu=e9 zU166%_hoDT?z-sq8Pd`e!tyM6Tmh9Y&_^m^+_0$d1{Ab21c^R?njx+vWf!Vs9>lpQ zcP!5-QCrTF%9|}-#PY0K13H#USN0)C@&CV`T=0h*GP1Lw zH~N39-+BONLw9-;Hz#^aM*t%$s|o#oQiK058fd8t(hEfdjqgiW##QZETJ8@AS)l~b z9vsJ^JW!xeJOWAVF94P>AsH};pg%|J5VW0+D=Pd=ck1IXFoMD@$hG5^^UC}7(xbYw z8h`wUuFA8tX+Ma@z<0~{Pq=nXOu5>1SNU7FT1~|Wx)#1S(68Y7H5_{T06+Bb0g-+C zI_y8UNYN=!9%<|!(FaG>2OI0_>|eUt-+e66=UB>5P;An})I)2c(Q0jkziZHFsu}qQ ztcDB{*samvtC7uCI;Qi}Z8;m5 z)+4_t;9SdXruhi_bo__5{4aU-?Q2SXb6Q<{*sW1Rz`08g0`MXSLbz+8@X?-|!x}E} zHvMAU?8$kl;5yiOkNtqWv~jX`TQ^{h#3{Xya*&94FNe);Gz%A+tuxyjPY(qzmcdu!M z1^=YWO8x8{J`%8x_cr!#%mUzi5nFZ;Lwdpob_Vx!9NgqW-@DnpdT)i;X!=`*hQx6A zTn3Q5G7iXXOHm(`*cKt*(y)`E-`cRT0#jjMf}-`H-dr7Cz(;BV`?}Grzs7E{;c_TP zVvr?khU~UpaDC|Ez5xgDF9qx$BuDU=r#t&M__$wGG%rje-Z;;W+`YHxAPt4pWd@It z{0kT9y^`%TRTa?8C@ZS0tYBD(n+?=f8Ng9bOwWh>r351Z5S?y@ZQgVKyR=nSRGKm& zX^&33tKqxU6*XGQjhZ-S%MrvQtbvKQk5eT}VBxA8PNrQl9Kawv+Bt+x=n4spfvwRj z+7J>-a#~2G`N=lt%Bl$QT)eewr6l|#dU(Q znApk`l$F$%l$G>G(!d28X2x`xfFhDXL5vc{6V>QaipduwG}nzCbFC~Mo~+>4x<1EK z*W}xXW@j;S9eEoF5h%*@Tsj98w57{x;0P%E?a{=X&1h<>AXgq0s?x{T*OaqJ(p5O| zev>N%3_UtW$s{?;)EhK;EP#ixX*1ZvB+=7zmo<8+zJBcYTLcXiF;SO#QEuVs{mHXe zU7NhIL5F3=PYVv8q0i*)sx|zIoNpsFJpYK)50aA0QslOJdx)nTLcO1mG)+m2b2Cwb z9+}CJSLb#-ciQLid$T!y=%-{NOO(#hW47`qh)=+n9P~YYh>w3|BA2C4V|1{@gse%H z%hC~4rq0mh*2ui!2r6QdD#_$GO;=|(+W*L(Ph%=oS0a5x>7T79O`@g(XZb0Wf-5ht zsj##)&%MGBZq`s$Vkwo6Kl2Ov-L8d7VQpTj%@d9>RjQ$^wzjy*52O0E0wbEDvP2(2 z!PS%Z+PD+|RFMuwYhjHMpM#H~thS@QqTa^9P|B`tZfJ5~h=tc6_JI1yZb>82S5c~- zaC(0bomqg<5VW-92iBKcXDXB1T9zEyq%3O`IA1-s91S-3HCQlY^)NYBU^<=5X+=%) z;-oR_0`spu_p*}+WC<89m`M5x>s_3IY?vt;uSMJe+XjbdBHJFYqG^v1l`6}_nMpJ# zjlksVb31uva&IPst;gOFh+z1FD9!JG)tk>h5SY$y^H_Pblq3WAfQF$cgwsrV+zH@6 z>n&i2fJ}-YWgkgdS_Ca-rstxaWmp(48u|82i-xPlAsu=sA0JL@cE^9GJ?4QD!~sPE zJ|Wuwt|b5RH3I$(FC%ML{e}N{+`9%L_tCS7D)_s~!Cfe~KK&r6naKDW6S`U5s#*0=6l$m+ zUHM|oF1RnXd|F-Q9C4kEZU6!Fh_EQufHFR$zhei+UKm!0R!yOof0{Ncc5sIa0*pzJ zlqBrL$L{zCh_C`n@Ye{q!^4S`P1pJq(H}BDtvrTBV0Qa8HF-!x_aW=@C8jipMn>3u zM6CY7$%&aoCv z@Y7V7&znM$ZlT!9S=rk{E|z$9654Az%Fwp?1@-(s_YE*%mlAyW@(p_X?%X-w@kLY(K4eZlD`0hcSy{u$c> z!-B#`P7LQj)Z|>RA!8ak+CIW21gbIF+V&LwQ9K?tp+y$Lz#@;2#u1zxPviCN?eXD? zCNkvZI9;M}1<*AXG#bsF7EK^5ns5{bfdv@L+Ny0{?lN2XhH+8xY~*teai>$Zb%GpN z5RI`VCx7hzG#Pm58<;rKCSBnbFrzk8yNM4JkEgebB4PC5M=(Mj!zRUda(smu>!~ZL z(NYg3o7QVraxRJA91(Tiv)e9Oc)A-G7SpUya-l?KbN58aHVk<=^brFPik$A5kl zApgQ6^GbcgMh(RzmSAZu0GoO@aZzXfqzIv?$E+f(t@HtPz_&N{d(}P*%3A6l-D%e( zpertj!k}>~Q-x$We8K9EEP!T`1*2Ie+BM&wyr9V&`v&)S#ats+Y{uc^hI)!hYmo_s zB9wr&yf8XfJL#I-jgAo$d*|fp!8#^qr;-A$fK;z6O(%7pni#}RO@HI0nlETD^N-7t zsfJ}gTN_AhVhKfV`xs^8Hql{G24Rb%osK`#EX)#I@^q@y)kN3GVB#~QgeX%Wu4?UWW|cpJ zQFk>_QOT{VyWZ^!K%|>Ij|Yu`u#917L5jBujkOy325p0*9+D>v;%zTqhKzI_j@&aH z3IE4w)p6jTr(=s~9ulnC>S;FW+QDKqSpLSwz6qi2G*fD4TM8vzia2qg| zM%Q{jKO_vQg3RLZOBh+K!4@J&M|UcfCP{IY)%`cuWcq+#-FjS-6?$$9?TxsIgoRrLOd3E}S0frLBP54Mk zZFB_EuOSm*g~e2M&hKCr9#&GYii5&32BB{e-d}Q~p*A<}{!IrquRL9xb|LHsK4r}* z0zsBRNT<4R>i>L;f+ftpXw0-m6JF2xRy}*cS$PkYXAfQz#BkW-qNTI6u{N;0)E%|{ z87#j|YKr?jHTPB`^3-)DSI;$Y-|16E$vj3IcPZb(N%^UWmgmn|%)Adi z&qKNpNwJZ$Bu&Bnc=aQC_$1%Y1>UB>dRIc0$WgIGB!An8Z)K=-^=M~9Bhu_6f`T0pdOL!Qd zzD%R29b73N_%X(1 zUUs#oHbUD3UsbiHv=aF`qV*Svg;JCUo%~OKb4SNdA8{69X1Iw;>9SLiImyDKs?`j)!sX9uQnY~Nx`#RDs;$|pM_J`tSLm#uuEj$ zH)Ic~4K+54oBem|F9Gko;SGuoAMi|YO_$TB_TVF)cu*JO%FMz&dVaQR2>M>p%_FAM zCt&bi?euL4?n5`CwfXezvGhr4FDmpOq|>MAU{l7a)(v^PkCyH?<}{*(Ag8Y;31nC{ zF@S3CExdwnMVkGW*oRr#OiONvqj zymQLSaIjL z9uym(kf>Y)b^K!zz98{X%2HdvpEN^?_`$}O67oIlh1Maqj)M}GepuF?^yJ>?=BQ!G zMFdxWuVVPuffb<%mFz6B6HEBjvV*0MFfmHGp$8IAax+hHOyCzOW(H=I=@1hq(LzsZ zV+Ou}XTN`uus5^w&-nNSG}GGSrOoEPr^F(W7!PA0b&n)=^3<}%c=RimFRVb%p+>mT zH=`hR66wh`+M;>HKA?iGE5+7A?$caKh>Mex@w9|5Oj7nWk9=}crui^Epo=I`LA~IK zLobcD0Z-ycZNPQ0`kCHV?fY2zAz5z(Y7LAZFYtpOsVF|Nh|6#P?H7I$J*82rQH>QqXj4Qvz`T8)3-N2nkBQH$IVq@ zgj*ji{ON1neAJ?_4y4(2vga7PfU5{ygllALDe9fsQYpfzV$S4gwOW4EWx81!8+dF3 zi+&tqho1UuYiU*Th)Yn~(LXeFm$nccd?a+E{qlYCl1!(x@f29 zEw#L$6DePdk8Y_sl1~gy8*tyy1~nW!^;1!w86K!ZOKfE)8}`enPboTxrou}Muu`~O zu^%>|bwzF(&844HD#0fq1-<-cI9j|qK99+6-n%mFqcGmaVw-U516pZ9BLcP4Ks6EM zZn2r6KE`F3MaA!w^AKf=GqxWy%!e=j;zU4)wFucFfNO2qg_@b!gmlWRP9)JYN64Q- zk?t7X0@244>3X8QCS~M_YR^L4U-~HxQLd41;~6w-7Bv_1mX*nEr<=cuE7i<0o6w^` z2)Pd-NF#vVX*#I(vx>v|TW?C{a$pp;oi}C3R8ibq*>G_|&=Jy0{9_Z}o?=kbwhb_j zQ1UCG?Z%C+>zo1UQ;HQ|l-$G(+yj-EbAA(ElyEsGnc(!vPxfs|YTUR+G-YL5gE&Y{ zyI8&RFS0F~>-g0i*8ue9DJlOGP8h?7^ojT^!3m-_tcvAvR!NV|@APW|6-5g(^!>?t zKo~=A-~nHsLT`@Y0}IJww3u?IpWuiKqufib;YtsLiLY1sNX$PyN5A^cPCfSnrfHnF zRPAZN;zZ-X|eJ z?1zxnfjlijFi^SJpRtziw;<@-q!J~|v86V*jx#j7XFB5R?~Skn-X0>mKdR0#>$ zS_tJBh?^#7(5J2c^T*dHwNQjtCKz{29jY5YXI7(A=Mpct=DqLSrXt zUc6fV@@X-rH2?>L^sVOV*Iq&qCh_C*M5?z3@Zy1cb0c~0hiTp-)p`A|UTc3&!cLJw zATP@fCh~&xjCXf=RaLL#eP9cmKtpd|u|#Y?DMN9rmbgLrmv|!YS3Qe8_@n7n97ys~}9Z6}4U$v^ASXD5HGhtzA zL~cnt#@!MYg;GkdaueEd*@S+WCU{B3<7^>a2#Y0fW({kboLbEYQ|U$9d6ip`2ez%E z-H44-cgVC}-aY*y?F&4X!%n&HApR29E#J8g%wk7c@%9XiGqsdFzW&xCxJLS0ER0__ zXay<~2v(z;mOjEbg*jU49tSmk*an=jL}R>s6Tb9sl`YM@8r+8qJ3pKbBpxilFXi6? zb?h9BiefJk7lr2JqX%b=t!rSnxgvbYp$Yu41wjO2RRp8A3x8W*YhwqJKha|chC$a_ z#YZ&|K{-m+V-E!SQRKi!CD3CJ90*3N=3rbS*z$OM&Wpo+T z))}3{ASyXRqS+!UaT%`a8?ZC7OmQLFL58jg%|(mx>tI;DML3q@k(X!Gx35%RIhT*v zpgu$DOm^AO|CnqFaK&EL-O%&si-nEw(OE58L>r>Kx8*^^?u@y9Yk%OKo`KjqG;=#B z;;{`C74!4Z=P6JC5z~5!1$(TxM0?CRX!?gPAd#Gt{(MNtW|3%+rdxF^{+N-P|_fslWdlsN37)Ebd{&a zCYx*Z4V1Sd&)Y5t^oT(`=aDUa2FcsD73?C1e9R_W^bD52))4GEfp~mEIOmZoeFn)va{!Y{_K|b25hVB zJ7~3-bHn+__mbES|6KllOZxb$yBu$jZ3)dw&t}MOk@Z7@SY#$BKw6#l<>baCiH}b6fdEv03TwZ>3PYCNrZ&OMC1+Y zoK*)y!;!f`-fW_bRcFtZl}8R|Z#aq<5DIzbLp8QA(ARPTt5EF(yJ*dX9HW}CBmd2d zS^|8rb9p8XAgzs+16@xZS&BH!GAkt79+i?#A|+wdRSgo(6Ch`CikO`aOul9m0NQn6 z%683ok!xVXO(Pd{OH{Qj_$5ztL+sv-@I)lg$=Bs>CK_}m3$>5cdwpv_Lul75U-K3j zJAubs4%Nl7ZQXs)P;0GHU_&T$)stuVLUe^U8|~#-vWaS@`jk}L{!{;r_yQbSS`^5J zySn74XKD0v?y}If5b3ppz)8gi`v~&jm|whbV)DO!PZHPe@ngZ?rpl9}%TJgTu0XkvWHUugdhg!sHa(bW#*N(z_eU8x3S7$fyZPGV7 zFOoAI`FZo5{(ryQmyx+O$p$UD2sHiyCoiLWSbgdjF5{0k{+7=(>Eouwwrs>vuRaoJaDmCp zgY}1Q>bv2xf!Gvz#>@5OI@@k=x)y1FE_0#r%7YE4Y4Une#fJNy7v-;DMUtudmC&e= znjbanWJ6?PO*>Z>v3gRh&*SOC6v2)S;(py;YOS z1*;9qMtPM1yoJ?T!#d|vybIVnbds;$M(c$Ekt46CLy?2=U4FZnNKVtBl z5|Y2{uoFWZdOrQS3c=3`A)Y;hvg9g>a5Lqoqj+LvOH;%f@PZv1!Pmj9@o#|p?WW;Q z1UZ$RHmgSqAXXB5*jGH=;*31?E_OYA{fI{1U5H{2(Wu+v0j+mgCTeixe>m~jRq5mB z6fd-S(+?xNP8~BHz?P(oINC}63|x$_XuoQ68gI=D!D+y^*VDAy%CUD8iLpNQOP%$P zv`PPt_7U+gjX6l`O1^R}I7-TX)g;Y1Iog$FUlvI%hoV1jQU**(b|0^>CWN2{1%*7m z@%V`J>$7B01A%oRadutKV$$a-6=Fj{du1(MAuDk8m3fQr`$@s`kdBgR20QWN?d9d5 zqZ8#3@i5cc1cs3L6?qmX2R1M^_d?A}Fvk;bYK-z-2iY1Ubue(~ef);r4>&Z=#Nl+$ za>0IpH;EZT`1GIEn>sOu%P6AK{>d6KK_t6cPjj|gEhFbRAv&Ud?7a_gOGaQ#@PJW! z;X#~UL;y&cNm9$z$B`fMmxxk4bjpvilj!+qdUkusR(iQ3S{x;4uF+Qs>R<;ZDc+=p z0W6m!66Inf69-ZsrtG~IIiqkVuwBtQgWAhW2cm39MA9!+P zFjHY$M2Qvnz9*0#1>X-Rf!@D%!#+2&hy9X$`g~(2fgiH9&x;q(Aa2t8>Q+<8WnYqe zk#j*V`ZDEX3JyBN`qUm_Ka+Ge4md)Xa)3=vjEgZffcIhn83o>f2zEhEU7tdz*#Zh% zuZk_-g2Pd_GHN0~vG5HebnO$o#Jd}O?w7peRj=8CH?xB8e_a3uhhzbmyK@>2f9*j?Zqj&G5(XSROw()C2zZ1GJ{^MM+% z&|R#u$7bF5giAf&ZFaQYv+8sS&MNmFHns9Kg=YC}Ak~zk(a@Yzwc=x7W<`6!U6u5y zYh}~|(1%Y*SnI>|^zT@W82smaWr`1gfA`Oz8{VoWxpHtWxi@mh>9gpxLV0eJbo00R z^W0H?7~=d9u|(G*%DA?Jm8*oa6FvV&|0)J$JwKD8$F%bPls=TB|UZnxa% zwJ>T^R{tKiU5>m9txFe1wQJ9ThunFm2str@c8!O8CCJ8~_$Q&vhrU4)BCb}wc7+p} zAZG-{0Xr%mzp(fGwP4DZPS>PPbDvtuBO)u&(^sBsw% z+Hv}pZ7uvs{8vA9%?{DjKl0~ipczuJIJ2RI>#?X`r(dd_zYbpDe8}m>uLrq&$YpcA zeAf(5qinTbqN*=lRl#l_YIihHj$Ahd#m`)eHLt{bnCJxGvi`5u&H^BdtZTp^(%qfX zUDDkk-6$Q>-7TF0(%m44N=k=>bc1wA2}pOtKkokDy7;O4sXGe1pv*HT?z!ildFLJ> zH)laSm=1z<=gqiBzPsGV-F?Ov_!&#iFa2jIn^0Fz)7~lCEI6YGzaS61iqIpIYEqJ> zX*@kfpJy`kpt;_SXb*N^wf7f#7SV3W4PO41SFM)z%L%>4<833pU(@pmnDbF4358?LE-y+dJN- zc+l4OMFz>aB44IqwvK!7T)w41QH*U7}`4&}=5*XG0atcQy^MeF@AQbNd&47tC~ z5kAni=fNhsWN!n(552ly<0*V`N5-ig#3gC|9(wP9TA4#*=+n#tMXn67)%zasMJwi$ z>mK-zdIofj56UMYyb$VwGkRVx<4%x!5!CtU5czmw9EO89VP`l$IbLw$vXxqXuo%p& zpdkuc8nfP#;qbP3{0gD561kBeP;hyX9OE*=0_^@GzD)S}GxIcAoDv16`7HCa#1(Jw zbOW_e2oru#2N)-NkaONUCSg`P-Tjl$9mMa{Tf>Fa8imx(pt!pRQK+3-p!{VlvN&+5 zoSM-)weCmhnQ{mC#ic}gEb3QO6Unp3dXRMnhA4;M^%7oen6?Yrox?YTzUyR#y93|i z9@*w@U(DNOSB~H0;JIOyq>=JsjC`rchmuGcWJFxDPpY|t z$-Ij1?!kdFCf#Ka%ksxif+AX|k2E@O$c}|y?RtHA3boL$vNlYrwqXBZrWzX}1lISU zjdxHjH98&|qsi~?M^)du4#g{|+0UUYj*%_SN!c!-Qt}QZhuF|Kt6f0*s3xAofc!hK4kdp6-f00KF)BGKVH(rBl-B|^HSPu4gWcj z(j;Q;_}6lV=oSP+uKshr1U-Qv7f1v2`YG#fEOpw0l(bD~GndTCdQCZnm+n~I#ZRCw zr8u5h`zKveC$<**NO{rGE~aF~>p=Ehx>bkIgFHHYYJ=GXy}eS^l5@%Cl0Gjx;R&gC zg5eT$gUq+&+>&rff0{HeljwO>dE?)-&A(+hOF5$J%dVCcMGjXrDLg7(R31%8*`tf9Y8n>@84zMQr|o zu=M_=L1lz@OaF>a*}>U7bX}8v!a?!m)h9s3ZF!6^WqHIf z4R^7fA@rbg$#CH3OHnZ5-4wl_B6=FAM3J}Y8EMvLkn}W}JRlS^y~7J6=sJhQ$uh4Y zYMsan#{n~=i@VN#{KBw`7gP{B3|&=xgM^w?Lph|+K@p(n}*Ci5|BF_ zrj=2`m_eNrobuyIRNtfY;4gH1B7FrrxlJU>MK_pG)oqCaQH>x(UmF(1BL{J8<8;;t z3ln@pEE;D6hi>G)U|3pQrQdrbAh^BPTv<%$Z#%he!Hs5RcEPBe?|lCB?TBCIxrafy zv*2UVb_B}gI(WBOBg2A?7afMrt-*AV>cK;K%F$Y=)cRG;${1psrOm9!d*esrn*?b0 z9pK^8gtK1@zpxU}nFVvLg}&#&AU(L0DJ}N|^++U9^3X8*`6o&F!simRij-Cs$gnRk zq#4?lQ44V4O1XR3JmeHPP~ABLy;~Kkr&J#!rjoF+sf8myN_qZZwnG~-ub*Hw{D4gx zGA96jCZeD+00WvcQh>=c_4P|BwK0{*zJ92p)P;f>rvorjVZH$I^1_Bm*3!p8 z_X(t0?;L7>7;_h9Xh4J;yAW!eBW(W!CNWK$n7#TIju-PWDsO;EoLBfLYlxwBfL#`q z)cunl8Iy+6$nudhGex=QzQws@5zg(QYH-Ei-M-?PhSCzvub2^{F4C6T9n+a{mAdZD9o&vD#h_Wq~svcvFcy=Wcud#bQ4 z)lgQ#LNlE=RF&vgFUmr%NnCAHFe$j>`30onS`|%5-{E9w3~x|MgigSJns9`6ps4#e zLWzSwbuO`1h$+DDi3T?!E}X>&(S5YkmA}-P9#Eo8h}d(4VnSLQxTbL~QmxDo&~qed zlco((wXtGT%m?nYM$uw$?l2+afH;JCn6z8Q_u#k#B={tjjIzp_5w81^*o zlEX|r_q`m{o9T4a2*eftCFhH!+>$~;ylrPC#wu*9avrZLjs#*{3x|~y1rM3#1d{3y z;zj}u_2s8VaH0u9WRc2UBd??73YKG-l!YA9_>dh@(zrtUlQ|S#hP?8h^-}7btmT19 z2vge%WH?}Q_E{V+4wB{<#W#&F^Qk&JV>-*vJFS^d{KS6nRCj}8$kM9mV^4iRemcc; zKXU~F8g3=ZCTNtUa|VuT+51TWs&K(Q4Opg8HWLY+fRAPc4_1MK@Rj!{08@0-Q3n3S@e?%NfwP7ynpEm0Yk>qN$3&4)jfm;T$!bn(8*(KqcmtL(J zJj*$EJgxTP<$E>%WMG|r@!-7gG}H^WF>gL}XQOH%;e6}#l^5i7rggLThPPqCd>7mm z{o_w3C3mm1$CR2P;YW6i?;XB+DdGJ@W|+{B<;e1-(0u=kLwt**Yp6%BcMOf!BTMZM zJJQl7d8az{s<%MImM=Jt6EygrotXQi>-*5AHU!VXh@dcwak|6fKMORpWK zc%9;jH3!u;Dflpii?e@1MIYQoG7V$fp-T4oiYV9EY|oOcH2P4=WKukc?fQjqhRp(q zO_&a8nGa?H(r)y80L9&1>W%h~!@1q+8O6&O1?ri4pabZI?6bq~<_u@OOitnVG=hNc z(=_q2MK)UT(3K6VYHWVfim;sxwj?}iqZOmvA4D_~R3py2B*$f*#r|&5(|tZ5ysymERl+~<4SuBBK&(b0#pGVCLE0Eoi&n1AlS_rf^8+AUe zO<8lcpA@Cas8vBp%{4(i2#)_iD!9P1 z>9f3EilFwvEW3zG7Rdoe7V{*n`I4lD(HB-X5IS@Lyb2kzFc6XX>D@JBQlW@vckhK8 zChDGM%}DrQi&3YVsh6~^A;62_yks8M!`I5NKJoJ^g6%$&_Q{=?Q;cW!% zCcP}}A8gyzQ^i)}92yh*2iV#dAabA>7(@4%4S2MTVml@GK^)A1CW0RFMW;=iQajv= zk9*K5#s|rtzvbh!R5W?fS#bio%eZ$%iila!pjx}tEXpZ-s=@oo6>k31)?1=@eib33 z0?hg+i>nA}M!UK;U6&yY?vT>iDzkRMPrrNW8HdmKs&#za3e%>F#2n7aEI5xE6B>b7N@qZY-IrpE z>!H#-l3q^uBf&l_{0yf#QO^zfqFRsY=xox~5ZvN&c;j43%;=&0Hxia(hg?W|th{;0Zz|)AsCNpqoZDk*yWbJc>E%oBR3&~$WzLt;LPvEw zPdH1l!|kx(?p>@b*>rfdrWTK(ron}m?m;A7C~9u4)7N>Gj!J=l#HA2xg~D4ep>*bY zRn@8wbQM2(tF>(JPTnesYfZ{MkoR700CrkqYL*k);bi&PLL*xr17-}Iqg#)6OfL?Dxz#h&uZK11r zG->Bo%VGy?v5I)Ya2?s77*mPKd4>*!v1Gf-bqZ-*w_c)(YMkKcH^i$K=jb^E8t#B6 zxXM3yFwFrX)3ChzN*Mc ze3>bcUZ<-K-j}14zib(#MALmDpl{WW{{fj0>u759_^DlFkubt&LlRDH1WqmJ77MRX+2w!(7E1q3=G3;1O=8AK?205~vb+#|pS2wqCwM z);XSLwj@sSB^^m49nm5knI#?JWt{MwNAAq!z?T;)lYzo53K{`@=+y6|KDgjaIwPkr ziQ1BrJ?QhvigT2+Mgc#*4otnH^qBnVRMp$n>lidyP%*Dg3_X%kI$oj5*AW)bv$Ou& z+mQxkX=q~mb6d%xK9#(A*U&F6QlK)^@y>;o)Y=L+i6SV_9U{T`mf(c2+wqujy1I=%%WsVq>Jcc z7vij4LACEBpdvok1UYg5DRHccyl5HdB1bXD(t@fF^o1*7a2pF-2^)U4DwFAAMc!D| zCiD`UV+6ayUPuDJE4nwUcAL1}5NbtU;Mw-HJ?4EI_WL%7*elu+hZFW8Bbtg0C>oC! zEX21_@ly_;TE^5*^i8;JW|9*SPjAANulhE;>cN`~Ki|+w#_bUqP)y(xAKnS!yeA6- zY32(PRDiOr?3{>{uGR@xJe<}PfPYH5fcy@M2oaqUwQTt=G4Z47B?}aT;~7gN6U=uX z_Yn%xo1~be7Ygg~fJgrZkd0q2dzZD|xEQ15inNm04%m8lZ&iv>E(acdlM0THp+Z%KQTaYOt|2SwP{W=$$-3> zfO3(HuqgwkJc9qOF?vFcYqO{z=mitfH75~wESrVwxVSDSg%sSbNnp5lpwqmQAlTFX_I=IysjWd)iVo8zo}gp~ zc{@5XcUV#1J~Zf1<7zEpTKUt3dvwVjN!gkumd3Al;JBs{ zXt*yEBQ-z+IWbXsV~F4LfV(9f=sl?c5lfC^?B{{cPg0TBQ*Gs80SW61C>hnHJ$iJv z9^LJk8y>D?1Dk}+oDesA>N~BRQ{D_=0>%r6cn^d$zDRxnCDeD;gWOIj5>EC?0T*^< zJ5TED(tTA@z^^~@Ko@oAwBqlHYB;?PwsmST`?#qkUD@g8EKpDObmGAnd}TutuK5y* zbi`csXrnPzvFE@rL1!-p)nE+Jl)72F3iwFS@!;Mhl%Im^B@H!f))YK&Buo5A9n7L8 z99;u3+~>$@)Bhyvqg$d$I&@5LdFBicZhXpWOVUS(>Ruj1E2e>iR6)x-l`C*lHXHA02VR^zV!!Ex(+E z^)n$m=XmLfGG^&_|25N{)Nvl$qF(G*lJnr^G$;cTpc}>(x>yz$sSq80aJ1PYCnRLtE1-|jpuX{Zc)o!$yGO{~FD@rPaUQ_dOi|pCm z)QxU6mY4<2hd6bp4QH%iS4o&3?fI`TyXgj*&-8Xz?A02#$1g9P975RpysVnct|KKV zw*y#WJyaU2$D9Ndd=|!IKY3KSu&B~|Z}jYFXY7=EC-+pK?ZLmh7bT)i{N^nUecOXi ztWAyBitprbNV^!M4I5GfmG&Kb(D>JmY$}Z`{0OpU6-dMKUl;YSl7@O@;j1ATXN1o4 z4zf4%Bzyupz!wVn5NeFSi0^`^BU`3 z8t=E6Z{aE%Dw}0mSBaZyvE86ohRat5qPjB3awNQEPdhsJFfUMEH!FuSfw=1t3Z^w5 zfQRQc$H0cNBf{+vNgN{tpzW0Ex&{f#S@RtpAOs1{Au|qhqmaA8>V`Vg!sjmORXXFr z=aUp1VvGn-`#jvatG<*5W$gN3L34-n)X$k&bBQhpw?XLx#*T7z2RA&yVLB9d{m25< z4xGyzH|q6b8aSb=aqGYwr_Eb;lnOT*qz3zE?sDxeJ3P`y{T&2z;1gkM0@*clQh1BJ z@ImfHHuY6Fa=Q>V@y^8bd-Uybb2ys9+@8;a)~CBoddwCpy_mn ze9dom{i1w!Y>iw^zEG zkSeBraK;yr%Yx+ER1IXUD%JgJ5_$vJ5edCeK~B>P^#~E@e7V`)IY=J|vsVcpDt8>Y zeMy3?55{U{Dbr8p$KXyvjx~T z=tD&z+QNqqvr~et$ldUVHbUkE4#l$BksFfM=tQi^+;E4cL*@h>V26l?_)!`@@0zwl z?uIzz9x^9>=#~8_hm+a2{tzZN`26SsG3*x*4!6gm7L*y4Av+MenvF2w@P&R$kJu)H#AcNmc}emd0Xhmz|B z{hn8&wd{T?!3Z*U%Q=iH#(fp95XtfnNyp*XF~=m0bHK;t`_sE7H5JD5 zxxtlI1}zjbN(+m~?sXYAO47;BYw|S=sB=AnKvxPZ=VU27$q&fC4`ygX6gS+5ub&+% zUZN5Z;U8*iq0HnXiEf%2|4e}iKEIG9DJ_D$T#VT`S$RJ;=|QjPkp?%HQBs{g6R(+} zePG_xjR$6+XdLHU);Bulz>ZgRV zv{dK^g_l!1>8ZA-hT7{tFV;^9A6HJrM8sswS#;ct8ays$*I2&MAxBTzGo<~*yNP#p zSkt0$bi9@n?jL~)Micd*cV+!y9agP%L83kMBdOKFAuC4n6J`-J=(Yqykgya96O0oQ ziu*;=*qmfesTx%j?+U3_vLEO64wXlHG9U^;Kwdi|sdo7nyjuZR=a|-fo8rKT((}qQ zKu9T$#fn#vVl1a{`s2)+v{d=}hSj!C2#P3t1b1J^D?xU6x+S*wWE51}OVYcOZ3Lq_ zp9tq*Nk{V!ZRrw9Bk8sXL7%6fWd{;W!H~YRr6ANA=BW=!z2AX?ejWy8VrV@N0uQC%{yKm1hx|Lb4N}=f)tzE<0pplw7{gCV zl=b9^+8MVFOV+ebi!XUp4$?zrL_|Gy>3xwScqpbD9Op{ngHB)q8%kdkFZ8r}L)z8n z?2}U)m~HS(J+$sH2t7fqsDMDXrY_Jn33I;tQGpP~{|-Ac$K-bLK^T@4kE$cM87bZi zIMo#e$JQ)Lr#DGOU|OVJPnN7ihWt1Xh<&tEKSCZdH9l=Qz+~$-(auzg8(LgR^pbrV zgLGReRdq$)(J%+fJ#5pA*zDoVG_y zhE6&aV4)@SPS6b1v;qIXO}{adVXYxFa4fUfKP+6xO9%|1cs_pD%unh9W85ueqp{V` z6WQE0MEr(%+#^AA&fv~mhn2?@g!9^6g%F)9X0L@iOZ*2FzO%V3QGngBH-fZ68S#8;=pew5=;O`M! z8U13-yYqOfERvQEF7isW*Zu1Z2XMBSpqIV7O@qz@&>P0V4bsx!J<7RnaKY-wSt@$3 zk7$bpwQ-7D>+?$%2tV)fqa&g^`4Z^JMg;q#8G-j_W&|Y%J5w7YLpD}YVIvERKld+4 zi}_AD=dlE z??RsDgd2bIXPpsb=(qp4oMu0lw0?bdvBCZXCf(?n7?a;!DQcc>U`wrB-F&9vVLKS$ z?v-AW&l_cCZ58DS<*XMiO6X>AAxhg~z8GE_;ABT}qiTvelAdHol3ezq6$mF0h&ue% z1e*{G)Ine@xgtfvbuz=KTJHfhwF)H@D#6}ZPiN%A}L@ooRXE>XM{2N zH2T^`3t}lCmSn>5%!E`7ZjKCxopu^mx**c8;9v-iP^g?AhRy80o)km$Jui}8CoB%( zp;szu?+?$}T&39X*8Qgq3kInPsC2XwHv2Rp&=_(A#qUDaFDa5)*)u0nRy=&?47VP* z_37!J?^J@NyMk_*r?{!{0K}`J1FTMizPCJO5LO=^!=Qtu6yyt>)HzBXK$uPFcRt!*MXwV5Z6gyj)Ngf8i;jwyt6Qf3Nm1rd%dSYBYCwol5@9CMH z>C~m&;F8pY)qSXtyZ)d{4-(suYPz{1KZ`SmvxxI~(n#vK=3srctI9$0N5?+VzC5Op zPXWy~Vf$FyB(l9r1S;`Vb#mq^UGZK|;`Zl}E~IJ19El|FTI`qlzGv}_mK8Z?2u|4V znP)m$Prddh=X;wxRy-(ul%g#`OX^K>guZtG#vw@%(T8p${wCk-&PMgqyg#-WV{077 zWdXLsF$VgNe}9V&!C&)E2|arg;lEn7#wp0ip$Q^+^1@BGauCrH(!UOU0{P)B2$MUo zIc8fmwAmsKs$8ydrH_WOI~y~G= z4`QLmDe|O-$%Y4pDKzlSM^1uA#t}=<9d}xTRfFJ;8X7q;Y>mozycm>=u`F0lO^0IO zUbf1c8&k7zqcxVDKhp*_a&B#q?y7oE^z7VE!cM=vPAoTLJ~-<@(vR5W`Pt5L$s=X1 zxMF5puA%!}xZTg|0iN?zLaj<52~vPqUh_d9*hLD?<3~JJF5O@L+1n zRXO1)sTie4H^UQ|4UmWT2ymSECWJ>gA)G7*sk@{)t9mb|?oW`_7X$Ym?hm}ZvOn!( z*k#b{Ce_2|%Oa;OjLm96&kxpk;v9zUg6DY7(efx|v7Q@_(X+T}bF?5~2kXk==@dFo z(c4s^r&hWW#4NIo7z1kvAuA?}R5(q5fx5l1h#(pQw)z#AjBC5mg4wE5kFBy^$xew*X`^&7f%xzNf74^)* zE}l8fNQGQ<%~3Bj6!Fe5WwK;lM##kw4Kb>4XO7o#_&-<~7raNzLwjLnKaNh{I(IJC z=RglP@+`kNHfkmakZZP zBwIv^mY$o4+~}*y<@Dmt@;w=wVFlkRvxu&(VfB6^X30@}oh1Ev7&lq3(8@d9_&AF= z@mQe-6Kjbg(OLVEXsxnM`}HIUKo5X6{CG%=sj zpVncyV2&0e%KeXyW%W#vC7qF1Ws7I^Q`uOplv8$0uqYfocO zFOeoDijO_$Md{E=aKy1my}QXpZfH5>IGn$9)TU9Me!slj_0UHiHTQ+$4UvkaufGY> zOXW9lDEbuCB{I8}rl*5V2Zv7}lwCX+I&`7d8y5`9fF{YJ&JQN) zC3%a)vQ`HIZX4-)_>UmkE4N7xBYM>@UWs(|tQ12%E2(d>pijZt?UHCtnu{+#P+GEA ziZ`y?WKZpv;f`0cn>>?-r)L|BQo70a0`=xe(+HeD;cp|b<8hyID(=#)Wa~-xfn@)f znpzct6zs@LG}XD29QZ8NATs_jg{5_}=03{WvKU~7uaN~VvUdD%cmu^*z`Izvydxs)_7uy(dai7stE5tJG@T_W2YKEYE! z?8D8v%tV7BE(}^_QjKnYzs(l*MEq&aJzcB!yOJ}7dI(xLifiM$Naw6Gv?Oi*v>|*g zZ#xLw;nS)meTuT6X*uDj7me0^iLrWwrH^9C}tumbDJ7)|ReJEwth z!*%zv_Ku;6M5=^F6ZO6qjgCIf2V@FXdYTZ9IN>HZjXPnu4&%rmcCb6DPaPde|J2DG2 zG6#QNP&s@kx;zERzqf+VE0ovarG~(%yUJ1~;qzVyo;Ve-t^^oAc^)Dsz4s*hEXh%R=sg|mV@rBi;q>Maz;F7YGOlD@Ew?7(<0B5Dk zJfrkAGGl6?C|%^Zi`J){E;dm$Ykt@B(PL*V__FL1xG`HZ$P97PJSGca_Lhzz3$ws} z&JEu6dt7mt^C2lyJnoHf<%M_3*HfWv*NuePmJ7UgizFvkahmGe0{jcYh2yGG6Ts$l zKpF8Q%o0S+4M7Fi9fjiw8a;~Es|)RwscP`5Yf!4sQnNyGOY?iT+GWFOc5>eF>+3o@ z;qLQ%lC!xI-y_5O*iG1;!{?d6Mb)noIl`6UcF4i|?vTpup}dv#5c`gO0to-(iwvUh zjJ?zPPOv?Dt23S5t_PRahY6c!D%UvmfqpJ&2K7GTyX4|7U^>RYPsG=;sE$vJ&OZWBV#LSig*i2fp{6)m$vBHKEqw0a*19(Nm=jx3_`W5>BB3&Cc*~#yHT?o{ z0e@5JQk5rYtk<-H7xn;d3bSNipLcWf{HUVK*L$!}7xAACq-TO-cXU2wS zrvB?V6<3g-lOfK-LFQ(l=MWwIkJ4h!e@u&A8UD=sb=|#?xpvKqAMFw@egT5!p z-3xQP3B32Y3_6u&qWEp6m&&Z?9fMk+I~#`WE}|i`$k#u@>4{|@M|wC$S3aa3ji|QE zp$~;kZKcG%??HtxclLU7K3F%?%`{PhNjbhhshxTlj^Y92wwg)jxFXE#ZuJgqM%L~s zk&Vbsf=I<;MWO5G$xieSlO6V7vEu*R zP(?!tPX+Co{*aaxOgicvh%FXMnrL4MQ~{A5b~c#sV2Q~hireGY2EuX!%5v=Fg`uv4 z>V8cYuV|#tu>&0~U_=~h1Ai1&G+S%~} z84L>#N01(W>sO)v*buMvC1T{ou0I?@J}=tJ*;eE{Y( z#ytWXk*0ePcuW!!51EQgI?#F5Xc;T=6XI0JvZ&nnm~MQV<1`;u2Vt3g9Ibzy7%!MQ zTor*MYaA9JQdwY3*ZQH>wY!Ab80E4eNu3^-7Yxjp+Al3!_}*Q7T6;e;jb$+nx=*l$ zxvNFy<#fh6T6xzlL85v0l$}{CC2}c3IY|biR2{u~sST@{iVa!IPG?f#u7)OVJ_te? zS@qiv$x?BV*}d;el5#Q)`zWC~_L-K<3$`MRN)s0^`lwNfp@bMfZyggwA5cu4VdLGa;*f{Zy1%42!qCja{`P>6M_ zwVO%~+b}QKiLamr*y~p7E3Kc65yRE(DUA~PI1ydbz2FnsI@wL1@U`Y9F!Q}xA@5ve zM^dk%f(aIrf}w4O40xEFHTHN9O5;T{PN%5-!Xg5)6?&I^>Ju>kJhm)Z+dY4(iP>~+ z=e>P;&PfDs0-4SjBQyj0K}tPX-&b4s88B|}A`I2|J0=5``Z^cGD_UlL;IK4q!{hL*Q&YZihHNAZy z4hzvF!91&zGc9UnUAlpLEzf&>37T*5>4g29PPQBEKx*7bQ)^vJx#739q)2@lkZdo()p z{*|&OY6ZDP+$Ms!TMC$#sWZMa*AkmoQg;66VasYHlPP;%*bNS%-)<{-u$uhpQ6=~XaVX!0)K3Y40;C*1PufV z3JPRc+5B_UT@WC8{&7Hq0RQRMAtS0RNGB;P#&F&Jd7ixet1^A;h$6s$7X?1hZvEQl zV&`AKDkCT>DJH6&Vwlpzi*1H3@&mJ}?QKh5|G{XKuT<->wu1~lgjM2*`_GMwLLe#igAcG$3} z0jBeRF?;ZTo5}KR`w5w1i_ikhtp8$~68|=n_1nyd`jWhAV1N~neLd`;fuDSD5PW60 z|M<*TKmImxuKE)68Q?)MKywoyRZ1g@}!FqsP zu|TB1J->)@|2*~E3=7VH25TUWlmeX3OO`JO4B!945HoeLan;Pp-1hDj;D*MJ zyh6#yQqRW3+U}obf2n@vxmbW;4fvki-$Vcbsg(Rl!e_1hg(dxC^#1kjx5XnF^+#3( zLjM6Gki^}BcL2?SeoDMs@Nd&-Fi}|K0Y$0;_5xzV-;OZFpQC;I{D{WKP@j#J12Aq6 zCT^AQpI^z<%D}|V+RD^T&%xCCpTY!OJ$r{0z)1Qp27=m8GrluftsbGtx&e%u|6+Vl z|7pf|CZ|g9Yj+obQT|_y#)m)6_|9a+T=;6S5MT%cu6^4c$(ldSxc_aN(|JqPNdgQ` zK#tG-tiBx2wSSr+sBiCJr)S^*6y41A^ev3!^v#S69KH<}F+3sh1E5C0yvOr}3cNDa z{b}$YWA%IaQbR(P6eOTRWniEJZxH<3p=$7Jq;E@9X6DcJ5a8?p8SU*5{_gRwaReP4 z>{P8SfN^EA_$SpuuWj+PFRI#+dyY^MA43Q?@)9UchPY0QM93n?6B6qHKPR z`Xf(4=y5t00BH9B8ZfEy^f1D)S)PgcwJKMVS{i$uI>VA%o$ zXadCfycYj*B)fl~@Sk2PU)J59@8<(+6jC8mF-NO!qYm};{XPQcj|Nb;wYKl^E2!^+ zrqeHItO3&~0Ghj<9tnE=0_fY)w0CXDFaeNbV0_({2HocuAgUbS3l{c5GGHr!+MEHk z34AdR@T%DF*Fb^>pQpudi`B1t3AX{9I~Sk{-J;zI_%)i4>5q8wWlGNBfSr1P6}{js zo>t(m@q{I0zVzDqdQH%OYFhdZz_0`2eeR|A3#!UKgh02Bv+-X5W%slN>U0WTJP34Z|y zbkV>l6}_cZtF&L^JuvzQ=W(MNuPO$d#~g4Tkz2@?%wI(8IRZOmg`tOs=fj{xA_mK5*#uXBGyOq6pduK}XLF<{Qy?ju?7 zYeZn$|05uLTS9L=s|5pa5RiQ!`T)g=za4fje~tI0Kke5+=iXx0?mj?x3uyCpbQdi9 zHP)ZWnUL$BUw<5Dn=6tscL91WK>yq{^2UJs!ExKHyJ8}H4( zgZ{n?+wO}xtO2|rfPH&X3$6Se_K%fq$4m?IIhphUsJEliTGj7SzpLb%bfe((oNUeqfB0a)-BGo|*|m`X;*mPX&3TlgJg z#;ySjDS*4JRp0tw#MxMwI{au39nFmpoC4y*_Rp0Ol(J z;=A}QkJ%ghHQqN`Mt`l-H&101Ki`Z&0id_1F@>q$fZBgQ*E@lTaSZ{gH1zKXdvo4;Fnb0Ej$oUjpFUDgfp7eViy@iStj| z`69sWhXKB($i44IGY2T2Wx1U}Jf-{@%C{ao_?jhq4SFO81p*QVEJttK+mQMvSl@Og z84;bRb->OcfH1(FfWI9`EdPA+AN8#z{m~M8Rqlc4=j5Ogz}_yX+OYm6_Qz}cabO?k zI3OaR0{0?rC)LyUe-r$}MZRLGW;0~f2il5S?vQmn-UERL6(|GC z-4b3vty=Yfr}YC< z^zCKWwEXY0f9PjaCRhYLfWAN9c~H9LXDF(_iT<2A{B!xh25g?J9RM=|7jRp4ZMA>l z0)A9SkQgGUdIy9TTEOJDXO#@~-$ehops<2uvjqpFWUD}2yPe?9YW^np`&qSCqJ{7o zpy**h(YL1*Z6LY-t%&k7B?h|(@&>2CW%L4%`-KKP*gubT~!d1-KFb z_qM`OEPt2#PZf#|VmWm(2oMk=g#XGWfcK63mdyW9s%RgGKJ^7k6+XmYYn#dOx5+=K zS+K<7TmpU!5(LEe+p(P{@L%A5Kg_<6sG>LmOiTt$Dz|f1xZvLe{|{A+Wo33%CO~8Z zV9j!SHuVnsH|ReoXZ(GyD51ZFRN#(8KN=NdN!<