sensu-plugins-redis 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 710fd32ec942d39f988ea48ee3c9e2c68ad27dcd
4
- data.tar.gz: 1fc4b00dc7cc2cca1bf79e12562936052693aa12
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NjYwNWVhYzlhZWYwNWNhMzE1NzY3Mjg0M2I0NDNmOTJiZjc0OTlhOA==
5
+ data.tar.gz: !binary |-
6
+ ZWYzYTdlN2I3YmNhMTliMTlhN2ZmZmFlMjNhN2NlZmFiMGU5OWY0ZQ==
5
7
  SHA512:
6
- metadata.gz: c41d8f1e0462cbe4fbc02202babe837f57887ed4f6acf84ae1e4c1eff2b98a400ce6d96ad45cbf6c435bb3f50a88cd495f48dfa22e8a81079eaf2e334104b920
7
- data.tar.gz: 3d0217a87f55c4f3327b3192de5bb224d6afed5298ffdca52d4b4337384c18c5b06cda1a1458049101d4d9ef45d9dab0af7ddb275d6ec95b0e3e01565a91c86e
8
+ metadata.gz: !binary |-
9
+ OWMwYjJhZGM5MTNlYjgwOWE0ZDFlNTg2ZTNlZmY2ZTM0YjU3NTRlNjA2YjM1
10
+ NjMzZmJjMTFkYmI0YjVmMTc2Y2Q3ZmIwMTBlNTQ4MmNiZmZmMDA1MmFlNzdm
11
+ YzdiMDFjODdiNDk1YTg5YjNjOTk5Y2Y3ZmU4MjQ1Y2YzYTM0YWE=
12
+ data.tar.gz: !binary |-
13
+ ZWQ3N2M1MDg2ZTY1YWY3Zjc4MDQ3MDZiMGRjY2ZlYzNiMjVhNmI0Nzc1NmVj
14
+ ZTVlYmI0NmM3Mjg3MDJmNzc0NWU4NDQyMDczZTIxNDEwOTMzMzVjMTk1ZjZl
15
+ OWRhNmZlNjkyNTEwZDFlMGU1ZDRlMjQ5MWEzYTg4NmI3MzE5NTA=
@@ -3,19 +3,21 @@ This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
4
  This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
5
5
 
6
- ## [Unreleased][unreleased]
7
- - nothing
6
+ ## [Unreleased]
7
+
8
+ ## [0.1.0] - 2016-03-22
9
+ ### Added
10
+ - added support for memory check using percentage %
8
11
 
9
12
  ## [0.0.4] - 2015-08-04
10
13
  ### Changed
11
14
  - general clean no code changes
12
15
 
13
-
14
16
  ## [0.0.3] - 2015-07-14
15
17
  ### Changed
16
18
  - updated sensu-plugin gem to 1.2.0
17
19
 
18
- ## [0.0.2 - 2015-07-05]
20
+ ## [0.0.2] - 2015-07-05
19
21
  ### Added
20
22
  - Add check for existance of Redis keys
21
23
 
@@ -23,6 +25,11 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
23
25
  - Fixed the gemspec to properly install the plugins to the embedded sensu bin dir
24
26
 
25
27
  ## 0.0.1 - 2015-05-31
26
-
27
28
  ### Added
28
29
  - initial release
30
+
31
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-redis/compare/0.1.0...HEAD
32
+ [0.1.0]: https://github.com/sensu-plugins/sensu-plugins-redis/compare/0.0.4...0.1.0
33
+ [0.0.4]: https://github.com/sensu-plugins/sensu-plugins-redis/compare/0.0.3...0.0.4
34
+ [0.0.3]: https://github.com/sensu-plugins/sensu-plugins-redis/compare/0.0.2...0.0.3
35
+ [0.0.2]: https://github.com/sensu-plugins/sensu-plugins-redis/compare/0.0.1...0.0.2
data/README.md CHANGED
@@ -1,11 +1,10 @@
1
1
  ## Sensu-Plugins-redis
