From 32af4692129f95f239c4f94b861ad2dca9d103c2 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Mon, 22 Oct 2018 14:16:40 +0200 Subject: [PATCH 01/11] added ps and ethtool aware check_mk output. Please note that the output of ps is somewhat limited to the capabilities to the ps command of busybox for which conversion routines might be a solution in future. But for the moment this should be enough to actually monitor if a certain process is running or not. --- addon/addon/server.tcl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index cb16023..d330b7c 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -47,6 +47,9 @@ proc handle_connection { channelId clientAddress clientPort } { puts $channelId "<<>>" puts $channelId "[exec sed 1,2d /proc/net/dev]" + if { [file exists /usr/sbin/ethtool] } { + puts $channelId [exec sh -c {sed -e 1,2d /proc/net/dev | cut -d':' -f1 | sort | while read eth; do echo "[$eth]"; ethtool "$eth" | grep -E '(Speed|Duplex|Link detected|Auto-negotiation):'; echo -e "\tAddress: $(cat "/sys/class/net/$eth/address")\n"; done}] + } puts $channelId "<<>>" if { [exec busybox | sed -n 1p | awk { { print $2 } }] == "v1.20.2" } { @@ -62,6 +65,9 @@ proc handle_connection { channelId clientAddress clientPort } { puts $channelId "<<>>" puts $channelId "[exec egrep ^(/dev|ubi) < /proc/mounts]" + puts $channelId "<<>>" + puts $channelId "[exec sh -c {ps ax -o user,vsz,rss,time,etime,pid,args | sed -e 1d -e 's/ *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) */(\1,0,0,00:00:00\/00:00:00,\6) /'}]" + puts $channelId "<<>>" puts $channelId "[clock seconds]" puts $channelId "[exec egrep { (x?[shv]d[a-z]*|cciss/c[0-9]+d[0-9]+|emcpower[a-z]+|dm-[0-9]+|VxVM.*|mmcblk.*|dasd[a-z]*|bcache[0-9]+|nvme[0-9]+n[0-9]+|mtdblock.+) } < /proc/diskstats]" From e79be1cd9ee814ccad191c4b83088fda75e3bcd5 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Mon, 22 Oct 2018 14:37:23 +0200 Subject: [PATCH 02/11] made 'ps' call compatible to old homematic ccu2 busybox ps version. --- addon/addon/server.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index d330b7c..91ddbcd 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -66,7 +66,7 @@ proc handle_connection { channelId clientAddress clientPort } { puts $channelId "[exec egrep ^(/dev|ubi) < /proc/mounts]" puts $channelId "<<>>" - puts $channelId "[exec sh -c {ps ax -o user,vsz,rss,time,etime,pid,args | sed -e 1d -e 's/ *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) */(\1,0,0,00:00:00\/00:00:00,\6) /'}]" + puts $channelId "[exec sh -c {ps ax -o user,vsz,rss,pid,args | sed -e 1d -e 's/ *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) */(\1,0,0,00:00:00\/00:00:00,\4) /'}]" puts $channelId "<<>>" puts $channelId "[clock seconds]" From 92d6385cabf64c3b6b3afadbb872b59f6db3d681 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Mon, 22 Oct 2018 14:41:40 +0200 Subject: [PATCH 03/11] fixed ps call for CCU2 once more. --- addon/addon/server.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index 91ddbcd..3a1d875 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -66,7 +66,7 @@ proc handle_connection { channelId clientAddress clientPort } { puts $channelId "[exec egrep ^(/dev|ubi) < /proc/mounts]" puts $channelId "<<>>" - puts $channelId "[exec sh -c {ps ax -o user,vsz,rss,pid,args | sed -e 1d -e 's/ *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) */(\1,0,0,00:00:00\/00:00:00,\4) /'}]" + puts $channelId "[exec sh -c {ps ax -o user,vsz,rss,pid,args | sed -e 1d -e 's/ *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) */(\1,0,0,00:00:00\/00:00:00,\4) /'}]" puts $channelId "<<>>" puts $channelId "[clock seconds]" From 576243e970563b93bc918d225ae764dc948f1fa6 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Wed, 24 Oct 2018 08:38:37 +0200 Subject: [PATCH 04/11] check for /VERSION first before using /boot/VERSION (improves CCU3/RaspberryMatic compatibility) --- addon/addon/server.tcl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index 3a1d875..1a1a4f8 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -170,7 +170,11 @@ proc read_var { filename varname } { } proc get_version { } { - return [read_var /boot/VERSION VERSION] + if { [file exists /VERSION] == 1 } { + return [read_var /VERSION VERSION] + } else { + return [read_var /boot/VERSION VERSION] + } } proc main { } { From d3b393dece2de3c48cfd800190c23e566421a34b Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Wed, 24 Oct 2018 09:38:53 +0200 Subject: [PATCH 05/11] added more lnx_thermal information so that the thermal zone of a GPU is also added to the check_mk output as well as the trip_point limits defined by the hardware. --- addon/addon/server.tcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index 1a1a4f8..77d3a9d 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -27,9 +27,9 @@ proc handle_connection { channelId clientAddress clientPort } { puts $channelId [string trim [load_from_file /proc/vmstat]] puts $channelId [string trim [load_from_file /proc/stat]] - if { [file exists /sys/class/thermal/thermal_zone0/temp] == 1} { + if { [file exists /sys/class/thermal/thermal_zone0] == 1} { puts $channelId "<<>>" - puts $channelId "thermal_zone0 enabled [string trim [load_from_file /sys/class/thermal/thermal_zone0/type]] [string trim [load_from_file /sys/class/thermal/thermal_zone0/temp]]" + puts $channelId [exec sh -c {for F in /sys/class/thermal/thermal_zone*; do if [ ! -e "$F/mode" ] || [ "$(cat ${F}/mode)" == "disabled" ]; then continue; fi; echo -n "${F##*/} "; for m in mode type temp; do cat "$F"/${m} 2>/dev/null | tr \\n " "; done; for i in $(seq 1 $(ls $F/trip_point_*_type 2>/dev/null| wc -l)); do cat "$F"/trip_point_${i}_temp "$F"/trip_point_${i}_type 2>/dev/null | tr \\n " "; done; echo; done}] } if { [file exists /proc/net/tcp6] == 1 } { From 2ab8da8d1b8914e9a3100555abaaefe370114ddd Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Wed, 24 Oct 2018 10:14:52 +0200 Subject: [PATCH 06/11] added "waitmax" binary for CCU2 and CCU3 platform and propagated its use to the check_mk agent execution. Also implemented nfsmounts and cifsmounts outputs using waitmax. --- addon/addon/server.tcl | 14 +++++++++++--- addon/addon/waitmax-ccu2 | Bin 0 -> 7044 bytes addon/addon/waitmax-ccu3 | Bin 0 -> 6860 bytes addon/rc.d/check_mk_agent | 8 +++++++- 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100755 addon/addon/waitmax-ccu2 create mode 100755 addon/addon/waitmax-ccu3 diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index 77d3a9d..c83aa8b 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -34,10 +34,10 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /proc/net/tcp6] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax -s 1 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } else { puts $channelId "<<>>" - puts $channelId "[exec cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax -s 1 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } puts $channelId "<<>>" @@ -65,6 +65,14 @@ proc handle_connection { channelId clientAddress clientPort } { puts $channelId "<<>>" puts $channelId "[exec egrep ^(/dev|ubi) < /proc/mounts]" + if { [file exists /bin/stat] == 1 } { + puts $channelId "<<>>" + puts $channelId [exec sh -c {sed -n '/ nfs4\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" + puts $channelId [exec sh -c {sed -n '/ cifs\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" puts $channelId "[exec sh -c {ps ax -o user,vsz,rss,pid,args | sed -e 1d -e 's/ *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) *\([^ ]*\) */(\1,0,0,00:00:00\/00:00:00,\4) /'}]" @@ -74,7 +82,7 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /usr/bin/ntpq] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" } puts $channelId "<<>>" diff --git a/addon/addon/waitmax-ccu2 b/addon/addon/waitmax-ccu2 new file mode 100755 index 0000000000000000000000000000000000000000..16616051c9fde66348d99b9b7af2a423955fe910 GIT binary patch literal 7044 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 S4I44XRBbKn{;3#XW%pmHnSfjX literal 0 HcmV?d00001 diff --git a/addon/addon/waitmax-ccu3 b/addon/addon/waitmax-ccu3 new file mode 100755 index 0000000000000000000000000000000000000000..f2aeac01eac00d01257e851b8a6a2830c81b7de8 GIT binary patch literal 6860 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 literal 0 HcmV?d00001 diff --git a/addon/rc.d/check_mk_agent b/addon/rc.d/check_mk_agent index 9b482a4..4ab52eb 100755 --- a/addon/rc.d/check_mk_agent +++ b/addon/rc.d/check_mk_agent @@ -8,6 +8,12 @@ RCDDIR=/usr/local/etc/config/rc.d case "$1" in ""|start) + rm -f /usr/local/addons/${ADDONNAME}/waitmax 2>/dev/null + if [ "$(uname -m)" == "armv5tejl" ]; then + ln -s /usr/local/addons/${ADDONNAME}/waitmax-ccu2 /usr/local/addons/${ADDONNAME}/waitmax + else + ln -s /usr/local/addons/${ADDONNAME}/waitmax-ccu3 /usr/local/addons/${ADDONNAME}/waitmax + fi tclsh $ADDONDIR/server.tcl & ;; @@ -23,7 +29,7 @@ case "$1" in info) echo "Info: (Inoffical) check_mk agent" - echo "Version: 1.3" + echo "Version: 1.4" echo "Name: check_mk_agent" echo "Operations: uninstall restart" ;; From cf326dc2fb2afdf04627e023278428de57177029 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Mon, 21 Jan 2019 17:58:24 +0100 Subject: [PATCH 07/11] implemented additional chrony NTP daemon check because upcoming RaspberryMatic versions will use chrony instead of NTPd. --- addon/addon/server.tcl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index c83aa8b..b260297 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -85,6 +85,11 @@ proc handle_connection { channelId clientAddress clientPort } { puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" } + if { [file exists /usr/bin/chronyc] == 1 } { + puts $channelId "<<>>" + puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax 5 /usr/bin/chronyc -n tracking]" + } + puts $channelId "<<>>" puts $channelId [string trim [get_homematic_check_result]] foreach dev [xmlrpc http://127.0.0.1:2001/ listBidcosInterfaces] { From b68676e1bcd222bdd4d536876fe9447b4e07c10d Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Mon, 21 Jan 2019 22:53:46 +0100 Subject: [PATCH 08/11] changed waitmax to use the coreutils `timeout` command instead which should provide the same functionality but is licensed under GPL3 which is compatible to Apache2. --- addon/addon/server.tcl | 12 ++++++------ addon/addon/timeout-ccu2 | Bin 0 -> 35304 bytes addon/addon/timeout-ccu3 | Bin 0 -> 31168 bytes addon/addon/waitmax-ccu2 | Bin 7044 -> 0 bytes addon/addon/waitmax-ccu3 | Bin 6860 -> 0 bytes addon/rc.d/check_mk_agent | 6 +++--- 6 files changed, 9 insertions(+), 9 deletions(-) create mode 100755 addon/addon/timeout-ccu2 create mode 100755 addon/addon/timeout-ccu3 delete mode 100755 addon/addon/waitmax-ccu2 delete mode 100755 addon/addon/waitmax-ccu3 diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index b260297..682b52f 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -34,10 +34,10 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /proc/net/tcp6] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax -s 1 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } else { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax -s 1 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } puts $channelId "<<>>" @@ -67,10 +67,10 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /bin/stat] == 1 } { puts $channelId "<<>>" - puts $channelId [exec sh -c {sed -n '/ nfs4\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" - puts $channelId [exec sh -c {sed -n '/ cifs\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" @@ -82,12 +82,12 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /usr/bin/ntpq] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" } if { [file exists /usr/bin/chronyc] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/waitmax 5 /usr/bin/chronyc -n tracking]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/chronyc -n tracking]" } puts $channelId "<<>>" diff --git a/addon/addon/timeout-ccu2 b/addon/addon/timeout-ccu2 new file mode 100755 index 0000000000000000000000000000000000000000..2c3afe280fe19d6cb86397823decba31ed4af147 GIT binary patch literal 35304 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 literal 0 HcmV?d00001 diff --git a/addon/addon/waitmax-ccu2 b/addon/addon/waitmax-ccu2 deleted file mode 100755 index 16616051c9fde66348d99b9b7af2a423955fe910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7044 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 S4I44XRBbKn{;3#XW%pmHnSfjX diff --git a/addon/addon/waitmax-ccu3 b/addon/addon/waitmax-ccu3 deleted file mode 100755 index f2aeac01eac00d01257e851b8a6a2830c81b7de8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6860 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 diff --git a/addon/rc.d/check_mk_agent b/addon/rc.d/check_mk_agent index 4ab52eb..3d2ab2d 100755 --- a/addon/rc.d/check_mk_agent +++ b/addon/rc.d/check_mk_agent @@ -8,11 +8,11 @@ RCDDIR=/usr/local/etc/config/rc.d case "$1" in ""|start) - rm -f /usr/local/addons/${ADDONNAME}/waitmax 2>/dev/null + rm -f /usr/local/addons/${ADDONNAME}/timeout 2>/dev/null if [ "$(uname -m)" == "armv5tejl" ]; then - ln -s /usr/local/addons/${ADDONNAME}/waitmax-ccu2 /usr/local/addons/${ADDONNAME}/waitmax + ln -s /usr/local/addons/${ADDONNAME}/timeout-ccu2 /usr/local/addons/${ADDONNAME}/timeout else - ln -s /usr/local/addons/${ADDONNAME}/waitmax-ccu3 /usr/local/addons/${ADDONNAME}/waitmax + ln -s /usr/local/addons/${ADDONNAME}/timeout-ccu3 /usr/local/addons/${ADDONNAME}/timeout fi tclsh $ADDONDIR/server.tcl & ;; From fcc773bd0dbd32cbea24b9956c1f65661ecfd397 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Tue, 22 Jan 2019 10:15:15 +0100 Subject: [PATCH 09/11] introduced a wrapper script to either directly call an existing 'timeout' command (e.g. on RaspberryMatic) or to use shell syntax to replicate the same functionality just using shell functionality. This should hopefully solve any licensing issues between GPL and Apache2 license under which this check_mk_agent is licensed. --- addon/addon/server.tcl | 12 ++++----- addon/addon/timeout | 53 ++++++++++++++++++++++++++++++++++++++ addon/addon/timeout-ccu2 | Bin 35304 -> 0 bytes addon/addon/timeout-ccu3 | Bin 31168 -> 0 bytes addon/rc.d/check_mk_agent | 6 ----- 5 files changed, 59 insertions(+), 12 deletions(-) create mode 100755 addon/addon/timeout delete mode 100755 addon/addon/timeout-ccu2 delete mode 100755 addon/addon/timeout-ccu3 diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index 682b52f..c1fa117 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -34,10 +34,10 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /proc/net/tcp6] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 -t 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } else { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 -t 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } puts $channelId "<<>>" @@ -67,10 +67,10 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /bin/stat] == 1 } { puts $channelId "<<>>" - puts $channelId [exec sh -c {sed -n '/ nfs4\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" - puts $channelId [exec sh -c {sed -n '/ cifs\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" @@ -82,12 +82,12 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /usr/bin/ntpq] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -t 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" } if { [file exists /usr/bin/chronyc] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/chronyc -n tracking]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -t 5 /usr/bin/chronyc -n tracking]" } puts $channelId "<<>>" diff --git a/addon/addon/timeout b/addon/addon/timeout new file mode 100755 index 0000000..67a8869 --- /dev/null +++ b/addon/addon/timeout @@ -0,0 +1,53 @@ +#!/bin/sh +# +# wrapper script to either directly call /usr/bin/timeout or to simply +# call an own shell-based implementation. This script is CCU2, CCU3 and +# RaspberryMatic compatible. +# +# Copyright (c) 2019 Jens Maus +# Apache 2.0 License applies. +# + +# if a BusyBox timeout command is already present we use that +# one. Instead we use shell functionality to replicate the same +# functionality in terminating commands after a certain amount +# of time. +if [[ -n "$(type -p timeout 2>&1)" ]]; then + timeout "$@" + exit $? +else + # default values + maxtime=10 + signal=SIGTERM + + # Options + O=$(getopt -- :t:s: "$@") || exit 1 + eval set -- "${O}" + while true; do + case "${1}" in + -t) maxtime=${2}; shift 2;; + -s) signal=${2}; shift 2;; + --) shift; break;; + *) exit 1;; + esac + done + + # lets sleep first + sleep "${maxtime}" & + SPID=${!} + + # execute the actual command + ("$@"; RETVAL=$?; kill ${SPID}; exit ${RETVAL}) & + CPID=${!} + wait %1 + SLEEPRETVAL=$? + if [[ ${SLEEPRETVAL} -eq 0 ]] && kill -${signal} ${CPID} >/dev/null 2>&1 ; then + RETVAL=143 + #(sleep 1; kill -9 ${CPID} >/dev/null 2>&1)& + wait %2 + else + wait %2 + RETVAL=$? + fi + exit $RETVAL +fi diff --git a/addon/addon/timeout-ccu2 b/addon/addon/timeout-ccu2 deleted file mode 100755 index 2c3afe280fe19d6cb86397823decba31ed4af147..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35304 zcmeIbeVklHmH%J2A0|UHgr3X<$Jr=15KM$TbV7g_qjVmCL<2O*1R_S#lbKF3GMQ;+ zCWN>uJ;{Vb%)kHvA`;UG?(%h6cieTAWl@{QbzO9$qRZE1-P_&VO-xY3uCA!){NA5? zZ%=Lj{jJ~c>-GEV*HEdaQ>RXybL!Nox^?H?e96j7Ez2^sU&PEX%DuMVnEAweb{P{f zCO+TTrk=Vf=1)|gfAnT!9v$<;0^k&4L8v2E+xZ1QcnE0}59*_;BR_x84^8A1)ShB5 z5E)bO!_VnULG4v07_TmXUPMEOO7*L9=rs+*4b&?HU|v0-MqxR{%Ln~nlUJzKUF8mR zl6}KZ_ysekyKBRo?#@}=T|HZGn%&U!M-OQTb9rhM?bNeq<&Q zrw9v!ykM3Q<_7u8iB}R<5Ec`J>q^3fgbN7M2xk#4BItLfADQ(t*Z(Ak+E4PX{Svjr>*CYNpBj|C^>uZ%Y)dT>#L~C75Sm|CUdv7)@wQrq z_#FgP!JI*uPS9@x!6wWj=r@&cwwLn%`4ggaD6ixULMuV@w&_`5ROeDgH)A2^rVy2RB2-UmbYYFAwNq$-=zlVG( zlwU>rMWOs(P`^BsUxnb>Liw+g&xZ27>iu}w_{(0~%2<1OO{jyO0PswLOdCkRjq5K`R-yF(k z$q$6`^T-!M`5EwMZz#W?`u(B2Y(ed3llUV2kA~`Z0{?g@{|NQp2<88a{PUswHgGth z{J+!wL-PLs`OZ-N3iA0-ej)UJG?c%R{`Z9P3E=mI@?WODrvFo!zn^DJ z#ZY}0^^b(|+i3r2D8H2a)1myYfj<<=%U0EXHi=EZzZj}7Qg$Si{}1YG_C)kdVmv<& z)&CRl<}Ur?%cq_G8bbNck#7m*N5MBOlsBxyeFIv6=bH8FH*M+dS>Hd<-Z!v*y;=Xh z8`rPOZR+YD$n`DlZtw5U^_zjNExEq+9eug>fn1R3%ys9+GyS;%fe34UU^8HyLY*@G zU7OlF2D*BCOkaCfe~zwz=vd#ewXZMNGq9fOzJV?6H&LGJ>+9)V-`(5M?tyP4b^XS! z?wr}!+jqU$*4{Oc@9H$&{kh!r7tS{uxAu$!yeZDE9?`O?qho!4ZIJD`_6=R@xAtu7 z>ginHkm1=KH#O1~#tm z*nGWV{30E4x4_okZ5?XR)3GJ5xUXY#pXuz_1dnnz4H!n++b2vt?cIvvK1C4Vde@y1NaaoBGGuG05FZ?}OiVI$X_>oGmKZ2_tIzK#Kpg4~w;z;=dUw&b=1kw{;^eq(ru zh_bU&)%^pVy;}#&#{AZS4zp1b=|v>86^Ax0aO6 z-m|HzXJhX;(HkUn1L?V*8`Y<@r>kd^x`9=uy}P|{3+4SiA!2ejoNUJ_|?A|p4Pb5A40hSwUB%|d$+WsJ#fqCfv2$k+^AIy^meZA_Qv0j zK0*EUxlRM!B0*gSGN~okZ`_LPkkL);>zO~2=4C5aELpmK-t772vZYJcpFdkJsfpmV zMDZZ>?;rXv9zewd*w{&JR9pK`evtp4u=<$&UTWnh$0zz$OFvgDlYg%NeE-uXZtm*B zeT|!&u}%7^_8Q_O!6x|iv6Jf01i{Jm(Ua<{L3<*z<{jH{J0s>30sd6PGLvz)1P7nlTkbge@t-`>y~01-*t*{;IoQxY&#X>6mM3H!`!VH zhdQqqr*%Lvj`2;3agIN#7$>%%m<`I1Vw-hL@l^Z=#b@ECDL$L^Ofegq{fgO?+^-nN zx~LeZ`XR+Q$PX*VDSkvT{2Wz$9{!tRHXV;DW&`rLVm2@(#W;9RD^B5OD4vTyr+6Og zoZ|EGHx#4EFDPcC^`hd7@H-T3Vm4JjSB#_ns$w=ouPIKW z2*~}6CHNzXm*VFsUdDQ-_!9INK>yF)UYYRCy_FfSJnq)gb|~EvN+(0< z`cT@0(ytyrf#-NAeI%52Lg^Pm=|iFPH$v%BDE(+CJsL_s97-2M>HVSfNGQE0lrDtQ zH-*yqP7y(g3|gwi*K()mz&b10n+ zrPqeinNWIpD4h#5ot`DUR>EoBp`tjPW2i;Tt?edDr7R$!m z;aZtu`QDg0wrui2x6Tx+|1>ssY!T^2@q=!a^nBtr;?xBP-H+MD>P+&+-swJnhB-EE z7wL4dO1pAASuD4lbI@%8&ZLLka-%tBnS2%Vljt{@DrPLfQt{0QWth&y^^{?96H)S* z?$(zE4!SRO6542Q?sZM-9{0uOgYJvd$Y+M#7&wnMm}4>e>VqDuAyWlkq6Ca(GG&&T z#Esx&IY@kraa@Kyd6>4AQ>?z#dD4A;Z0xA;{+jZUWe43?&C}(7rcC(Q+Z_Ao)4&#s z)t2IO?mtrAy-#?H;QL4SnV{{hXAV~uME!BG3b+ZuQx!e6W@K2#nlfT!UF!%1m6YkjMG^d83;alYv^E~6tRNJ8Y`JD&d zW;0wd#r0<RLP z=Xv1#bL4cKx`!wExIdQm@v}NtM<^FQ_`{qiRv#z-6X3<~`xujD7ppHIs~3zp_Tkf! zMP|Pn1Ls8erM%!HLHh4VM}zd2NsFg~`5V%w2kBAL>QCi=NxCs8|2%2+|6%m(eRGB@ ztGs-sdi(m}2<}g!ME>PQpMJ`i!z1WUv6`h^{H)Qxm%L@n(f5J>>!f4wP5o&cH3LY>gw|x2YZRJmjPJH@_V__Cw&G zPX@X}n^v_6WGX$ll>E1W`BDg`kuvch47Z3f$!*c3VfP<^-#~t-)+X=kWR$WA0nep( zbI3mi?2B>B6vps*Ud6BdCB7;?&YlPHVTqShmj0RVCodzvfc(tk1mJMB%v${Cy_9D@ zjgR;#{8Z{Qgl1rdh>L`m2~QKuDEjLZtFh#Pmri4hF&n?h%yN^ZgKn%e%WW_R-G&tQ z7`i?}IP_EK;ryYVxS8^1>Z7UK9b?~h*qBw-w~x)SntnHS^yy9V)A8wmF}CEms*2u3 zjr~*{m~sXhZQ9Cb}-N~2TA(1K^;@n0Y} z$u9;k7o@*>&Nz?%PY+pbi4puiuDDUNV-_Ax5D`8m{Dbe)Wjp1YZ(N8az$-wKnZj#qvnd z4t+-4Lz9l9FH_6`Z*In*Jr2wcaMiJ%9c6yjnYJ=Sw+iOI5FN{)V;OYZ5~AbZSd0E0 zd|v@>W-uO&QG8oVS#3durHvCjA3kS>}QKhq$gq*HqSj6KYrz`A9pU+x(of8 zyW;R4`#KblrS`cqk&9%$to@*iE1!6w@NC%>(M9yJ#-{}1J(aOs8PIngaLJ_BxvN-T zOl!>^ZO4YTq*dNlMN<+p;o}vLb8@)yv7|2_wsNh-8ZWR1XE1K9OIk<%`V@1l&L)lS7=sO?UN+)A!2AGQ zIpTHj_>>amcCjkCn$k|zaAGsU{6fFzZ#8{4*azHKi}1nT?LJN0RQ90T1YKIonLAbK zuR#}M_%V{>{|2UDc2%6$#*WD@Xx{%E{vRhKnI{GDI9)8C2L2BNFWD)57HJDQPZKTR z{U+^Y%h@_7-bLNC+E|gh#`8n!YjRh<4wwQwPBJ%TQ#3EM-&#a}T3@<19CW*b_0i); z`X2Wm!Le>0ehA~ifOvLNe7^u(;`iyq>7dQmfL*ZUpt}G(;^nl6Y{-Z!nj`SwOtpdT zDT1f%UyJ_aKKB#EDz6X99|_8L2IW83ngRTu1?3+L%AKIR7?f`d%AX6$?+eOr2+AJ~ z%J&83*9YYf1?9H|<+-4IBq-k#l&>c~-F*4TX%6EyUpQh)iobkBYn}35UD~gUntP6% zmMu0$&22~6lDD45_+#n2+%)q>`o2iG8M7ysbkXVs_sppW-I;TJ-ic@56CK3xvg(Qk zWUV!}fwocFTJTe4*tXW!YO)7@9k4H;yAF0jauBW(WiN(cR+B$eVy!S&mu1spcCp-$ zDmK>OzeN2l=xKfSmP%cz)2YWkMUs1+`ck7?$5=GxZ!#zIhINKM-VVH9o~gcqEqaQ! zH--AUh?wizik?HCxz6pMl(yQ1Lnbyseag3yW z&#kKGXe!Yez>WJ8$maNO=s)eRH+$>ZQXcD$&3+*R@r=J)fwKa|G zWD9C^KE%E&$sEr!$5lR!dTi%WrKgbod61S5fSiuL_F2w#)?Lbz39$3+`p;j!Qaf_EbdshXR^drCYUM zeH^`hfgrtZOCx*HV(;_z@zT3fMI(8o(QSMPe{6YttMB{E|Zq;nz9y{5gHa&=q5Ly7J>bO1bhe^VE3$Y4W0n2V$PSycEzZ-|CT! zV82iMOckCcZdV`45!c2S&>R^l3HSZ(zXWaIvB!5$f1z<8>GO5E$J4ukh5j_Q3S1ta zv%ZgW-2~Qi__f>yUz+tiC4DJYSI};O_{5qYBi&1gsZKIU-s#5S&lK8ROu6QU?2pDM zyY#BY{%hZduP4@=h-8c9Xr8vBLADzG7mu|Um_7*`fz9x21U}PPs;MIVuhk3oMR+w) zaHRk)uqD%h6Ar<)QZIe~i2NAa_kU|RN~e2e)&1c4U({QoC5xV`O{Q4hLRlScCZvkx zpJNL|OT2`?S=u#eGqQN@;$r#!bDnW7ncd;6BVS+G;oKRIJ8`ql`DwhcvZ%bEu%`ix9syN-nDgi|^UeF- zJ@$|Hz1!1|w6}jt%)xFfgx~T%IQvOh*e8%T>B0DX^l84Q1AEbf9j^3f26W4Rxrlc1VWyaa?iYT| z*%mmKA=i}zJ=4${q-PqEeFJ44&B!x_4NRb~7JT-6V$NVpc4VG6+} zOe4%7%p_<|o|cwh@TDWjg7^`9g)gyp+2#7_edPBZkuIhJ+kG0ed3z?>$>v_7`H?yV z?x(72uopa*NL)sY-n3dOcb=*)!LFW7K9W4-&V^o^bhLEHUBFt+I@B7&o~N)2t)%15 zA@_XX-$J^M_9<{Rlb&F(weXuY3$W*1ty4qrG)q~7DK=W{T^7Jo3tV>cNzSeOc^mO}HVV#J;FQ0jIf)NnT?XGHLHigqE}$)IQ)@ivllkZMY15xg8}$i%BmH`P zehHa8Oc*6RLU@$$5JCHuZe%o4Vl6HdtLXx=C=G*u*tH79@=SZ!jgA(}3z7Lg?0-6Q zfcgW_az-^i0)Ml`s+}EnQyFANSWajotfW0QB+8hZrjbrCwuV;@-g`7^j%FT(hKKP# zh#w|?oH$F^PgwpHe2-ADM)1{2ti`2a_n{vDT+yWQi7A@_-sM^P$pB;iwEA86b!uvj zgB`&XuC6{$-k1+me`uN3nb1CeWY~=tZ*is+(KYg>_yhOj=Gtlkx`r%sbmR*>U-_#y z4|}L95N;x@BeW4#5?TnqugxD@p85-9@`xX11nDIBRkr6ZPt+-|^8cGq>!%iXf?xFh z-{AaX+InN4PqnFyrxyP)c>a%JYy2e^ucbeaMX;x-4_0dWbEh|t*HlM{Bj~SXvp)!Q z>NdsLH&t@8soE3+$dDzMXn zd_L&oI?E(tW^H*v_Q0-nsp8I9>e=1ER;=`p=&Ggyc=^xLad2=Z;KN(aP-S}1W@1n_ zJz3m2G5PH72<=(xXpj93>SD!bciSGmRrocUtAAQmKbp@ou_u}{ar1-2`1j*HIhXQ? zy^?d>zDgwZIY;|3co6+e#I#PsZxu~EE^bXbN?%ufFlrKhA6F~g+J^lw=I)B@0;hJY z_lh&s&H%2haKN2L|NqH(nt00^Ui~b6PBUtksUBqCq&Xcc6`QaD(S6`sK;29mo8&wr zfAUCulC{PuR&|b2?+m-e^a1z&>;X5KX3YWj6P)Q`Lp&d|TYf6%ChF^a1THC;FrEaXCXXkso(peJxy$)X2WGHz{?$VQ*%-7k) zosrZ~WupD;?xINv6@4g|3+lgNy zFTQgRaC|;ILR;ba3jC{$wKg9-o+XDW>!Hy~?W#o02g}UM`=qbY)DI5Nfk$h}zl->4 z_FJ41dGjd+uOjfu3h^o>zJN=-()^OXrHZU4=m*bJj;>511J>GMbXx1;!B@wQ-HPl~ zuJf6{$=+GEPC27$&_&j%rbWPLebjgsp*w%gxQWTHs$%LAI#crU^rb$2ik|PIK4wp< z9Qhsk6O5;SZ0tUrU0ST~7o+#R@WUHl_6LWj+LuwV*;&{JlYC}(B$SU9hd8fz zW_KbeyBL@R`B-|WQdh)>%%BJGiDx(7-q^EC0nZ+zY(`4sT`jxNguXMA}=w>$1BX`9NwX-d_suJ>HHocbo(GvmY$S zv$r`@vcoR+aH0I$<;X?zQSkrq%K#q!#p%ChpC-c-3wq}lhuzmWGsgy1=bK^oSEOt9 z^}z1}zF~)JHq~NIdGm>~Y49W}yBaE!tyP(PBF!(^+E0o{dEY--mmhYsgxAn>*(c4p zW$9rz10565g$8)L$j0_E-gtJ%smm9fb*bS>CugA((3?~3jSfP=m(5hzgeEN0@7b3K z@!Odv)1;H=ghgEhzvfi>=@jqa`J?b+QAug$NO}mn?VrW01GjYcZt7LWIk=~ziBhq= zEPVjleEr8p+!xO}?DYp7D}Re)nYVa$WF2Fj&iFn8f2SlF%jmGX416j2T>w2ZN0B-G zegIpy$PsN|o;(2_tWw!juRn@=N{6Oa{8$HcF;pybL=NAW4shvACZzHKEJRA4< zxy8W=spt-sPbelT6DjxjUA)y>Bd5@h*37uMt{k_E<;$=I8XNl{Y}#tA(cYY}GW3&w zVz=ZUr(dm+aq^-eR#f>1n4|Pt{MW-=%}OlFi2gOz1)@JlKP387qJOpg1fPCr75%cu zZ#i`XGML4jbq3LudTzL;LfZ zZDWBNm+5<$JF?MpYQBtpU{@^rBx?`!f=lbsxmC&awjGgFX}9c>$~n}!_4T~)<#<(@ zHT6E}lz4*>JvqW3-?j;V{sjJs;L-dNe^O51@6e}gMyy!c9oAFvAzu8^;hMfq#I{IZ z|B^AzhYzybJRkDcAaKO8rQP1#rQLjRix=7#aT^Pn?V9xBYyLVpU-KSXnK$e)k(+pk ztYkl?8SI2XzXRJ5RXO-9Q>?z%<87wO9R}EOqMhuu;HPD<*BKvAxLuZZHDB_}za49> zL#}PeuvYd(%EU{R*QJW(ZtCPSSvr4B-R1driz&0v<5zw+cAu3**4baWA7rhW3J)Ue zk)|?-A7}5OQ2O#4W0n1X5!Anx9K;r1RmRV1ea7SUYSx<*{=;>@9ZM_^=BRw-8Xr)c zR+G}1+G_9lrEHYuKt1QJvD6b6S*ibY{W-L{`YUj&d_n5K1twWMKbCyzq8s2*TY)o* z!U31(uSfACtJBi#l}Eg12RxI!b?4*1_V?J@Yir-jVwRYaK9fEEElPXrFkvgDbf$%9z{Ok4I$&!^C{P41JpKhk)DvC)5117nhZYf?Y(#-)9) z#wA(D)ADoCz0?!l7; z{VaR$bg|0wi=!qBAIR6yUn_a7wZbPpKQ5l*>u;p}l*MPd>}}k$9QsPr-g(xYF*59) zLc0dqSv5Q(#qtdBt!#&H^r3xzyu`XH+!`xB1NfuA`i<<|+A20au>iWK)81sCbNA3r zeu?<0vm~8C2!{o(2zXxMJoocuo%KzuEO2D^c4C9RefUS{lJ*mkeChB{NY`x6b2Wb; zC0p|pybOE+Y|k`rK0i4=pTV~)n*X-vPkMHp{^cvx{FvrI?gm>U|D)z}EMtyJR`AF3 zIjkh}A78cRzfQwfl?||Je!bx2zsh%I++JUdaUM8j%VpDLhyNCv^hNk~|C8_pek?B` zTlg`p;K{Ene*7i;cyz;=o-D*C$>U+lw0DzSxd(LAIKKXdeS<~Lu>0TiCtpmu9j@b? z?LL$G7f&ZS4o}1#r#vy$?wp$4iT`khH~%z`I$n8!UklhOEhv+jc{ z$@5`5>+G0XEElX@&Mov4E9_?O?Q`qVv6lNptx9;aG(kc{~Ti29t8QgW) zf=;#l$Pdj66vmM;qUpMqcB9jmmSm3Zgo zjhA^m9rDh^_ry8l=3HFsdzAB4-D%MCoi~*8Y_C?n0QgvXme=NiCD6zDL8LTPX;^$0 zXGB(IzQq}l9l-}Mm56OSlNzTv4UIbw$I=I0s^ReO3E{WXHpcU!Skiy4q<&|Ve0p@Z zr~#T1p6$B|`?rccSONJKCeO4Blet^eatY&98{KJbK@S(C;UVMCGFF}EU~es}$ep2r z|GefEWTm?X_1GR>tVExf7dE;9Z@J6y;~D6W_Fg*Amkbl=h3@T4NEOSHQ%?FYvde9e ze7INW_02perFmwrdB9vp{~IIVQ@@6OpQq0~X5W$eEPdj0Tlw8lGdkk#F`VyY(Mk0` zLZ7zZr{t|Z88^?S{C=mPFPGA{l`K?bYq5Rad~1_lK(p`&pXj%l_a6NY&UV=@XQZ9^Ey0W=-GVWkmhj#p*ZEFForTEgNceTGggJ&}h%*8p3 zE0Wf8ueP$4s;kszc5|oH_h;k84d!n59l*d352hZUP4-RYw%2y3(oFhoq=h3%y`BST zo~Plbe2FOVlc~2B!IRV;w;{d9wW+Jm;OjCEBh+iYGyr2VL(r#Z;Coy>ld8=L@42Pz zRKJUjl)Mc3`_HvB{1v}{!C28n^w!TuDc5tr6gnvTCV8Su-u;`8{0f^xpK-MXukLjG zJ?C(mvnig5Xb$RGk=jJFC)#y~+SSpI+UeeB?OD(3``0}#tAwr4TuY8L`O%1fy zeA2z+Q{X%w-2}) z_p;ZGS9hgMiRYghS83Sgnf$Q^Xowv@@Y4UAymUV;37wIWuNRhseGwk)jryDj4cx!+ zh3`jK1*lMLTA@u=U=ZU{=E*z*I{r-Mv{SSqRC%XiO`4cQAX)AcJ{%^*s?}* z_QCkX6t)q0#Y)4I8AqJ;ak6-~EX%X8^a1y4|HWOQ;7*rtE+>EJN!CExJa-m+X6&Lx z{Q4W}9tT!%=u7oI|L6B571=t!_YnaV{h#)@GQ27|3AVypN3BO zDmp&_F5S_T?QW(I?pPfC5@ijc{w9)_P4#dF?YuUZef7xp{~9~`68Ek&MvXNJY<+Uy z5y7U#kJrI(0p7cB7Qp}VKgW(Oufb>i^QG6f$ zHB%O)On1$aL0JoBG0IvfYYxhEULB`Qd-;~2%%-f4vWb*U3CgBXHi0tTE472N8I;vi z7NcxhP&SjYgi~xfg>v)~TR(h6c2w)3Y+@`m3mRs5ckehWs5E2SHAiJXz6LLJPc7yE zM=bwPe&4!~%+E#U85`SzJ+YW`x07EMsy~aoe9{FWm|G|tzyC~|x01JkF-h(wrN4UQ zr>`)_ka3alC_#4zb%*dd(z^R28?7~W8SSi8K6q}0KN&o?!Y0@6;yn=g2(|ke5zFD+ zjI*jby`PkkZ?bS7R#o@ej{>(Hcq?^7fXnlJac@>v)t5zIs9@_aUXhPSf1J^H{%cat z$*!uZzb@K;mwMS9tqHG+#_S!ecfo!7Jm>1jMZRwYUd@9J_F(vCx6J#q?9LSXt#j|K zvmDt$ljXf5==vdaX`hDPwx+?WcGJ9e(3j<&N45~rxU@dLJ;29(!}~6UmbNu(*5pNd zM)+87fe~zku`~f2_x-npcgHO5^c2gwdxpG^UPN2%H~e=8?%*CC?~5Qi&YfB7ci#D6 zYR3p=x0=+T8wIE2HR{p1x|)XnuX2W2XZ7oD-+j}-wHi8V^5VH1{ylTg#&4$G?~wEB z<@0jfmk&C;Fa}*(r#5+f%~ZM5(t;1`-??F2=v&!Ja|a8&f)ifJ^G5L2`uv_JvjXR$ zexF+7H8$Nhni0}d!@b{a>IeForK>6M(dM(1HKAvEMj!hKcw1zCI;(UFF? zg<|;$wJ&nlD#<)67VydayJ8nGZyGW>TUb**&O1svZ%E)%D?UWt*sNEnVzrxlh~hot zYC`6m(V^3sp~;8rZ$oq8^+^Tq^ng6>A1kG3AB z?D*-kemuoS4@d6cUeX=jJU<1xBhVfFV!`1)sH?qAJ!^5Cw(R|%n4|k$g$^fL%sF~C z$NBp=b@p`*f^?r>w2NAkNX zHQ(B6U!;9z$4kc<=P8VZ{R?x)r=L5RoLT5u!~yq|WQWs0x*oe`*`IKx*ai4dfDiEU z^sgR~O*1^hI#**$cR2CJk;AdlEl$H7BZuRQ3y!x3WqcZ!0guMrpm7)8S7~6(3C293 zQ156g{&?5=<7K^zmG1Y(E0|abdf~}Q<1K{7TL_Jp^6+@Q_JxzjTbKQ?bEo9X{#I*L zmNlxyutvjY-mh>?;eWflYvaDhyZf-V$rN}#S|~O}M|sbsShTQb2|Z^gjSb?wmSn($9s6NN6vq(1G+25P_hpTH;0Co73Ovd;Q?j}5M(@8!4w4?NO-_7diRw>L(Q zRn9zatuGF{uN=o0Lk9KOoy&wvch-~FJJ=K_nVE##{rxx3?^_#^2iytZm2HjE-}iu@ z0geXbnJsE9rr)enotEYNkbY0iNIv-ISwfn5?yyD^v~G$fTk{fnSSvZhy}CLrJsgi` zi|>27GguB>~*T4OpHzwPz6TJPLK3wJU~#VBVN@d|d+VqBtq z9=^Ef6c6|tObN+WcFEY1?OxYP?O>hS3#~t-zf4(vf#^{hIZkRQ?w!nY+tyA;0H529NS1@EIu=S=oqH%6Jp zyO}XGmw1QTRCbjRN7>EC*2NeFlHUU$03`+MC#r;nM?rZvwJ|I7jRB~rbU9Cd(a)I?XU0ywg%&UGriGRH>X)!;HyawyDtKJ2pl%=;>{n&vCr+Kd~*^S z>=QbtwWKB&&tCz@bHM4@uITf0ll$)06C;PM)QjHT+cw~OnOcdzBS8CTsdRWE?cW6aPOzhMbsx9trhpW8kg?sd-V?Q!Bf9L z_4!X$hB+hAz3l<~sD}v85gsA55ndx`Et|qxwjBPNEOZtEKLy*qY!sg7_qn?o;uhd|MjcU`IAtp}7Rt#t zYOOJhy`|*gttQpJ_=JwTa{A()Aqes_KVHPXVV5K4{0+T*b45AvbClEpWyeNP=hh_>1g& zp-aA52k*LhZL;u;z}!2Uq`mNc3OyAco1t|U<37(^+hi5L@5w>u5-mn>8Q#$YFa0$z zKJ{lYR=ux@Y^p8FvksFkGcR~%$e5uq!nlzAWKO7>I4gm#PW3C)PoZz|CBpOje(-7! z6Q=hfy_*L;;>#-ZDmrx!{_veIMUBH5!FO0A3Xb@KJ*sRB=&A#U=wgq>I^e%=q&CKU zhjC?OPd)l;aLBh6-X9f=#-+A`jh2dK!N0?U-&?7{r^tu#$+xhQ-|=|J8jyhh^sjLt z3+VnN^^Y@FE07!a8KLU~o3>wymhUD%_WOO(F z4Lr{Oi;F(H@AvTfeRKaIp)>Dyqwg8@!Mg=|r{Nm#O{cx=Dfa`s^ZvEKiB8c-yQAHa zgYMPzCE2S#i#gO%9Ewka_H(F@fJf~$U#{@zU0q%3#hfWZhn}lUfL`o7I>G)dHRN7Q zJLw;~IGOvfjNhm8ZfN^k<&mG()lZZEBKdbGm$FXWP_djx9PtMq5>>daitSF+<|zf} zj-D}P%I1sv-|~KFNITdD?1A{vP@;cqTCwcE2iLbJAwIn54iNsSRM25?a&n| z?>}snc6fYgaG(p?r1PFnmfANNdr?K-Cc!`avLSr3p}1_J_{iVb@aS?J_Vs@RT~*#E zEYntY>n-p~HpuYa*g|BAO={Adtl6}DmUmKu{dH8b%iiN2{K*?_n)q=ly778k|3E)8 z!NI#jo?Wcrxb64g_%-D^FVXt4XpFy)Ko}w{Aj~JMC8XH*ugx5E*QW6sox5G_;bZvd z2L9Q|IR+0U-)YE9&!Wd=O4&7>nVAy$nAG!0?5qur(k|BH9pra`%YVM4zYXzd+%ozb z6W+532i>6`{QN3s`o5n8KAjOm?=iLW&fz$N6P$luiOmPb>mN9D^bf-6S-A&G8=c+F zgw{9UWlZRNRr)4cSi67x*zdvX)q|^sSNiWg52x+q5N@3>naouc?-@y2evWJ+e~TjP zL?h^jr|XO_U(lI_|95|4$Xh=EmA+{!XP(OLPutnbwZ z~S%dyY?~du&lg@1P-fe<$lxQ21ERrv}Y5HPq{GQ1&CuN6Nw~X24z4M!w zovMh&Fie5Aa-L5FX(h79Lx8^ggx5viiYq zfvYaNi8DpoXLlb$$9|}1)%%$jdyv-%A%?$wT)Jc9&!)w{Rb}sa9k{IwXA6uKnRDN) z*u+_5EAlux(Yfoe?&8GQPg9mq`fPNq#S|)%mnq$KxWUmm-@5Wc*p2^$jvZ!)V;XNk zM%?{@Z+`~8$cATw$ON5yi}*ud-_khbLzuSji08=Rsb6r0WJ(*IN9OExo=n~1=sjuS zV6XkdzEj4&gglkkss~dacPXeN43%1 zekkBa&Axa%0ZzPNZayX+svY+(TUGWaf&IV{OkAhBEO$uIC)I8BU^O=xC+}A4*{%4a zy3MLXp7Jd`*|9g8$&YbaVV4Qwuc>U;|NaVpf zVKp=%3!gskc`@ytJSKld=LzUq(66^Qgnm7yss^I&fR%eh;gF}oC$O8!&;N#{e9?aV6N&6PW!eW9@Cgl9v{4k zst@@Y$Ky|zlc^{18=(<@%j*w*9ei85(vn(SITg9zcxvI!C8lua`Osk5SLykXHNd&O z&Y`Zy_C`!&xf^`Ri+jtBb9&3s)Dq{+RDWe>YG+d8j=pj`M-IjE;ORV%u|Mk!o}RX? zAZ?KzoEVf(q&!Glqz6w6%1@&_NL!=_8-nr%%7e5;dhpbs{8Y+=v_*O_5tJt=57HLt z!Bc|rQz#G87U{wIpuC>)AZ?KzoDh^xpgc%hqzCJQ@;b_cv_*O_9+bx^57HLt!B|ip zqdZ7kqz9uxd6e=XZIK>~1mzLRgS16@&x#i#d)w znv|Bj&a^jFQW3vS^GtJRPef;vSIMR%qUdM=AEFLDywgOTXmYWmwvooE6@$%=%sso3 z0%kB>Ebn9<#?5@@5ht3ZecVaAyYcC79&dbxupJ$F=zYcV=dK-aOeXi&oUL&dKjcJg z+li*8;;*0OSjn@;^A}?KQiZSXiCB$Q>kQV4XN%RTXY7T3*+4y?D_0^G^X@|Ks9YG7 z+kNc4s;mR^%hv#BrI%G~XDfO0*radsJT5-MS^oo-rimlY>d9YZ{W3@G%q76wh8#D`lC?ttK<7AE4idV`-;+X1Yy(W9ah@>3!nMH=Ci^wmU1SSh3s~DU|0n z@A7DDNO$_>=tg6#;Q4c+eJ*hF?Ucsru38tKU9rxX8e!}aD|5-D2e56(yeygPnRiVe zP&(G{edQ?QLl-TzkD9sc_q5Ixo5;63^v%(->}UagT1oidIC!?;tV{OM$KX8D3nY`9 zn|D=DKVuMGElNj@s6X&(U6HO?_%@Bk=Gp0`BjxDTcUtsgMcy)~KA<@z9!F)zq_@`l zi`9AXfHg$r)dSG~`(PqhCDDWI62a+SM8O^{Kgs>jcK8vQ$a}i;CruiQo!>OEY3d~K zv*yjKDqrhs;^jQwl}GxZ&Xx43HD|0;tWJ1tZ*}VXrZ{I`J0;m* z=JRg<1&zIY-b8aUnw{$GZGED=ci~fI>uQgOjqo2?@2u+lYvjq>n8U^D9hJ{Hk*Rf+ zk?Q9hlO@0U&zQ%Hs+MzG(-=A(X}G!?UHP=;(7Crcqvd$!Z=JgApEtK0T zyjcE1qENn#-S%%wZIuZP>vnQBbZf-Au3B_X%$q!Ni?r9_bKQb%DIn{q&Lik{LuR0a zem_C|H$wdnPQWNl*7rt?7QIvy!|3UP=Gsg>q!7 zFP{fbA93b3f7aRQe5U;1=_N}vcymJV^MQwU%?t2X1S`7|hP4If-d0Wl+jzmwvgVCo z=f+ClE1ZN^^9X;pHPUWXeBB?n3lZ7iI_w5t>(So^Y>c!=D?8A;XzD?1M-#sEB|c1Q zr)S@hW%=xD8}L;xXhfe9gV~Yt&g`9y@@vF5(V%&w@u*I7QFBr-I+s&>bgtFfIHJ1@ z_~jRPb27T|PQf;6o?$n}aoyZJI6fDJQ~CG4WzfU_hjeY7r)$fcs58}Jj+SNP-%tOt z=hmuX_3U}O%4aRwS&mFAmZz@TRkqjdDw|I6aAGCO^B2wot>2~}szg`nT_ao?js-m7OP|neNPmtI!9AEWelkp zt<8z|@lIW|w8n{)t~TNIMEs7FCswAOaa;M3^uFIa9~OeQ&e>Jg8NII?^UKK9!iIVB z79FycJZJFay_*cEV0xr{6Yo#hVVKc!yx zG@1XpN6UQlWBpysLDtLXu-iNRxREtA5yRgdETOL@&t_xKQyw2=Be8*1trxtfb(Q?| zr%o?Ued=^)u4M|E7v&m009&nRM?881+}^X<=(Bg0d0vTc?cagtyhHk2*7JR6^Tw)s zpJUK$VI!Z%=P{l?lwWGW=X%a=UZt$&Kh<-uN@c9uDmx!}on0$qkFK)2DBD>pU z%6J#>q_%_55_!j++UuUnbL?y1`(CH|X?+fD>?r>Y-6<_fUy?$!_Mc@<9 z1*#uE!aa0&eY<0s+Z{8~>8!Y8w9Ng_dMnHRD7EjU zgz?WyCoq01v!bHETgsi)a$P3w2rk$MCt{_OVI#C(6u=5DmcbWF-F*^1;fiE=9?Q92 zxSv`({$>$>`+Tfb_fel`#a7VRTiCzq{7-+IHKM=G%9^ipFJs?1`Pn1fUF2fV449%l zulBOs+BeBx@i$!w`g^m}h!+u-6V?WCXAtLunEBxSK1v=`-tT(;eJPahC%=b$?RO)I zkx*U@?+@iI@{fe_zeAzF6w3dWd<|DE-qzmN!^c7v+WyyV__T@l4I4f-b5eQm)f;2Z z=`?)k#rwdB?SH<-KBwOv=(Rg~w`^(e=_GfeZTQ13bSTXFXi8h(c6&OlX3g51>&{QN z`MQn0rME9<>ys#bTfC3o%tley^tW%yEfoF_UYTiIape^svX`w{wOA>8>6MpXzW9n| z_6HZQy6i)>-aJ(<9jMoqJ_6nQr z{btR|_vQL?eK+Q2@kNz^t^JVxx}QFeVsGmj*lZ7M&e{EZ-3CepYPa{F7)$QPT#vnN zGyeefMkMyQNW}Mk8_ownvt~hJZc|_H)}GEcw(~Id^bU-(B@mn4+0~chV>#RHjeWga z>~_YOgL!=5g)isKd?Oy)*5_}w)##Ou=&Lq3&GwqJeUEQ60Jjw3eIF5dsBq_2t zDK~?A|B96>YYL8{)YJ_UPSTk-BC&l!J^k<%N@LZBf4bVcYZ$j7M>>)~X7!6cf9&sB zz2dSf7O#9GQogp-(Y0~AuMXZvlf+I&DkOF<%<-qzoAS;_ih^!ei*{RI=CQlGuFu)i zm#@i8XWpoA>y{0}xxNj2`-p92 zSNoiS>Rg*FWuSIpYMijPxP`Cp1x>ycyqG`PoMqF zLoC470lvp%*YY8Aa#BMc$Ol#gakkrhW($+Ubk6tkEvtYN{`6}{#k@H#(QVzhvFoOV ziRt}56Z&%dwQo| z(AmDde|BQA-MO{TGkM}?3cmHXZ|G*e3N0TV>+R^`dr6%&3CoToR&4ZYYbJMme*5nVUbG2H-$h#o}iDL_K= z!qd^NT<1)G4vGG@OIBT86M0zLG;e!dwG^yBAr--*bmaQQfc62qvlmu)(^{XH68k#Z z2RdXJsq{M+Edw?6?#Zcbd*Aj1dbd^TM?cx@*ps(k`?Y zozwqbYhvB`b8t*km)+cyskUm%n=FZQa-~4Q#-ts z%tz8b;8Ez)C}VJAdsnw~(DuHOhQYtFt9_xjINQ@_jMMc_h&iW!I!O5vTYGnxucCml zh?1w4?#!I6{e5#hJahUtYg}GBXEN=bd<}1ty`-E9=`tbGLTY7r)H}v%nY`t;YP1`?$pVu#m`*QWC z2+!JQpU?Fb|69b~*XC^hGk$`VBo^COtYOu}PrC7gsShELemk#EC!!gfaW*z>#tLIt zavfm-Ghyb;=KFH}b4>TZETQ-OVfHd6N?`A4ICC)UQw{qT?_0L)k4)*;e1nT{h~N;8 z6Jo!io{%K85Nv{emBOdY1ApazQ}-9-rkkW6|xm?VqzL-#vTtz?Sa!&Q7$+sPVr( z#b?*7$wGU3?^e%E^@=f#9oVZ)EHF4bObk}@zOD_dSNO$3k&`ptZ(nhxea+%ks}^6; z_5l`-Uc{I~ete^Fz|QCTwsi3=$4-00cF5Z{n>QY=;R}RRs^lD2wv+Q-S6=bS{Km;p- zCZx>0AwO%}WTykgp&T9D+>0NW_qJI60(DugM{~hjv{*Z32c?ZClxSQ5!z&icBiL5cw#r7>5x;Aa?WxE9J3j??8&FbHcAJ^aCwIML23$X(}7O&mb9yT$2owDmA zsP0Lfycu43A3f6tf}IT3tF{O9c>6{=`f@jHWtRlCVbIK#t5>XD`GNIIuUxh2lBI2C z7G_SCE^K21QfAG9*bWxe5bifail-d_f@jt>wprD7`HCw@6EEfr+?;b>r}6qFy?FJ~ z6)TAAzi17Pj+!BoX4$94Zq~WO{lufAqlHmo?l0W@LQtOismi}lIPS%xh3236@M;_W z-SjDL;Sux`zFOcJoR_W!vA%i9*_Qdn?Z%u&{Mt{Ac`LD?{)B&J=UctlGCXJS@+#Xr z=-dCt_xNkT<2&(xDZeA?e~+C9%!c~_-j5>FVCgi5a~S^NzLMcc$NL8R{$W3zC+7IZ z%pf!oIAAiIlk^_nYYfLDz3P)Qq24RV|FORYZ^VA9=Nae!AKu6Vac5CPTH^nB?qFX2 zm9HyplzTP&qrayj+59m-wNNOd z`5KFttny$)!=;%^JQ(>M+Da(H^AWT9lFP1ET7JorHLI2MbUU-cZ@{^>S-f)9_u0^mKLGl^$)<>9*BvURrv*^h$qV zngeZZo(V8#cP~bM5LjpE}LI%&IFdB{DoCGi#S-ytbO3 zYcE}Wt;)rd6<7K^)SO!ClWDlCYBJZX;$Pm^CS0@Pilxhm)z^wE`G;SUu)6L2m#*}i zn@iUE{O7a33+)-J*%x=@SOb=FwzDMH!{%-!PMJL~HFxgp)VpR~lzOKnk4Yqlm^Z;7^8Z?#$@Gc7Z_f3v>)+`hrg_I4zBGn@Tg zZua6OD`pL}Z!)ttxAR5o*`3>a`nPZKDox*}(boakdWxKAY#K!jAvZPkO64qB${tkU&Ouu=Z1(ekzk* z3vM}Z%c-zQ*M6Ei`b{Nh?g&n{dNXkRT^!GTQ#5YJr;}FSf|Ct@ToaLoYD*IjPI@wj zpehe;4{%IC+4|Z~u=-s@ki8b1Z1ojPq$24WT`E`5WRiVXS~mVTa0SxpSFkmB%@ECR z!D)@ipXRR-wR**}1w6YPhtry}A2_Wws@M2xa5>VVRr5w`-ZwA+bUps7;muM~gY(u4 z;MRr4D>#MgLvZ?rTnYg__dyDSUk%?4A@ouyxBNz_2Ke6h#v*+QQ#JkuEEyu-R;A9_>Kd29JpE?RpaS{q-8&S zRzN}FL>mIZr7?qnBE)KNSR_Z89_hw$l}c=d%7brg-mJx*FO6P(ubh5`v1 zN?-I7tFmH&S~Gm|!*2AI-RLah2J6k8x^r%Y8F0NVauB?I^zJMZ&YZX*vS)Ix7v7v=hU2su>{$B6TpLQ7P z@6r7}&-Z!0&+{F)z5mWV_uO;OIrrTAxt~uyeetqOEXy*%FJxvK<;qXD%v|D|dyNT2 zOxavxn{w*jX{uG9p4Vy2yiUsv<$@XScW1wzqZm-cZ}r-O;*kR;Fv#`D!2>f)S0EUa^XQ;U7V5ZNegg z#vzyqgwWD;R$t?!+Y|5J`U7~_ce81}=A7%dFaNvC>#FSgqLD9|txImN`(M)|le6VX z^PFvBb<<5`arw+atFQcTm!AO&pD$h?6-qJ#>#ygWE` z#t-gWxasWMKKat5Qyxri{L;MN-8%KOgB#!c(M1*Cs5vk3#@Y|ps70>W(9y-?HS;f0Tdwfv>!LXkXXYCXOE3cg;@^-Sd-q<8S-dn_fP7{nDjpO!~|h zwmdTaq33(o4_~$X@T9_vzuGnR@U-SrUiwzo*A7nkyU%?1$l0+wv!A)M@b&M%v!UmM zk6p6*{ijU(@q{T6mHT?dKZ@m6g;*^U%_4zH+>G#(Ye`Psq>t3BVwmA0h zHO<{Gy|C!q%MZ=}wA-D&3Rz!N#DI=*VKWI-Q!MK zIOSXa2F=?xzVF-dmtT1B>Zij0EWQ>0BrCzsCZYKael`isUGTF>i2uRQCULuj-2a_Q ze4&)w|0$mfGQ`TiRFZ$QqgV-@Tz#8lPBVLGzoaPtgA#n#mb5>! zBp)e(zpy0#k&^rcNh}r|~Q($)}FhdgGm2g8wTe@SiN9@9#_MA1}%OyafNdOWOas z1irT<|Mimgb4u#pEXfa(Px$jY4f*;+Nqt4h`1X|GUs*!moh9vGD#?$Oz}J-I|F#7F zw37N)O6qge2l^rUzgj}y8t4zkC;e$J8PC^B@ZVaJUs}@Nzm(K}wxoVhNqwv&|I3p6 z^(Fa#FUg-%f`4U6enUy#DH*?E4e##JvOUK%EUmx1p(WLwTHluGNp;s>zNo#cGgaTT zwmoGU8rFAobv9&rn!0-$8cf57H#V&B;TE+wWiqLZ*ZhQyd)hiu-3`s%sivNk@iHx` z_SCUVCe@=-(UR_I1*}B`#Z9JdeN%H!TUV#)ZfeVj2q2mpntQvuQ=L5xRCo7uG~GaX zs=K?htD(KCxyc1zM{2{mHt1g0)xE)NYHI6Ax3!q|Oe(eEg1Kg0Z|5<96XI;^6fMo7 z;sUd7U3+h))nt0Qo70;`Q>HhQPIb1>ZMwUyvu9mHbL$4f7}PyocEHfCP0ec1+1!y< z+}+&TZCaYwGtSfvJqBvKx`nB;sa;XJyQ{gQDYL<}Wj47e4LoQEooQOz)!kznQa7~q zmY3pPZo$U?nO`Yr8I@fg_BYLf7&OmyqbEEo{1hjRo zS2wWAG_~VfQl9B7A|`c1s(EADXp%d-%(_k8ZHSZTWoEp#F4IrIuS_dE4Y-ymLbb0k{?v`bhR|JyW`I^c*2xwG0-g%)TKWsL9$_8FLTEn-O$v4 z4rn$nUAA=LqK5Nk$tgVc3z?7!^Pl1q{}StfnuEggkl`^#fovtmng=eUZ$8$LsBsgV7=nAj9IOi4aOS9XBg9{_!47U6tk&l zRgA;muJ~lOXo}gC^eDd4m>U$cVc4P=C%#WH4rRaM%h_`(o@LBV#qTm^Q1K#Tb}MEh zbC+T^5%(y5r!iT@Wyb7P3_tHv%;w~N#W=FVia%(~KE?Blc|h@OV;)q@hGIl98>2@R zPcY_j#dXF!shCa2e#LBNo>t6e=o!UxjCoEm8=9Qr8e^VUe1S1zirKKdsF)4Y5ygv* zc}4Lg_M(c%8}qv2(+~{g;2msgB8qXY$`xP8{!K9({bW)4(W3N&Md^J->HCY)dyCTd6s30;rFRyk z`-{?Biqbtr>Gq;@OHq1FQM$e;y{ss`xG24#C_T3*T~m~vUX-3%l&&mFR}`fqetHUX z^!ibc|4P47lzy=&{d`gSxuW#bMd>Gt(vKFUA1q4mD@xyAl-^sEzNaX?yC}W0DBWL_ z-cpqADN45&rCW;9Yl_nKMd@Wl>BU9q1x4w(Md_NN^z@?i)S`4{QM#fi9Vtq`{$>&X zi_$MD&F{#SwJ(Hjt$oQfX7k3}=2*#W{<2?RKKjjwIkaHPkTcF?3r`$9dT1``xn)Dn zDCrvFmBcgOH{^WM&K9PVH}*CsbE-Ksb^DMr^$tQWWr=LTBnE^dUlz;eE6y5nDrmDc zW)4{AJU5pxeaMM`Pjs62E@waG z#vX8mZaz>8P5uAixtlnPLKb<`PtE< z2eHV`nPGD%G;zmEKOrwXOMRFsV4kE*@G;Uq^x?~61EU*gqj4DX8RwCsN2?D|w`4Ii z#dka78k=*LxvBuao()@f9I)(dqsH!cCeX&Th&Q{PD)VzEGUtv1k$bo2SfvV;@td5) zt;2_}g3f1l4LRAqfzfhkF~eVQ+8Ni8^M@R(J6pJiz72donX%jxA8_pJ2b@2>dGt_F z9-{oei}GRe|5cQ?$iG~aKZX1u^1>+`6Y28+c`KGJOrh@ke)=7xA0aK8mOxJn^aOoQ zqAsB28DNzEPs<#t(|m|W>1;k?ZgN;|qZ%vAP4#$WLiqmyc%_B^?@34CSCstUsGRm@ z@{m(zOO^(m@$`Kk>66WQ>m64}Wnp3MvPN5V&Z*{=si zL$^Nk;*rliG-iN32fSZlzQl*Uryj@8YFrpp8(`oEI*~0rNM3UD67b^rR~grmiNlA* z$KM-s=pMs-B);H;!Fe(~Q~tZO3Hj*IwGvTr9Y+)05;rj2RN29nQ z-?=Bg$N6+(@+i2gk1hz0E}9EH$d`$K-dQ#cnKdg5(xubmKXubv;@L3uW%rmp&fmft z%kCfTw!gvA(24@?%d>rEashX(+9W>@{3=%``x5=5_n^Zs053krOX!~?8jE=UQSzUR zd$RQ$ZDdE7&%!Rz9!riwceUpCU1~?1U~Uxu>5Zd@3cx=d^Z7%YYPIp_R5EZ0`CkCD zuLx!mW#U6I+ycs^|Ki1WfnQ6$KWLL4bjs*2Oqpa@?UbKQ9-DBmf@ci(ud~d9Da$1A zZ(65Y=DFUGnMZmx{_)e)J^4|~^_3S;_9*!Wt|I`iGpl~evhTD^yxKCaQ1=`mOMPs; zWoigF5RwEljDF;@=)s=nPlASsjo)Nyo!AIAbEMX(FxcMskW&R+A1AD#&%|WQyuQXV zm6TW7LrysUxm?KJb-*xx?>;))n*8R`gTq%_29nKG+D`>89B<5xLk_6FEk<54;lduB zouA8i-cQhPI`GqD*sEA$u5MB`fA4#4%sm_%&I|TL?bKGk7`|UsLN@ei7k8}hp{ifY zhQNOlf7BsAmIPKlqD>zrKIpYZY_q-p^3n3dz^G*GTdWabvwO^rOaHUz zM)-vYx~e+ih#}{dgzexpjmc51ZPEj_IMs7MG4#?8Zryh{_Q&5I#smK{?)29l|HSKu z*Kc^>@ZkK@4nMxZtAn;h=>E#E>C1J1$KLPRu{3-b5#HpW^ImWsM2FRHA3QI!vxNqY z#g|8w-%36YFCysbIMD{3^Hhz^j?&FmG)mpwpZG7Cy z_mKZBu+W)jEJu$XeYvg$8C^y=8T)eN(%Ki8zi@rsP+78WXo~oWJt;Hs{;~*brEIxL z-d?7;6Mt)(h8(sn(a^1*f64SQ?}OPw;?{q1dBwJ>I_Ap;TgvK4<8DXe6dgAsCshf_ zO?`oRjRw3rvV(mD^@95}FsH(=31-#g-!o>lJC(WLOu1l`-blK*Z3XsHa>2tW*IweA zR1XF`G3XrQm;Y30c01J*%%O2MzK&$V$X9`W`aKtzr{K{_;v{l9fjQC|BELy%qYIb4 z(^*U3ul0RDZ?Zd_M}e;ab}}?oV83UYfia7A@G>u1{ZH!q%=XcrzJBzOY>8}2A3Wb8 z`+(f`!As;ae-gB>0bX;abS3GNNF!SX1HK1ouXTW}V^nlXZ_6mxe2cCpsSoB``Pazz zA&1gM*&^wZ_Gt^~Pd--eydftStf|18#4hK%wAoL&^h~}R{mPE#XV9N`YZ34B+YAG{ z7ufq2qR;j&C&YNgL(zMx;BD4u!P4$4z?#@@XA7~)xA^5le)&efywxxNf?uBY%j^B} zU4Hq;{PKifKH!(P_~kWz`3}GQI={TiFTc?*U+tGi{PIuu<*(HZIm=0(l*{H%G5f|& zG5y+9l>XmY@Y{@_XX=FJP~d8u|D572Y&f{ zdR+ZeN51f^`euH2HVu`P(e`HAhT+w#l;41^sScdgJw-ULq;3uP>cJb}{FaL+TS)qF zmyjQ4>hp`|3{Bx!A}Y9u?akAD)S-_D%SZNse@)@X=voE!<<^jMnv2KvJF4YRkNNT@ zd6+}pb2h#{av$`22W65!jpwU=Tlx1Rw9_~q@yjr-(fbb7f`)eE#MJ-#t+ls=Oz_!E} zjh;fg@Nb9iWNkWl|1^A&qHs@9Iw*he1ZAq*NqE=9p_k0W8HX#e4RLJ4J4^DXm*h_? z$*=bLEF1HUKQXSPXCodPZ=~CK`ShyOJpO`u`Q*RGm!XVu{f=DZM)v&)H?Dfsi_H~@ z{byQc5dI#iW9@GguKi9qytUHVd>lSZfDhR9TMnt;c(xF=k(~C!%)`Oun#06?$MlKz z`T}E}R1Uo4e9R0v-={A-v6wX^iT!+Rij{a3{PhLatZLbA?ZMt)&#QX*>n5?sQQ0!l z4;=dO9qE&N(iJCpaOel8o4_$YM{Z;v6o1B9$++2LM@=F}KLd{TI3`XSU$>=bJ}wj9 zgtyK%F(1JaHmN&m*DJ8W(q{jpCs{z&zH=~1g?S_t~d z-_rc7M$fDyefWHpZU<@P-d(q~o~QBChW;eqV^zU4Zl5v^nUZhh`m50Yb(gMw=Vgrx zez=|R&kgA6zasQ~ZokMGI&I80NB-d!>XeU|M~>wmB`?|}Gsf(4=J`CuZ;Rd!tr6cR z5uG1VpXj8`xH;~w9&~ZX2vTc`wPp5Moh!7-nFjbE>JCbr8d12#(eEAT;fN@JA$>Sz3e z1no_B6Q3i$bfV{bVk4fNS(In5^^uWJym9!f4MQ*81 zeBz<1Q`C+_~>(I4K;$+_eNxk|YE#prC-#CMCY_$`ust8qKNaErUIIhiq!GZ&A_=8wk) z)Cdk8LpQ5s1C~*)HRrv4`M5-O(t`L6&}GA>DvKl?vkq(uCe;t6ZurMmR_eoE&lXm=(!YX8$M=jNs zpRXq`IS%>xOUPq$s>9@KNy{chNY5jUUs+v7TK>KCfhQ487M^6`RU^C&o2(Tw*-7eC zx-x-tvz_ortd4vQZPSCk&yKKQ=Ha`_xX(5wy?Ez;d>3OjMXRvRN za|S%!%~`^{kv-0YY&QR8bkM+SD;^$Q2JCcTYlv+^oUnkfgs|8QI8n2@P|mtM5H<(* za@nKmY|HE;juAgYY@cVDKH~jx%ZwET(ZPPyrAPSV1T&m1j9r8t^<@hS$X96Y6WK!f zh-lw~jARPGWX_ci$LrBY&d=c4vy{bc*1Pl?t&@|@;O(Qk6VrqWlLS&=_8 zWX_pOI?}f_Cw|R?Cnouf^C@h689W)X%)#6&&OR9TiNbxaoivG{|?T-rmgyo(5KocT^#>4c>brb zdwu>Y7O#=T!gS;&WG@>%b#_<&Z_Z$k6hAdLA!Mp0n<2A2pE2g{yO1Htp4RBE0CShw z<8<3E|K>fhveA$=cpyGadzDiQAIB!m^I@$-e`q858uDRe5!-e5MEt!O@$9yV@h5gz z@moj3$|K*QVbb;!JG36vAk*W_wfULQH8J@FPn)mSIu({ZaCHn=>DgJ>o4LS5;!ho5 zEf@`SZ93%@eVj+xOOB1nm}`Y&vK0@7T-%AQ)*7^AWRG(rdN2k3XpO?Dc6oUi(cCOhX}&{cQ*jQuibcGK~d$HvY2g#E2Ae1`p@J9kBM z%DG5Eb2%QndF#=mw*=$e1?&#_bJTAk?!-p8^1wdR<5$?_*LDke5be-+26Ts#*d||g zT>en6c@D*wjZVI(EC1#5bRM{pGm;a}`E=%7^BpRZfv_(Fvb&N2$;z5QRygYxe{O(A z(a{8*>X$RgYSE!_1!KC7F|7cu2bg~&UQ5iL*=?sb@G+_}D*ce?CS5H5qI+UII}O^; zIgz|hk3oB^h;~08W-L|=+G7LAJGA@dl3#0h+vwNm*R}02#)5zF70cW$8*at+ABe~5 z*f%XNWG!=x`i#?dqWXw!1D3p@PjFZU9bvrUQ9Q{rCB_wEuD%LxcRi#o1TU7Q2b`0s z>t^h?5U(TtEb&I-ooa(@NcW}l%yU6{A5uBE27Lb5?tF%GVRL%^Q^F5CIz1|0Pw-*4 zP+mqG&f2QAK1b}y-ZG7kIgYnGOZR|BQ9*rZgVLt}1 z^3u!jFz}?cmY+(w`~jWMmB+GqyBuGIK6R$6JkN}ra>{m)x9KxWK9CjG{>c;3v3uw@ z(BW4Z&ppsOeHdG1)*v^sYj4%%tkJqW;Jll0WofH5TE0U-Q=C3t#`s5Ya53MRt2ZOn%9> zoc7xCjl`oH|C{|6{7F!+y+RrM4)mIPx7DIe_P+?nb%@OnEqCJf)2 zQ~O5FdXd|3iZbOl!KaDHR5D2)!+V@T`l|1f{9RZ0*wLeRN9@n$#0$x}J-ElIi9r`Q zYdL2K_&7{I#dZ$a)&BB?Yulf-71%N>mMy%+#$i8XH_j?#Z;ax@V!Q?3GUDPt03*P}BH}MMG+jiH5L1+o#>(B@Og17#)y0F(2)+x4^j+T#X z&57m;V#|Kjxz=7dI*m3VeCliA$vj?aQh1QPMQNxQZ4z!F1^J^Tod>U_N}8jGt~38`;pltjeDFK zF=QiJvnj$%Q4~%lF~_5t>eBT%uoV(L&J(jMjhXozI%! zj`vz(gZ((d`Mq>Zwpsg2$=!5hPIAvPlY{PljQrl;vlkoj_F?t(E1Y^ZuC{?~SKIqJ zgO+{mpsn_6<%6uN=pw#HUN%Z{n;72X$W{e*O8%5d{{-83b>Sy(B8#*M0mmA9&`STo zE$7`S)`D&L)BQR5eC+pc34>2_`Y7{$BKxPhhp3ZGhs{q9OtTZ*KX~~!??R?oGjFlb z<9FjDypm(@n>!iXdR^fg=t3X|moaY^bK}|{`7O-R8Q2fzWk<-LvmhV#^B4K`vg6?d z=Z3N=$>a0!EBGQAwWtrBKu)#RjQVmM*q~pL*H~{Mmh6{}aNYxt?;;&Fob{5H9a<7Y zcS*|*Y0R=ihPjiyc$Tvy;h8?nb0lJ&RV*Pqyxh#w*@gB8>Tf!2ma~x#?l~?03>~?AryB+WR#KRvkw>pvJ zfK%nd;Kz}!pikW$K)&-W^sV`I>5AX%)c9+R_+w1AApTTA_v7@Vafwf1vun&GcfjB6 zW8Y-X-h`$F@Nh9_yf<^U7@PqPQ?7G!{Pu#*{bHQCnMR(ca~5Zd=Z*dD`Q^>rSJB-O zZ!N~#H-qlE_}j`kXVjUk%Hty*{Jq%b3eNGubNX`ciCL^cyPO3UJhsnZ4GOVFo6%Dz z)#S=!-r2j_diO)zz3QY0XYG-qI`>QzpFrnzQS>AXZtd}Tqi(Vp>2qer`li&_eN#B^ ztQui_!l(NORmf;7G|fw3EBho%^@WNAbirej_2gD_r@MO-Vw7>_Zs2RgMyBHZu8#8z z{)L&;ODCm=HOyzZjr_&o9dq^v&a-$1;Z$jkxO3q4jecm2kdEw2V22uAJ(*@5ct}@QhE6g2^*3tW3@tzTv?m89$<_OQO0$Db84xfkT z#n>XzsPr#`G`w-^;h)N%^2@Q!@DBM@J$2j>blb)`Z=cINg%Xq}y}J_cf;Z?xJ_77X zaSz|aJae4O9LG7EmM+EB2KcbrHG1t%q1`yzX+4bCUR&(tp*ZbyrY#zR{<$%8&>F#R z3P11_s)H^)OFN=x0O@SLJ;yrU2uxD<2EI2YI!~g_R~AwRpHDIOkFmy&M(VcZRR11) zZIzv3zC_qLHXgk3T%|J(+#1J+9z#|}YDTS*3gj+Zn7V3KE}o1ytU>PBjzFXM>Cu_f znZ-d9%N6F^*}^YLE0%vCp0z+rz^_muo8SKj?l(YNJU0Lh57NKxI0W%Mq(3_*o-V*% ziLc?2T;6)5Vl+Hb!+CE`zRKtV^l3e`wD^2>`M}ug#fLOwZuIzF%nNV4-vj?!$L)@p z{$2)OFqcb^ck$thlJV*uONGWWf?PoZb91Ny8X`ybJRj8ISL9V6%$NKz!HSPh{~7qu zh&Q*gDT1${Z^1ua1TPsq2U)DgPK)owGCJKa59Hkr@-gs82f(HF+;Mc<%jW4W6?Re2 zmh%bh-r~kR&cC8l*s(E-{wvRfm)QPG(65T%jxBih{}=k^*Xe%sYiFP9Yu1olPl zw5Y!_J6m`RSjqT3#CmQsj=cmv?!lQ0xt~Z_P1s3zlwcO|9EH$Nc!n@i$32H4T;Bvo zd4&6PG3?VIwyKZyI=$PeY-BCRW=$O-VB1UO#cYZ<%~ ztubiTJucbe3rR1~T^wi@?RRR7*u!FY7xvPJ#zL#6 zKJVX)5&lnWEHUgl?Gn(n_|LREK)d0hcGs(2V)s}D?aCQ1_skvnBaxD^{Svqzpno?M zwOvcu657USTR~gytzl~i#>z|DJ^|bVv`rMXT}j!^T8A2GmxJfvh=C)f{?jg=7vz@| zkNpAK=-%(^vEzKLqpaN8Jys?9)8GPMO!&Z6DO`Pw1$^a=%w3MTE5Z3?+TRAw`-^ba z2xn;b*i_-{11ET6;H?C26?m(JcM!bbE(do7xV5%bmf+SrejMD=L5)NDyTl%HZle4{ zDrepn(69Ew`|z0`Cyb8gJ*{@`#gN{+!7_J!%rf^8MhMRlUMJX;FCp|0Mu2;USawl% z#P#b&?m%DG6w1)OvYc!M{(a(mjy19q{j4wiiFFa*acq)r3$(7Ny=*+b;iz=iYqNMX zlG_Ka>k5(FSJ?C6CxasjZap969AZ>*B6)e!w`;-`iPt)^T`|!!GJtJ^H`rdy=kxR# zlYPr!--zYE$;XnO=su2k^5pNhvk0HGHd*B7z^}zc^YbY6x_>aQ2xcZQHGX^H`Ytdw zFuIGNd%1(ZL&xB24Pi0Cy$hAXUXa%PgcvlKL^l5$+KERo|9sx~d+u1@L*+ZTd+*-m z1ukUe@SQk!Ez|w)qY_jq{@d~ge}+(%)KlZ8p8xadpI_bu?;`Tx`325|Ja z_1OabyKBGt)S4fHH=-c~j~Df2?+DpSX>4 zSQBkD_=n(GL3_rW=fUYY7QW}+#I~GC+~jBvAY8A3OYfwJFUVANf;myU#cn&@7s^hu z5`7`jBisBTAD_<1=F@-us#UAR2k(BtZS0v$RCA{@gbD0#^sdU6<6Cnkexnnnz2|rnkVR=A7Nag zv)tt^^oyRphgiqG`PIB=4MXF0QwU_x40vp*L}MP`&mp#G%?Y;lgAjsQRd9Vw>xIy%`eHfII@j-#uQ!5ba-9UJoz&UMYRW!$R?$8XAo zhi}P&KNn^nIPo9*a;3N@`nbn6ek`YZ(!sfc)}PhvUvvgiX$a}toGKd|7ypHGA^R%! zR+Fd7o;Sjq#%%aBo)3(-nJ1oS1og77p~m$&?eoi-8`HPT;Vt08Kfv2?)|=PzgezkO z@l?LDe8yVlc)~E{=!(jb{px3bE5AOOUrF0o;$Iy0YopS`BlMxYN@S2gn@At+@XMwr z*kjRefU`<+13u2gs>Szx;Hei)j3wpHb-jB>W{qFg;g(%fn8LU$>}a|D!vit%9mnds znSPV*y%v+*J!)ko8};zxn(*1Q3EIow+Z7i0S-u>!{H^ zOrtZzWPv+c)se&(*>lzxHqb6fn{xY$Zl5N(jW@o%bMT7z7t1PQUz}oMTc?DfH`vQY zj9`<6<=_eUbQ)=my8=8H#l>fAUvV4CBk{W_Tamv*b4|Y7&*QIDt6hbk=PbG!n1jp( zXV~0TCoi8y_uroh{7P)l?~fckBwmOw;JNGZZ;%bqR0%(HKC3lB{1I=&qkyNYZOzk-qZRS3 z&fU-!MF%9Ob{}#BuO+V+!UvrpR)Sa0pSU0UwHWD;y>&D^=e7eb|G{s-`x)S}bB3H_ zzAa5A z_;l?{wM|@(z)A2c+v!=HcByO#;t%m28BIK2Gs1IGRt z{8~}qd2qGmr>UzBkrt0Rd#`qJ#n=ziFF2T+eurmXQRyiRiXuPm8JNQz0~eOFVVw^z zbZPnp^RnAH*IqRG2KT9~_%GZ!(B4q%>_pn@UE!9ZGX}~3Kff%QyW6plD>Hmt-p_!? z7a_0Z!~M>5`A0lc)%ZlK=Ek>FVq#E)9?*AWNzwsbc#6!+xs{mh5#(_`Wfx_mx$ z@-wbsOw&U{&X*_`zg4$H^!T!UDfK#6(%jq7j$NpJ#+`#}3LhM)8=d;&uKfM~3;v8q z=GPR~K#yhAr}r+2#-g_2X?LG?IeqF`=L32C;}QAE{nXJG{pbBh&SqG%uu)NTqJqB0 z+xVIEt^Mcc;45q1LGc@zoDv?%PSU&9VPK@gU8HsXrZKttY!5ig$S1M)>Z8&cctLpe zd@I2Fad29^M~+>?cSin^>wf`{=*5wWLNoU8xX#R>&hq(*9!;UmlnU$wFsC9nQ_dC* zj4u?>Kwp}R{UaU?RXzJIQnvb0qmRMs_4wn2%qN%ub%{*E7-4H1@u~ z$lm|)F!PC=yYi0Q2ljm(^LZj%7lBLf|5@-vYsNfqNpHsf44!)M{8Hn>9zTxl9VWy& zIeQ}>Av{mexxLN->XW?Nl^Akn_Hkb%y~l|+Vw-hNk-Nj4-{71^XDJcp*W~)0TRBtE zK1w>HbFB*G-HdD}y`8aa<9q>KEI+{6vEFmmxr1xJ=+i=uT=|I&yuf+#A-yLQ zoU7_RCqsQzPIO=ka>yC+PmAER&lBw~T!QruSoc|3a$u|l+SI@H>Q`{`L8tq$Ch5s|1R8|@a&QOlG^Mq7Z(KgA_dw)p$tJPdh4C$l-sxZu zo8#FCQpNX%G%pRlX0_dr5 z_by5IouVpquRqbBi&%R9dxtY}3VN;igrC~uMxn2UHrm_j9$5m~Sm&PlFW=7yGakdU zncqU+bCOTSf4gGVR*ks~`#KJo;Jv(`yLH}oKD2M)Y{IR-3mKQJ|GQt$Gmz>sbJJ)* z!$ish8nn)Grh@u&=PKF4c}4aSY~fR7?9WJlOZE84OhbR}htO4w=MOIx<8jCGWzJOC zSEO<}mjM0=W47nMOS|33^B|!TU7AWjZwrzGtu>N^N6{sX(Q0HbDSl&z&ZO@O{94)i z(8wJJvN=8TT9eoMv5j|O#EbBx&+?r5#?g1WV?{>ccN%{0R382<)L1z`fImOsEa3?g zPvyRR(YD+p@$IZr^*R%Icv*btXN1Sf67{)#_EW&_a`xHZC%%dPvepY4e`3JV*j>BB zo>b>>b4&Wvdi5*DT0G9_jMbHQXn7TWnZzBAorvJed4A~!B%{f}Q7h@~J&|kXVwGeL zo?qqOS2T&7yLZ;ORQE^5f2#VX+$4F21wN?mB)4qPnUJXGJS8_dD0k1O@DI**>Gi&Q zA(>wUfAR5H`@Hu`n3ZbDpx$$-M20>kdJVK;lT{}DQ9P3|38%i}(GC4o@S@6Q{*WQs zTf!~536U1O-p7n9(8hf(l*s1)+r{mj3GjKZ?|k3SYfmq_xg+4}E>1x77pjAQDi{9_ zyRh1)=O&xP_9@b_IQ^(TPo36s*+|Kl?B=b4*ZX+Po9?=W_~NtPUlF|9Hu2EdFJB7I zz>=;(&zVy3?p~P+svVj)(!XFx8&dp zCYH_1URIdv7#Hu^V=v*a+sBc*hsGWNzA`t++5Vslqjwgk_whWPbrXBRSq!qD7C*B2 zz0f(%_MV~3?p}F<@ya(6%}2@}b>Dl8aW_xCpT?y1MzYHp&%vP!6QfnwK+cj18z=VN zzR>jD{#9tP?BzPww$9|N(L%Qo(z`=ulIAI@v)~x_i9_}xz4ua>bSn4CxU(Ss3)V6T zJ8W;Ab}#9BNq?F2G%J~(W+m)1r%_J&UeaGCEg3rVyx~dHPR&lz867gD?_Gc+3rn+; zm7YXj@3Gg8#zS76+DI10V>jgcqaV>Qvi1|!sd3EL?S{L|vAUevhA8LUrSRyBd|L*Y zd5yD410R>Lek{QTjcfc|t}OYv+_=V6&g$d5YA~DsdtfhV8qUAA?V)n`UC=pAB!0*9 z@-KCFcmllFw=(n|w`>z|V@FQqog#wz4D>_a24UU{!S_LoefyO6!rR?^Lu4k(C!O;2 zEM)Fk&xi^7=E*Se;v3KE+wzz1f~YtJ>PuRC{`c&38}j zj;`*Mtq*N>cetNLorN`Bm1$a^nlJp=*r74ue)NgeQn)} zOFuem)~u*)cXiLVi-Ey_Rntdc1LzuC6zbcgc3Y3#w$9G-duFu`Wab z%5phPntHk*xv6`7ZwKFUb%)E>X4l(YX??*pLru!o;5|4E$Ng^SvHG5_E@89XUu|u= zJC#XwZ%ozloz9-#45XL*^wCXwQ(I4~-P4+~Gkh}@N(E{+WsZ*}wK3IcZ))Wqpx%ze zJ~k!dd&Y+IK2U8fB&ODPclCC*yuF=^v9qh^7+d^lvs>D_Q+$GTv%RjntHW+$j47DM zXG8fOYt7s7*tR~Zx+$PnGNNy#daX6C`uc0!`QTfsZrT&4%m+_|s!fAz%OEB#sT#Yv zwXMB{&+6J;>yDw{q?r`iYg4W)xA+6D-B5#|Y0hii`Mod@p|^L_)Sl_GCEN_|vZc$G z1pZ;_d|Be6X~UHR|?N@LaMWZRnB1B{!PM>^7k)MiAVH}(rxF1_@Mx@B)i z$~SzQ+tzLN#KHX(uh_{*g~aZHIi6~rkar$Z1az}nG}-#ztKHtVA!W~4vMM2tshgg8#9=`Hx2l*m% z@|K3tKm=^2v&rTI%$OY1Io-teqybxjL??>s`05?S}c$85xfWnN)LEXG_MO zsrhY5t!wIS?>W21p3&hOH2%;;Pm0N%(drencJ+3nh28dy7O$YCX>(>)w9ann?RHI` z_!)<98GXbWBLiAKR^8Ry##eY-f*F<_i7s8|)&?f`n0|Zq?QI4|!<1%V+-uaZ(>`Wk zqP|_3bKcxpwtXd)-JAG&b zP2HQL$X&0*kA7Tbp80{Z{RR-&*4eBok?pBdb5o~pJer$&*SEqbOwOj(w&vDobCZw8 z<(kh5TFyCd-nk#JnLC&!dO9hY>&_1=R#zu~X(VM!Xy@At&dPjt|=W*7dOVre+@loNZE_4Q53u&6l9vwYIydGt=%# z%-Y`d?rO9kK-F`+5;lGed+lQFNi}uM776AOKJE-to86VnL(o_Kcaw=sFu>&dSUHDc|>QYH#yI6fhQ1^3>9uncbV|p6%k9ooUs$ z+;qw$n_Boz`g(g|cT>w|;LhDJKQkW(hm~oAo!QJc-8-0RXk7;}DZW?jM(!fg+j(qd z^ZIZC$2?zrJRGSJThO;M-WiQKCR&T6#OuZnirG%rRfb(>)>4C{fIgbS5AG zxZchUon4zcgSFUQ1_O*U&uZZjBu_U9s6F1rv5%gc%dre?weDz&O7Wvwo6b9LZl;&# zoo?EeU@(XjoKxNVE;v?q{=DOG@0)X;SAKj^Gsd^O;-9~=<4eBP&oB~3(dgSpKG@!j z-CEz;_OT7^9i3h2>$@{Oy&E^(u=(Toc^S>PH?N+G;9Jf*pCe=M@4L9)Ft@#r!wXh3 zQDF|+S;n2Cdcqn)J7Ei9kg%I@4`DCieu94YeuE3weP1v$ zNS~qn_!RlOOe1Odo$7AlyYg~o$h&cEQ~M^2Gg&{M$}~5nB`R;p2Vl*VH`lVhu1%Q$ z(id~X_vM-R6#TSjo|Tc#M3q)#W-dCL!|=A|R3`@J(&Vy@=bt;@mXRQRY!N$OHV<`A zb=$|ZJTMmRUfay<_38Fmtvwy>ADR`dmr>(?ec;^=tjTlJ>nQ1EvZgyV`U?W^lntf;%9{u&mJE~YWX{PE@c9y^`t?r7sL1hm*| zH$&d0Sv)Pdn(x|Esgko;+1{FWyK;-)T3!RJw{E??jaNrK>wyT4N6=n8>C)mOzC`^6!e0@jkTUm%eC;ulo$v*Ra%8Zz3qLUJZn3-t z>e5uFbirM;SUY70C5^|0=$HT&uUNS6GA!QmVit9!H+Q$OfI@(MR*QX!#Bim*sM(ij z%i*p%HTKfZW*&y~cNny{O5M=f)Qiz)cj?(4&+XDSku}Ek(>m6+t?%t(y9Dj?eYfmH z^&iBK%VgTt`lfU~ex--SZP(k$CWgOx(Drde_br{A2(P@4&KW)aP6q20>;YZgzMYQl z)b+jWlJF{vL6cXmT)KMMH4TfdT(RQfMfIi@Gbc+|Y-4>=YHK03nMJh-_lc0=Y5RcS zslD1ZE9x&_dIf3Xy4AvcZi{jIC0)02(bA>F`@eSd)1E~n^Z$PT*K*)B{y@ck{gDcO z`Zovzep*!(q@O;;GA9w=%=hB{;mUD_nm^(*V$wB&fvmEORl1NHT; zxpn_GV}1RVt0;2+{^H7OJlc3hg8lXAm#$q^?@=fHORl)`5+e8SIj&xmblXZlS6{O7 zBPth9mR{-c(52HO)9_t!le~I`KwQ1Odg&F5mXKCoORrR^r=u(DFS}%!*W6sZ+T;JF zix$ndXEt}UG;$i*UVFu*_VG;T`r0|O&O2{bymsEa+V%71UJ$=v&YZLDxwAgNAIPkW zgSIKvw6@Jy?$Gr{b-Gm@dS`g5b%teTWm@&OoSN2} zS?+EyZDz5zPR*)YxU{yXX}xhbyRA+9ovK+an>#a`JG{83+p7t-CoY(uX`rq<)h>81 zk#6r1cK$fgEcee;&00r>sxI7%CNryU#pScuuD9G^W~EyBBTf3VQ!aQzQ+IdMX5)ef z>5nyo9n4J~ZOxF-1x^pk+DyjG(hd)g*TdP=<2%ak=0FVp3x1Mc>56p2`}?Wh-%bsh zs!l)INXfV0yuWj5j7>WDNr&{CM&S8Um*8Zx(;&E+Oi-^_;ar0H7MyJPYf?y*Px_}m z1rsBjPf(Q$hwXn2MU>4CeuCBSg9O=a!O3QCL7}pwgML-6Aeoe%S6a4yDvMAfY4t0# z0sPgZrROd_;I;rav#4Hhkm9x#+(LrZmc77f%~8F^7r?cV7Om1Bt$j~p2&D7DFX*?0 zf&k82H@F#8G+x0ebQQtryYUGoXvv2u^napFzg|LsPiyVXANA;VEBPnr_Y*#x#ybey zAaM6-0{mY9w~ajb(p!nWzt`*G3&s+_eb$3>`Iq2%ZKCsdUqTtc-9=jV(H)}J&GhlQ zVz|9zWIF{X-yrg5;D)K!cm=2L%$NTexPPKvb0IkI@A`Uw(^qn!pXd`0zefo0Mer#i z*YkI{y#8i*mM8@ diff --git a/addon/rc.d/check_mk_agent b/addon/rc.d/check_mk_agent index 3d2ab2d..9db6fff 100755 --- a/addon/rc.d/check_mk_agent +++ b/addon/rc.d/check_mk_agent @@ -8,12 +8,6 @@ RCDDIR=/usr/local/etc/config/rc.d case "$1" in ""|start) - rm -f /usr/local/addons/${ADDONNAME}/timeout 2>/dev/null - if [ "$(uname -m)" == "armv5tejl" ]; then - ln -s /usr/local/addons/${ADDONNAME}/timeout-ccu2 /usr/local/addons/${ADDONNAME}/timeout - else - ln -s /usr/local/addons/${ADDONNAME}/timeout-ccu3 /usr/local/addons/${ADDONNAME}/timeout - fi tclsh $ADDONDIR/server.tcl & ;; From 8ffac20d8e5668bcbff46330456a8341f3d9b08c Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Tue, 18 Jun 2019 08:54:12 +0200 Subject: [PATCH 10/11] fixed "timeout" wrapper script to correctly replicate the BusyBox 'timeout' command syntax where the time to wait is supplied via a second argument rather than a "-t" option. --- addon/addon/server.tcl | 12 ++++++------ addon/addon/timeout | 7 +++++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index c1fa117..682b52f 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -34,10 +34,10 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /proc/net/tcp6] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 -t 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } else { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 -t 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]" } puts $channelId "<<>>" @@ -67,10 +67,10 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /bin/stat] == 1 } { puts $channelId "<<>>" - puts $channelId [exec sh -c {sed -n '/ nfs4\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" - puts $channelId [exec sh -c {sed -n '/ cifs\? /s/[^ ]* \([^ ]*\) .*/\1/p' >>" @@ -82,12 +82,12 @@ proc handle_connection { channelId clientAddress clientPort } { if { [file exists /usr/bin/ntpq] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -t 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]" } if { [file exists /usr/bin/chronyc] == 1 } { puts $channelId "<<>>" - puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -t 5 /usr/bin/chronyc -n tracking]" + puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/chronyc -n tracking]" } puts $channelId "<<>>" diff --git a/addon/addon/timeout b/addon/addon/timeout index 67a8869..cea8ca3 100755 --- a/addon/addon/timeout +++ b/addon/addon/timeout @@ -21,17 +21,20 @@ else signal=SIGTERM # Options - O=$(getopt -- :t:s: "$@") || exit 1 + O=$(getopt -- :s: "$@") || exit 1 eval set -- "${O}" while true; do case "${1}" in - -t) maxtime=${2}; shift 2;; -s) signal=${2}; shift 2;; --) shift; break;; *) exit 1;; esac done + # maxtime has to be the second argument + maxtime=${1} + shift + # lets sleep first sleep "${maxtime}" & SPID=${!} From 027946feddbd38b04311a41f700975a1354a6cba Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Fri, 28 Jun 2019 09:52:40 +0200 Subject: [PATCH 11/11] removed excessive syslog output uses to stop flooding with just informational messages. --- addon/addon/server.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/addon/server.tcl b/addon/addon/server.tcl index 682b52f..df43485 100755 --- a/addon/addon/server.tcl +++ b/addon/addon/server.tcl @@ -6,7 +6,7 @@ source [file join [file dirname [info script]] common.tcl] proc handle_connection { channelId clientAddress clientPort } { if { [catch { - log "connection accepted from $clientAddress:$clientPort" + #log "connection accepted from $clientAddress:$clientPort" puts $channelId "<<>>" puts $channelId "Version: [get_version]"