2
2
 
3
- [ ![Build Status](https://travis-ci.org/sensu-plugins/sensu-plugins-redis.svg?branch=master)](https://travis-ci.org/sensu-plugins/sensu-plugins-redis)
3
+ [![Build Status](https://travis-ci.org/sensu-plugins/sensu-plugins-redis.svg?branch=master)](https://travis-ci.org/sensu-plugins/sensu-plugins-redis)
4
4
  [![Gem Version](https://badge.fury.io/rb/sensu-plugins-redis.svg)](http://badge.fury.io/rb/sensu-plugins-redis)
5
5
  [![Code Climate](https://codeclimate.com/github/sensu-plugins/sensu-plugins-redis/badges/gpa.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-redis)
6
6
  [![Test Coverage](https://codeclimate.com/github/sensu-plugins/sensu-plugins-redis/badges/coverage.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-redis)
7
7
  [![Dependency Status](https://gemnasium.com/sensu-plugins/sensu-plugins-redis.svg)](https://gemnasium.com/sensu-plugins/sensu-plugins-redis)
8
- [![Codeship Status for sensu-plugins/sensu-plugins-redis](https://codeship.com/projects/e211de50-e89a-0132-adeb-62885e5c211b/status?branch=master)](https://codeship.com/projects/82841)
9
8
 
10
9
  ## Functionality
11
10
 
@@ -13,6 +12,7 @@
13
12
  * bin/check-redis-info.rb
14
13
  * bin/check-redis-list-length.rb
15
14
  * bin/check-redis-memory.rb
15
+ * bin/check-redis-memory-percentage.rb
16
16
  * bin/check-redis-ping.rb
17
17
  * bin/check-redis-slave-status.rb
18
18
  * bin/extension-redis-output.rb
@@ -59,10 +59,10 @@ class RedisSlaveCheck < Sensu::Plugin::Check::CLI
59
59
  options[:password] = config[:password] if config[:password]
60
60
  redis = Redis.new(options)
61
61
 
62
- if redis.info.fetch("#{config[:redis_info_key]}") == "#{config[:redis_info_value]}"
62
+ if redis.info.fetch(config[:redis_info_key].to_s) == config[:redis_info_value].to_s
63
63
  ok "Redis #{config[:redis_info_key]} is #{config[:redis_info_value]}"
64
64
  else
65
- critical "Redis #{config[:redis_info_key]} is #{redis.info.fetch("#{config[:redis_info_key]}")}!"
65
+ critical "Redis #{config[:redis_info_key]} is #{redis.info.fetch(config[:redis_info_key].to_s)}!"
66
66
  end
67
67
 
68
68
  rescue
@@ -0,0 +1,99 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-redis-memory-percentage
4
+ #
5
+ # DESCRIPTION:
6
+ # check redis memory usage in percentage
7
+ #
8
+ # OUTPUT:
9
+ # Criticality of memory usage by redis
10
+ #
11
+ # PLATFORMS:
12
+ # Linux but not tested (Windows, BSD, Solaris, etc)
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: sensu-plugin
16
+ # system: awk, pattern scanning and processing language
17
+ #
18
+ # USAGE:
19
+ # set warning and critical threshold for checks, option are verbose enough
20
+ #
21
+ # NOTES:
22
+ # this script compares redis memory usage with system's total memory pulled from /proc/meminfo
23
+ #
24
+ # LICENSE:
25
+ # Milan Thapa <milans.thapa78@gmail.com>
26
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
27
+ # for details.
28
+ #
29
+
30
+ require 'sensu-plugin/check/cli'
31
+ require 'redis'
32
+ class RedisChecks < Sensu::Plugin::Check::CLI
33
+ option :host,
34
+ short: '-h HOST',
35
+ long: '--host HOST',
36
+ description: 'Redis Host to connect to',
37
+ required: false,
38
+ default: '127.0.0.1'
39
+
40
+ option :port,
41
+ short: '-p PORT',
42
+ long: '--port PORT',
43
+ description: 'Redis Port to connect to',
44
+ proc: proc(&:to_i),
45
+ required: false,
46
+ default: 6379
47
+
48
+ option :password,
49
+ short: '-P PASSWORD',
50
+ long: '--password PASSWORD',
51
+ description: 'Redis Password to connect with'
52
+
53
+ option :warn_mem,
54
+ short: '-w percentage',
55
+ long: '--warnmem percentage',
56
+ description: "Allocated % of Redis memory usage on which we'll issue a WARNING",
57
+ proc: proc(&:to_i),
58
+ required: true
59
+
60
+ option :crit_mem,
61
+ short: '-c percentage',
62
+ long: '--critmem percentage',
63
+ description: "Allocated % of Redis memory usage on which we'll issue a CRITICAL",
64
+ proc: proc(&:to_i),
65
+ required: true
66
+
67
+ option :crit_conn,
68
+ long: '--crit-conn-failure',
69
+ boolean: true,
70
+ description: 'Critical instead of warning on connection failure',
71
+ default: false
72
+
73
+ def run
74
+ options = { host: config[:host], port: config[:port] }
75
+ options[:password] = config[:password] if config[:password]
76
+ redis = Redis.new(options)
77
+
78
+ memory_in_use = redis.info.fetch('used_memory').to_f.div(1024) # used memory in KB (KiloBytes)
79
+ total_memory = `awk '/MemTotal/{print$2}' /proc/meminfo`.to_f # total memory of system in KB
80
+
81
+ used_memory = ((memory_in_use / total_memory) * 100).round(2)
82
+ warn_memory = config[:warn_mem]
83
+ crit_memory = config[:crit_mem]
84
+ if used_memory >= crit_memory
85
+ critical "Redis running on #{config[:host]}:#{config[:port]} is above the CRITICAL limit: #{used_memory}% used / #{crit_memory}%"
86
+ elsif used_memory >= warn_memory
87
+ warning "Redis running on #{config[:host]}:#{config[:port]} is above the WARNING limit: #{used_memory} % used / #{warn_memory}%"
88
+ else
89
+ ok 'Redis memory usage: #{used_memory} is below defined limits'
90
+ end
91
+ rescue
92
+ message = "Could not connect to Redis server on #{config[:host]}:#{config[:port]}"
93
+ if config[:crit_conn]
94
+ critical message
95
+ else
96
+ warning message
97
+ end
98
+ end
99
+ end
@@ -20,7 +20,7 @@ class Redis2Graphite < Sensu::Plugin::Metric::CLI::Graphite
20
20
  'run_id', '^slave', 'used_memory_human', 'used_memory_peak_human',
21
21
  'redis_mode', 'os', 'arch_bits', 'tcp_port',
22
22
  'rdb_last_bgsave_status', 'aof_last_bgrewrite_status', 'config_file',
23
- 'redis_build_id']
23
+ 'redis_build_id'].freeze
24
24
 
25
25
  option :host,
26
26
  short: '-h HOST',
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsRedis
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 0
5
- PATCH = 4
4
+ MINOR = 1
5
+ PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,51 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDgDCCAmigAwIBAgIBATANBgkqhkiG9w0BAQUFADBDMRIwEAYDVQQDDAltYXR0
14
- am9uZXMxGDAWBgoJkiaJk/IsZAEZFgh5aWVsZGJvdDETMBEGCgmSJomT8ixkARkW
15
- A2NvbTAeFw0xNTAxMjgyMTAyNTFaFw0xNjAxMjgyMTAyNTFaMEMxEjAQBgNVBAMM
16
- CW1hdHRqb25lczEYMBYGCgmSJomT8ixkARkWCHlpZWxkYm90MRMwEQYKCZImiZPy
17
- LGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyTSzVYnO
18
- CLgyrIyT1mBQakArQyW8xhi6MlDqyzXHJGeERT790U6EgoBVeS4XoK0ptFZNR8Tf
19
- zko0w+Nv47TarSCgkPOaxY+mxWnAVR10dOmfeLr7huiMyps+YD56/EF2FqQ3jf/+
20
- qohENfKD91qy1ieEy+Fn7Pf74ltbNKUdkb9a9eFXQ0DQ4ip5vik7DzjQkUTj4lca
21
- k6ArwnmHX4YDhZoYtrQJ8jVktN0/+NtA40M5qkCYHNe5tUW25b/tKVYuioxG6b2Z
22
- oIzaZxRLxf6HVAWpCVRT/F5+/yjigkX4u++eYacfLGleXQzoK7BL65vHGMJygWEE
23
- 0TKGqFOrl/L0AQIDAQABo38wfTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
24
- HQ4EFgQUEf6a8Td7MrSZc8ImbLFZAENPbz0wIQYDVR0RBBowGIEWbWF0dGpvbmVz
25
- QHlpZWxkYm90LmNvbTAhBgNVHRIEGjAYgRZtYXR0am9uZXNAeWllbGRib3QuY29t
26
- MA0GCSqGSIb3DQEBBQUAA4IBAQBbzXAYA3BVGw8DZ0YYoY1VHPNEcH5qPIApmHO8
27
- rvSmuUT0yMEi7u00H/5uHRFf4LleGT/+sTdyXKsNPGT9kdRuQEgwi+vf7Zfvd8aX
28
- UF/+4VkEYf/8rV8Ere6u2QaWPgApdMV6JjKr1fAwCTd8AuGXNaWItiPPMseSQzLJ
29
- JKP4hVvbc1d+oS925B1lcBiqn2aYvElbyNAVmQPywNNqkWmvtlqj9ZVJfV5HQLdu
30
- 8sHuVruarogxxKPBzlL2is4EUb6oN/RdpGx2l4254+nyR+abg//Ed27Ym0PkB4lk
31
- HP0m8WSjZmFr109pE/sVsM5jtOCvogyujQOjNVGN4gz1wwPr
32
- -----END CERTIFICATE-----
33
- date: 2015-08-05 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2016-03-22 00:00:00.000000000 Z
34
12
  dependencies:
35
13
  - !ruby/object:Gem::Dependency
36
14
  name: sensu-plugin
37
15
  requirement: !ruby/object:Gem::Requirement
38
16
  requirements:
39
- - - '='
17
+ - - ~>
40
18
  - !ruby/object:Gem::Version
41
- version: 1.2.0
19
+ version: '1.2'
42
20
  type: :runtime
43
21
  prerelease: false
44
22
  version_requirements: !ruby/object:Gem::Requirement
45
23
  requirements:
46
- - - '='
24
+ - - ~>
47
25
  - !ruby/object:Gem::Version
48
- version: 1.2.0
26
+ version: '1.2'
49
27
  - !ruby/object:Gem::Dependency
50
28
  name: redis
51
29
  requirement: !ruby/object:Gem::Requirement
@@ -64,144 +42,143 @@ dependencies:
64
42
  name: bundler
65
43
  requirement: !ruby/object:Gem::Requirement
66
44
  requirements:
67
- - - "~>"
45
+ - - ~>
68
46
  - !ruby/object:Gem::Version
69
47
  version: '1.7'
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
51
  requirements:
74
- - - "~>"
52
+ - - ~>
75
53
  - !ruby/object:Gem::Version
76
54
  version: '1.7'
77
55
  - !ruby/object:Gem::Dependency
78
56
  name: codeclimate-test-reporter
79
57
  requirement: !ruby/object:Gem::Requirement
80
58
  requirements:
81
- - - "~>"
59
+ - - ~>
82
60
  - !ruby/object:Gem::Version
83
61
  version: '0.4'
84
62
  type: :development
85
63
  prerelease: false
86
64
  version_requirements: !ruby/object:Gem::Requirement
87
65
  requirements:
88
- - - "~>"
66
+ - - ~>
89
67
  - !ruby/object:Gem::Version
90
68
  version: '0.4'
91
69
  - !ruby/object:Gem::Dependency
92
70
  name: github-markup
93
71
  requirement: !ruby/object:Gem::Requirement
94
72
  requirements:
95
- - - "~>"
73
+ - - ~>
96
74
  - !ruby/object:Gem::Version
97
75
  version: '1.3'
98
76
  type: :development
99
77
  prerelease: false
100
78
  version_requirements: !ruby/object:Gem::Requirement
101
79
  requirements:
102
- - - "~>"
80
+ - - ~>
103
81
  - !ruby/object:Gem::Version
104
82
  version: '1.3'
105
83
  - !ruby/object:Gem::Dependency
106
84
  name: pry
107
85
  requirement: !ruby/object:Gem::Requirement
108
86
  requirements:
109
- - - "~>"
87
+ - - ~>
110
88
  - !ruby/object:Gem::Version
111
89
  version: '0.10'
112
90
  type: :development
113
91
  prerelease: false
114
92
  version_requirements: !ruby/object:Gem::Requirement
115
93
  requirements:
116
- - - "~>"
94
+ - - ~>
117
95
  - !ruby/object:Gem::Version
118
96
  version: '0.10'
119
97
  - !ruby/object:Gem::Dependency
120
98
  name: rake
121
99
  requirement: !ruby/object:Gem::Requirement
122
100
  requirements:
123
- - - "~>"
101
+ - - ~>
124
102
  - !ruby/object:Gem::Version
125
103
  version: '10.0'
126
104
  type: :development
127
105
  prerelease: false
128
106
  version_requirements: !ruby/object:Gem::Requirement
129
107
  requirements:
130
- - - "~>"
108
+ - - ~>
131
109
  - !ruby/object:Gem::Version
132
110
  version: '10.0'
133
111
  - !ruby/object:Gem::Dependency
134
112
  name: redcarpet
135
113
  requirement: !ruby/object:Gem::Requirement
136
114
  requirements:
137
- - - "~>"
115
+ - - ~>
138
116
  - !ruby/object:Gem::Version
139
117
  version: '3.2'
140
118
  type: :development
141
119
  prerelease: false
142
120
  version_requirements: !ruby/object:Gem::Requirement
143
121
  requirements:
144
- - - "~>"
122
+ - - ~>
145
123
  - !ruby/object:Gem::Version
146
124
  version: '3.2'
147
125
  - !ruby/object:Gem::Dependency
148
126
  name: rspec
149
127
  requirement: !ruby/object:Gem::Requirement
150
128
  requirements:
151
- - - "~>"
129
+ - - ~>
152
130
  - !ruby/object:Gem::Version
153
131
  version: '3.1'
154
132
  type: :development
155
133
  prerelease: false
156
134
  version_requirements: !ruby/object:Gem::Requirement
157
135
  requirements:
158
- - - "~>"
136
+ - - ~>
159
137
  - !ruby/object:Gem::Version
160
138
  version: '3.1'
161
139
  - !ruby/object:Gem::Dependency
162
140
  name: rubocop
163
141
  requirement: !ruby/object:Gem::Requirement
164
142
  requirements:
165
- - - '='
143
+ - - ~>
166
144
  - !ruby/object:Gem::Version
167
- version: 0.32.1
145
+ version: '0.37'
168
146
  type: :development
169
147
  prerelease: false
170
148
  version_requirements: !ruby/object:Gem::Requirement
171
149
  requirements:
172
- - - '='
150
+ - - ~>
173
151
  - !ruby/object:Gem::Version
174
- version: 0.32.1
152
+ version: '0.37'
175
153
  - !ruby/object:Gem::Dependency
176
154
  name: yard
177
155
  requirement: !ruby/object:Gem::Requirement
178
156
  requirements:
179
- - - "~>"
157
+ - - ~>
180
158
  - !ruby/object:Gem::Version
181
159
  version: '0.8'
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
163
  requirements:
186
- - - "~>"
164
+ - - ~>
187
165
  - !ruby/object:Gem::Version
188
166
  version: '0.8'
189
- description: |-
190
- This plugin provides native Redis instrumentation
191
- for monitoring and metrics collection, including:
192
- service health, database connectivity, replication
193
- status, `INFO` metrics, key counts, list lengths,
194
- and more.
195
- email: "<sensu-users@googlegroups.com>"
167
+ description: ! "This plugin provides native Redis instrumentation\n for
168
+ monitoring and metrics collection, including:\n service
169
+ health, database connectivity, replication\n status,
170
+ `INFO` metrics, key counts, list lengths,\n and more."
171
+ email: <sensu-users@googlegroups.com>
196
172
  executables:
197
- - metrics-redis-llen.rb
198
- - metrics-redis-graphite.rb
199
- - check-redis-slave-status.rb
200
- - check-redis-ping.rb
201
- - check-redis-memory.rb
202
- - check-redis-list-length.rb
203
- - check-redis-keys.rb
204
173
  - check-redis-info.rb
174
+ - check-redis-keys.rb
175
+ - check-redis-list-length.rb
176
+ - check-redis-memory-percentage.rb
177
+ - check-redis-memory.rb
178
+ - check-redis-ping.rb
179
+ - check-redis-slave-status.rb
180
+ - metrics-redis-graphite.rb
181
+ - metrics-redis-llen.rb
205
182
  extensions: []
206
183
  extra_rdoc_files: []
207
184
  files:
@@ -211,6 +188,7 @@ files:
211
188
  - bin/check-redis-info.rb
212
189
  - bin/check-redis-keys.rb
213
190
  - bin/check-redis-list-length.rb
191
+ - bin/check-redis-memory-percentage.rb
214
192
  - bin/check-redis-memory.rb
215
193
  - bin/check-redis-ping.rb
216
194
  - bin/check-redis-slave-status.rb
@@ -222,7 +200,7 @@ homepage: https://github.com/sensu-plugins/sensu-plugins-redis
222
200
  licenses:
223
201
  - MIT
224
202
  metadata:
225
- maintainer: "@mattyjones"
203
+ maintainer: ! '@mattyjones'
226
204
  development_status: active
227
205
  production_status: unstable - testing recommended
228
206
  release_draft: 'false'
@@ -234,17 +212,17 @@ require_paths:
234
212
  - lib
235
213
  required_ruby_version: !ruby/object:Gem::Requirement
236
214
  requirements:
237
- - - ">="
215
+ - - ! '>='
238
216
  - !ruby/object:Gem::Version
239
217
  version: 1.9.3
240
218
  required_rubygems_version: !ruby/object:Gem::Requirement
241
219
  requirements:
242
- - - ">="
220
+ - - ! '>='
243
221
  - !ruby/object:Gem::Version
244
222
  version: '0'
245
223
  requirements: []
246
224
  rubyforge_project:
247
- rubygems_version: 2.4.8
225
+ rubygems_version: 2.4.5
248
226
  signing_key:
249
227
  specification_version: 4
250
228
  summary: Sensu plugins for working with redis
Binary file
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
@@ -1,4 +0,0 @@
1
- r���ooitA/��k7��"ZiWB��s
2
- ���x�i��\J�=4���4�ACgc>T���[�_ٯj�Z�r�Na��b/]+a�_���dx�+��
3
- �g���nr��*e��G� /�����o�8�%x�C�j�/gp�_ń�r%�-WR���4��H
4
- FL۾�WoCKș�Y����z�n�� �����Q�z/ y���7^���)w)��贏A�Ξ��� �X'�T�m^�n�טf��k���J(�V��