Skip to content

Instantly share code, notes, and snippets.

@yoggy
Created March 21, 2011 08:27
Show Gist options
  • Save yoggy/879175 to your computer and use it in GitHub Desktop.
Save yoggy/879175 to your computer and use it in GitHub Desktop.
maintenance503-webserver.rb
#!/usr/bin/ruby
$KCODE='utf8'
require 'base64'
require 'webrick'
include WEBrick
include WEBrick::HTTPServlet
# default configuration
root_dir = File.dirname($0)
daemon = false
pid_file = "/var/run/webserver-maintenance503.pid"
log_file = root_dir + "/access.log"
change_user = "www-data"
port = 20080
no_pid = false
no_suid = false
# see also...
# http://www.vidul.com/articles/2008/08/22/ruby-__data__-embedded-data
module Kernel
RE_THIS_DATA = lambda{ |number| /^__DATA#{number}__\n/ }
RE_THE_DATA = /^__DATA\d+__/
def __data__(num="")
data = File.read($0).split(RE_THIS_DATA.call(num))
data[1].split(RE_THE_DATA)[0] if data[1]
end
end
# servlet for image
class Maintenace503ImageServlet < HTTPServlet::AbstractServlet
@@image_data = Base64.decode64(__data__)
def do_GET(req, res)
res['Content-Type'] = "image/jpeg"
res.status = 503
res.body = @@image_data
end
end
# servlet
class Maintenace503Servlet < HTTPServlet::AbstractServlet
def do_GET(req, res)
res['Content-Type'] = "text/html"
res.status = 503
res.body = <<-"EOS"
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>now under maintenance...</title>
</head>
<body>
<h2>now under maintenance...</h2>
<img src="/maintenance.jpg" />
<br><br><br><br>
<hr>
<div align="right">
<a href="http://www.sabamiso.net/yoggy/tdiary/?date=20090201">maintenance503-webserver.rb</a> ver. 0.0.1
</div>
</body>
</html>
EOS
end
end
# parse ARGV
require 'optparse'
opt = OptionParser.new
opt.on('-d', 'daemon mode') {|v| daemon = true }
opt.on('-u VAL', 'chuid user') {|v| change_user = v}
opt.on('-p VAL', 'listen port') {|v| port = v.to_i }
opt.on('--no-pid-file', 'no pid file output for daemon mode') {|v| no_pid = true }
opt.on('--no-suid', 'no switch uid') {|v| no_suid = true }
opt.parse!(ARGV)
# logger
logger = WEBrick::Log::new(log_file, WEBrick::Log::DEBUG)
# create server instance
server = HTTPServer.new(
:Port => port,
:DocumentRoot => root_dir,
:ServerSoftware => 'webserver-maintenance503.rb (WEBrick)',
:MaxClients => 16,
:Logger => logger,
:AccessLog => [
[ logger , AccessLog::COMBINED_LOG_FORMAT ]
]
)
# mount path
server.mount("/", Maintenace503Servlet)
server.mount("/maintenance.jpg", Maintenace503ImageServlet)
# daemon mode
if daemon
exit!(0) if fork
# output pid file
unless no_pid
File.open(pid_file, "w") {|f|
f.puts Process.pid
}
end
# chuid & chgid
unless no_suid
require 'etc'
pw = Etc.getpwnam(change_user)
Process.gid = pw.gid
Process.uid = pw.uid
Process.euid = pw.uid
end
end
# signal handler
['INT', 'TERM'].each {|signal|
trap(signal) {server.shutdown; exit}
}
# start webric http server
server.start
__END__
__DATA__
/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4p
LSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09P
T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCADkAUADAREA
AhEBAxEB/8QAGwAAAgMBAQEAAAAAAAAAAAAAAwQBAgUGAAf/xAA/EAACAgAFAgUBBgQGAgEDBQAB
AgMRAAQSITFBUQUTImFxgRQykaGx8AYjwdEzQlJi4fEVJHIHQ4IlRKKy8v/EABcBAQEBAQAAAAAA
AAAAAAAAAAABAgP/xAAbEQEBAQEBAQEBAAAAAAAAAAAAARECIRIxQf/aAAwDAQACEQMRAD8AzUKB
iUZgFFhbprJPpBvk7d8FFRmoQlQjFSAsh3N+9biq4wHpImdWBVtTmrGlq2+9sedtuOeuIq0ztCUs
LGCbQ7+jbruDfxyb74IqdYnZJAwaEatTRlq7bbm+n/WKCRFWijmUppRQdFkeoHpd78fP4YKBMVaF
SPKGqhGIjsgHT3O31wQSIx6SVEflqDTaQfMA4J32AO5PXvgIuPLhszMZY41prexVcAWDfOw2wAMp
BPmM0/iGZhcFxcEekm64Owrvv374inkDSuHCiZFal8tQtgmibPwaxRXSy1/NKaW0tb2Pm+fkfsEX
/lyIQqo+lNmSQgs3P6gGvbAVsQmOFltI7DOdgbrr3uu/x2K8rAsGCIixWymMEC+98/TbEAo/LhY1
FaJ6lIBbc9RuB26fpgLCR0SIsI3nc0fMBNKByfmv+LwBNMOYmHnOGCoAST94DqNqG577YooZGkGl
tcUrikHmNa9Prx9SecBDXJECIUCBgsY0EEE7cgWbse3OAougsv8AMSFUkIALklSd9h0GCJM80b+a
kyrrYsrfH+Xbnoea+N8BEj6p4vOkOYRvV/NO55FbdLut6NjAXjkd4xl42e7DUW9C9xttzwODXtgC
5iTy115lC87t6aGxra6N8XX/AFgpKVlzeeGQiKpDD/ikNahtrBPYdfwxA+bOVK5VpG/l6VRTRbet
6sk7n42xQxGJhkIvOWZmH3WoEWSK5O3Tf++AJNDI+YbzI0lIGmMFNAU7cE7dR7HpWAVUMmVkFhlj
Yu7IT6OBpu9/+cB77HDmnhkaCE3u8yxkEGuSRx7/ANMAKXKCSNDk5HLoQpKt5is3sLFX33+OcACX
NTZRWgzGWJvh4yGUnrYPWufjEDEOdjmkCwNCrsSQjJ69+n49jgCwOkcgikKVpL+YPTp34P48nFHk
KrJJM2hiTojaVha2eGU1ud9/16ECd5qZVCyuzm40AOn/AFAA79B9PnYLZjeYh4hIjiwI0OpT0Xb3
FfnvgKQ5iTyWmcMZCQLOodttufrx2wFNKpktTuQJTZ9But6ruL9x+mAFoeNV+6u+hJCh9P0+duMB
XLsPOLzGKmHl+kHi+Kqwas74AinUVIZLcBUDCjuO4vqLwFI0VFby1QyRqXVQDuRvd3vV9hvgKu6x
wAK4bRaj+WfWeefrx/fAGZpfIWW7SzpMVtvRBvalArgfO+IovoV0cMNQWxKHo0dtVnncnb8MUe0i
Jy3kQwwKBqd7GwPbnj8PzxBmZVTn5hmM36MvHvDEQPUd/UepP/AwGnK8hXX/ACwW9JGncG+tb99s
USypI8ukSEEANIyg2dvVZ6ew/QYIl2MOWGiQqBuoC6SB267dcS1SuZzj+bQu2Jvbhe2JauM/xDNn
SkS6mJ3N7jE0weFnXLr5rKGI3B4HzeGj02bbL5dQmt5LpQvJ2O+Gj2VkaKPW7aieWPv0GGmFos1N
msz/AImlRxsDX7rDTDsfiPkEjUj2NPq+98bYupiI88uemZSraQdiGFGuNxz8++LphmYmPKOkcgPm
sFcByAm/v0O31+uKgP8AMUyeQqKjBULlhRJN/eArfftteAPHNrnjj80GUoNR8s6RXAIIJ9tqqhvg
IQvDHNJHA+liAsgQDrR547Xv0HwULPyzee0UCyyS6RpCtYUmtyOu9e1kV7wHh8IjyeWMUrOWq3kV
r1N12Fki+tHDBUwx5WMmLNAuG9QQHUK42IH6YBjL1JPM88GuFb1kyEE8ACr59jxq+MUSouMyNDNI
zratsQq8E0RtRPAFcc8kPSxQGSWOFtSpHTIuomVt647bD+mAHImYTNrlhFEshSixYSWNv9Vhar2r
f2OAYYZOKYNJC2gsR5gn1hq6mjYsi/xrARtm1WTNKf5golwbLVsRxz2+MQVfwvLNA5LsAgBVyVoj
64YAnw/MBX+y5lZRXqSUBgRzsau7+MAsBJkyn23KyKACyHTzx3qx7C8AwM5ldbSr5r3ZVXINkcHf
ivnDQwFXNZYmGRgzDVyKAU8H4v8AA4oiaQvllWHMlwgCmlK0BsNzQv8AuOaJwQTNyyGaNNYDaRrS
VtQ6bt07dRt0G+Cs2RnQDySo08urEob+e22+3OIgeqRpVlEnoBpRRBYCj9CenXc8DAX84qSY3UPL
sCDapwRuRueR7YomK40k8wt/Ma08ym1G+GHXnjbmzgIjjLtTAy5gk3Qpr2Cmtu3O9dcBaOaRgYGV
hFzuDfWthsb3/E9hQMR+bGSH8tzwGItrsekb9K/AE4ikpG/8rK2wGRhI1AV/OcH7o9gT8GuuA0GM
kYEaFdINBWA2J+eQeLO+31NERuwj0hQa5UqCrXewPO/f+mADmJFymZWONdKyLqI32snbEpB0hEkb
SAFmYVv1xi1uRl+JeZDn41jW1KhTt+9yTiGDrlUf1CgQNjV4hhfMBRJpQ6mT1FSw37A/94sKTRij
ebIpLuenNYqPZgSySLHqof5v7jAe1CBZNfp1E1Xa7P5nBCsAMuaLxoxVfTtwt9BgNMVEgVbVf9Kj
FC0GbzBdjDFoIrS24xUNR5hhHJFLDpJGoSLzYG30/wC8XTD8OYWRDIQyykgFnFAUKvbn323rFQGd
1ysCyzEmYrSqjD717D/+tkfGIonhcBTVncxKv2h7eNiNgePihe3yT2wBpJwJUjErrMTpeVAECLfQ
Gt9/bk9Tii6JFG6wBRqDqzZgupoCi1389+awExzO+Y1xRtImkMhM+kKb/wAxsWCRuMBYaCWkzoki
aNd4tRBo1dAGwPy9hWAiPzsvl40WYCNwVKilkVem1+/bbc8VgDQxKIaZ10xsCz7L5ynu1cUOD+WA
iB0af7Y6yoXfRGqLrAG1C6/vgCNI0ObSecqIT6dJbg+17dAb2/DATkTAA8o1QHUQ4PfpRqgdyKHf
CAr63i2zAAdbjcmt7IO1cV8nbocABZZI4FlMZdHrQzEC69he55A6DrtgBP8A+NkJVoHWTUPVQRjZ
4IFX8/OAmPJ+XGUys+lmIcKXu178Gt/nnDDwn5c2W1xSQNXUFbXY82t/S6/XE2rguUzo84aluMbG
yGbkULNGtuPjDUwqlPqcvF6vulqvcmyxHQdP+MVHmy4SQtKitqdR6hZO1Ebn2v4xBZVilYD0I6Eg
aSvpXqdtia/DBQyJBpVi0Yuiyr6aBG5N++CDgDTVssA3IDAWpA69tue3G+KKwQkSDywC6DegH0k2
LB568Hr8YilJ438QlGWSZRArFZJgPV/8Rv7nvvWAdTykT7NBaxAelVkFbUBRvbjbYnfFDOXy66xM
iJqUDgnbpx05/TAPr4c82cj50qATfXE/apX+Iciq5uFtPpZdH03J/pi9RIbkhESKOhF7Y410hTM5
BZnioiltia3JOCgy+XF6AukAcn/nBKw/McZuacjRGq7Me/fFZR4ey5nKAOoEiEC2HN9fnEUPMiVZ
igBUXuf+sFxVcirbzZhjW9XX1xdTFJsxBkoxAlte56E4rJZsy2ZtUQBQbb/nFBkqQlQbVNruwaqx
gDeciWqy0y8+gLX9MUW85pSwj0sByGUVQPT+2/zghrLxpNmi87qAq+gKaobHaup79sUah3gaV3aG
RWJXYkc0LW9+2+KCBFyzSKpChEUlwAvp33BHHH19sXAsmYlZJpYp1RqIKCluq4v71/HviIHmAzmP
KtHpdm1Fa1MSTRs9eNhXGAdzESnMJLl3jCrVEPb3qs7Hkj6f0wUaBZAzs+TmDswbWFAcVVm69N2N
tuuAtmX05pcvJI6xrGUaKYCMsO4J26flgKpkXmjDgyRIAVtW1Ka4IAO12L9/nAWllYifNSRAPECo
0EN90dfaxd10OAplGLeHshW2lZnFqJCV2GwO55PN8E9MBSXOKXWPKhwqAFWRdJUXvt2r2/rgDTZk
RzZeSSNpVJuM3oo9dgLv5wBI5EmmSNgHy5ICrInDb7V8Vz1+pwEOf/Tdnk0q5PlpFtZHa+CK6dsB
6FpAQoACINTxsuorZsC/r2A57YAWYlyi5plzWWUADUrKfUF7CuO3Ox/HA1meYNlMmlmJsOupdO9V
fTVQHveCIi/lIrXE76TJHRB0KSDZHxeA8UBQxQKa++Fkj3G/J23B37UFJwBMsFLzoVYqG1A6A6kd
T6ed9wBt+GCpyiKzM6qyrZ1sthNqqhV31PbEFJTmM7mk8M8MB+0OtyzH/wC2m+/sSD174o0PEvCh
4J4IzZe2mACKV2C9L98XMS1znhGRzcvjDC2GjcE8EjkYg7zwrw5jEWdaLH8sWRbW3FAsajbeqvGp
GS2dyUeZUCQWAb+cSwhV8oJWth6RsPfHL5dPpTN5Zo8vI6KNZFKMX4T6cbEJpfEdMxBayKBs/wDG
M2Y1LpjP5JHhXLFQmvcgbFhfXGVKVl8sXjCgGWtXq5xm1ZF3jR5NR22qxiaqmYjRYwfvHqe/zi6m
Mlo0eX7RKdIQ0unY43KzYmOKB2dU0OGF0Fre/bFRaVNH8vLKpNgEIrEKa7ixjSLw5AKtyFpGG26g
6v6/hgDsqplgEWNE5QA2oG/v+u/44CiASAlhYHqG1C/6YIZXMMFj1BiqEFQ7fdI4q+18XiymGRmE
iiknDE6z/OiaiGFUAK4rg972rFR4a2igy80ZlYVpIUMgG3TmzvvfXAXiGlpc4ZpIJWchR9+9wCpo
30G+w+cFezAZNGVaaGWOevXVBDd/TfvvQPFYA0cKtIhSRkdSQ/q1s6ivugD52PF4A2YtAAspVG/w
RKGYg8UBQI7b3+mAmNiEy8ISlsNOAlEUNhVA/qTtgGAoadXZ1CoPRNrBjI23I24AG35YCBPczTTt
60Zlp/S2gjt9LrbAeP8AhyNLIRGQAHJtWUcUwJs9MAs6Le0UZ2KA6tWkE8gEjiwBYvk9MB7JwoiN
LJmfSG0shRvUR79R79NsAaAI6ecQqoJ9Z0uWAUkmiLAFE/pgLMrnKvKMuhlYhR5G/pra1B/fPvgE
5WYQJErSHMB6WNak2U1ZINX3rt23wCccjRzs8gjkdFsPZAUdAQBubrp3OCPUzCTyF1R8urKFsAEn
n5vvx7YiryeUqFcw+qcqWLXtXNdqqhtvWKLw7SRyWDLOwYsNjpANmr252wBsvlcxmJBksuxfMuis
Wl+7EP8AUw69Ob1GvfAdT4Z4VlvB8sYcspLMbklY20jdycX8QaeJZkMcihgwog9cNFcj4XDAo0qL
4B9qrFg1EQInFYajx2W8NVVgKPGAHsDZGIKyU6EAYujkM54Y+Uz7zBi2sljtX0xz6jXLOzDu+fLz
RhUiisn2/pjlXQk2UM7rKrUDwx7fUYysPsh8sbqzcG8RpH2e4yG64us4yJ4DmpWiLhUTcgDc7f8A
GNys2EzWV8yCPUztYNiutV/TG4wchVVREYguObsAX7jkfp+gQNELebmGLS8xoVuxx3H7/E0HHmKP
Nkhuvuqp9hvp6HAVJeRF0L5TCvU9kV8jjASEaMW0xZgOxF7fG/6YCI7JEyyWB0rBB8tmgjzK0eqO
VwbRdbAjoN9unQ/ljUo0jmFmz5jeSQsNiGBYFTt90Cgfj2OKgAfLRsf5byanEZiYE6K4YgHfnjfr
WIH1OZMTRo8UeY1a3QLQFkWtUTRG5HN4KplVjSIZiCIhgD5CuwFsOQGvfnte46cAfLxP9pYyxCRi
A5coG0kHcVtub25FHASsKxo88hCI4Olgd12FUo2DH2B/LcKoXOZjlYrmUMZ1oqjUPngk7k/OAK6F
Ywmotl4jurKTqAAJpqo78HYjjjACQpKGmkRUKeqNXcXqA5oUOnTt74D0rvKqSZuKKdXYJdhdI6WR
webPt1wF5C7ZesrHl3Ef+I6/Fb7VdCrJ64AUGTlk+0JrlVCCgAbZaArpvVUfY+2GAJy8mXilMkhD
6wqSBwtgbUD72fY11wGdllP8mOMek21liuonYknmh7e+CPCSOJEhjl/lHUoV1B2I3Jrbkbb7c4gN
Brmy5LSRAsap2FkVuB7Vfba8VRspBmZTCmnzJpLEcZ+6D1Y1wov5PzhB2HhmRi8NyxVaeRjqllqj
I39AOAOgxr8Qy7Axk30xmgMfrcDEim5JFhTUxoWBjWoKe3TEFHk9OCqFiFxNAWemqjZxQQWBsMUZ
nidh/QV1e4vGel5ct4pA8kWYqi7ABqHNY4766YU+0Nk/Igk6qBtuBx/cYzWoPlZTPKx4ANAdcRWh
pXRYPTnE1WJ4nNBlAAXAdjqAB/XHTlz68ZGXcM3nFW3Gy0Rq+D24x0czmXTTKzztpdj6Q25373zx
+6xQzGE0mSeQqCQV01Qr8vmsEDOe/mUnrJPat/muf3vgosvmsTTW1Dc1fwBe35/0wAFSSNmDjUpv
k/8AB5+MEXQKqFVG1bgnvgoEpKEt6mU/e1cEd8AeDPLASDAsmselzuy/BPW8XUw6s4mnAjL6ZFCu
5aiprk9ea2vf64uonKxRwxM8uqJx6Q9+hje+k1uQARYH44KcepZ/s7Kip94S6SxVrpb37AA/B5q8
BMOcVXkPnNIAxdlsDtR6gc0fy64AzQ556dPJ0iRaIQUo3Fi+dq43wBJJZGknmSBkDEHVLJdi9wF6
Ei/ix3wFZ5YMzmBGNWqCQMApAomiT79NhvvgKS5iIzLNmQNIBCaRR1Emyb4sg119sBORzEEOcPmy
vErRgxhiNPJrtV8jjnAFkzDIqytJKpJosNI5W/8AL/yfw2AUjJBBFJP5sQUhQAraFIHBN773vycA
vnpswcmZFZHibSDptQD2APIPfmqxQtE0QUPCzsCuhQxYXW/T+l9cQDUuIBLqZJJGJ3FArVbj/SKx
Aw8j5eI6GUxHetJ1Sk8AdCSR0/QHFHSeBZAeHZfzM4yDOTbvZFgdAP3ucaiNCacKKBxLSFWmB9Ib
ftjDRvKUF1Gt+MaiUwXBIGx+cKJDuTprUOrDEFZmCqCfjAVJC9PVgB2QbqqPXBTKqKs7YqM/xGFZ
lNgmh0wpHPNE0krBWqNRvjjXWMTN5R8x4n5rCgNlHYYxrWHY4VhBEY68jGWoe0/yTVsQOO5wGJm/
D1OvMZ0Rne21E0B0/pjpy59M7MZnQT5dltJrWRZA3v8ArWOjmKuZKQrZBDbaVF72e3Tnb88UeKT5
ggIWQNyyvV78d65/HAORZeGOMhfv1QYtd4IBNDNZaORQBZCrfH9MFVDsQFJAY9RwR2wFZ42QagxF
bXf64AfmM4Bt9a7kdD9MAEArWgqFG4F1t2GJSNbKRebEh8sKRwdP7vGdrWHljKFWlqVbunJsfBrb
gd8bnTN5Vkzfl3Ik8iygjSjepVO101dhdY1qGp2iCRx5hI5ZJSoMinS62o+715v64AU2XikKImSA
BU+SXkAVutkXf98AWXyzmDkcv/KJPqQpZkFe/HXr1+uAYzCKF8uHVDKYwDuVKgngE2Ob+m14BdvN
3yylCgtZDCS24qq32B46gd8AmoE4+0xqyhiN3CuOQBvsOwIrjfANSZZzEUSEaYSrU8pWj16V1PBw
C7PSNm55BeogQMTpojcgc3W/ycBjZvxHO+X/AC1TLw3ZWNq34vvZv6/pUaSyRSlo53BYWoJQqSlC
wPk7Wd8ZUZNQHmMrRaVpn3IobC9+3XAG8NSd80mbiyMksn/7ZGsKl36mvgnn4Fd7sG7l/B1gmefM
SPm81Id3fgeyr0/fGBhjNQiGGrtv64DNiRlzIBbUKsntiYutqOUBRx8Y0ysslPdWDziKMJBXOw59
sQKvI0ktG9IPpOIpg9ffFRcKDGCBeAtJKscdE4oxvHpifBMyyOQdPI7Xufww/hGPJmGhhCR2woDU
dyRXOOFrtApjJ9maQr8bYmLrP8LfMz5iQSK4QbKSOcSwldCIKy/Wu3GHyv05vxczzZnyoRunAG4B
6D88bjn1WTJlUyNzTgySkbWNrq976746RgWGDMZudXm9Km9t+tVY7fGCH5zMmlsuliyCKs38daGK
FWbMqjljR73RJ+K98BTLzOshXMI6noy3+vGICtUgJi2I5DDn6cYKoJm01JrFUAeQf3+OACdphYrn
YcnAQresgoVvcjox/TjrgH8i7CXQy10Avpjl06ct6JYwoIUEntjO41gc2RmlFqAOorasbnTF5Jy5
HNR2Y5PL3spvR+bJx0+mMDizWYgNyRxsVWk016Ks8kEn4xrWTuVnd4dQLmUDVpeSi/YHYCtu/fi6
wVWXOPllW/NLTAFgNjqFGr52JHzW94CmXCBFXNCJ3YkBlYWl7gmt+l32NG+gXbNZdUVhKxcBgVRy
4B7D29t+TZxQhNnjMupo1inYiyF1UBYoA/PTfEQopn1q1yeUAB6vSNu14oRmjmbNXK+sE0q37/GA
2oZ5ZCpVFXUdiw4+Og7AfPfGVWEM2cfY/wDqo1emy8hvYnpV3X49ro+lQRIiKqKFVRQA6DGkRKoU
6lWziUYniRkUnqeb6fGMtM/IBiWZm1EnkYQrSS9qxWTUY2s4CMywRNF+pua5rEqphWko4iqZnMCG
PUTQ4snFoFks8rZD1MbViCTiSlic7mVWBnJ2xdMc54xDLPlG8uQsrbhRt9MZtxqRPhsnmwRy5oXt
W56jpiSav41suIJwQtOByMX5jO01Fk4QfSgX2w+YfVVzyCGH5xLFlcR4nnkgk/l+qZtiCfur7dsJ
EpTIZafN5hps1qEa9XG19x740jUmnRX0HTacgjTq/K/fGkpJ/EkDElfLZSKI3v8ApgmiJnlYXQIF
i6F/S+MRXnkjZR/NIINEtQPxtgF2ljIZUajyfWdziKWcjV6+bGlls/FYCAbUlWvaugOAaUllIoDb
tue2JauCZRjrWjdjfYf0xzrcb2UDEAk3jLR9JCNtJI74D0qCY16aPttjUrNgL5REBKkbdMblTGZm
IpZZNMDgHqRtjWsYkZLRFcskkjVxd1hphOVHJKIAF9tsXUxQZRdWoog/3BcNMRnAyxhVKDfkj+m+
GiU3jVaDXySTf0rF0I54FbKRah3qycVGmRBmC6FisaaY2dEok2DoBO99z0FDrjKmcu6y6gS2XGgB
SoN6exraiQMUHk8c8WybavNdk5BZfSduOOb6e+JeqYPkf4zby/8A9RSxZHmRD9Vvb8cPpcP5fxTL
+L6zlEmdF+9KRS32Hc4fqGocsFFAVixKZSMqNucUGoJGXrgYgz1kZ5S7dTjLQ7TIdhv8HAIeJQF8
kxBb0nXub43wpGHHm1hlK3UZo+o9Rzf76Ym6v4sfFVedcvL6ldTpIOxI/wCdvw4wNJ5rPNDnYo43
BjJpo25U9x+GJ4b60FCt4ezAGw96ex4OM/jf6zfBZ5kzEzuW01veH2fLpPA/EmzhdGVrU7E9R/XG
5dYsG/iPOLk/DjM6knjbCkcR4N4W75v7TnQtHejviK2M1IINkKgMP9ZUfTv/AFxYzXNzfavEM20Y
OwNgajQH1/tjcZMx+ExpI32iUMxBYDYbdT8flgYZEMEaEMIpAKrS25/f1wUGWHLgmjuBZXg+/wA4
gVMmXRSiVZFE1sfasBMTMQAY6XjmxjNrUgzZZfvqaINj91jOriFlSONgoNjkgA74L+Fcl4iWeQyg
AE2GA2v5xbyzrfyedCuVc0QQDq6fOM/LX02FzCMlcdcPldAinRMxodyrEWD0Iww01IxZaXS6n8cE
JnNLC+kgr+++NAruJYvRR25q6/LFQhJ/KJJ2buNsEpSbOIE2Zd/914qF4njlQlyrE9CxOCJDKCAp
Haia/PFBE8P846/LK6jttf14N9emA0VKxmMwwWAtICoXSSDyTz1NjnbFQPLPOMu66mkYUS21su9g
g9LNX77e8VbzYvNBy+ZcrpIIlBJLE9idwB1xR2Phoys3hsRiijKFaPoG5G24xciDtEtAKoAHAA2G
A8IwOmAuEF4BbNMWXy49u5xmqTbLMaticRRocuAMXAYxKyFGFg7YYOQ8e8PfLO5jjtSRpH12xyvl
dJ7GCJXgK6pNwovV9ePxxZdYvgyqmZ8Q89TqUKpUjuGobfOKRqvmEy4zMUjVFcbqb4u/7YzY1KXm
WWNIUQKpcnWeRX7OOd8dJ66DwYeUoEasffG+Kz1Gl4zkVz2Q0upOk6gMdbHOOWzeZXJuCGIA3q/n
GFrH8Q8TTMsI9gdwQ2wF9iR+WNRkzlo8vHlGaOD0jkn/ADGtztx9caiUjmfHERzGusgHhWNE98VN
KHMQ5kKFaUG9/Tf6V+WA8uXhApixB73vv0H7OA80FkmL0td0fTQ+v0xKsHy4lRxqRiPcHfHOtw68
mwU6Qf8AceMRpnZ4lKjQqHl6i7X9/wBMa5jFpzw/KO0ohIjaIDzGkHor3s/X97Y0yaSCFIXlidSS
dK7EsK42GwB/dYoaihmiyWsKfQC76hRA3249r+mGKXeCTMGPyZk1OfSOBtzzvf699sTAYZybLSeS
9tovXsfThhqM9IzJ69mBJ2F2L2N8UemGGhxPm4YwdLFTX3TyfbDDUmSaSMsCpAFtV7e98YqF5sk8
oZRTOBqal1V77HAAn8NbKoFR2IJBc1VX0P4YDZy2V0IA8saRxV5upCTd1Q6H9dsA4I4pJmk8ymiY
keXYBobCiff8e+KEVm8mSYR22gg6CALFCxRNWPbucB7KSs+SLTFQqq2hltSzb7bdBfHxgPHKxBCQ
0kMSGvOIul00Lrfc+3GA2fB/FAnigysb68rIq6dRqjW1Xue2LKOqMf1wRGg9sRQnVuvHtgKiNNti
PnEHmiHbFERpWAs6alIHOBAJ4FmjMcqhgRuCMSzV1yvjX8InMRqcm6rW1MOl9DjPzi26Qyv8O5vI
TvK7ofM07ITtXyBWKy94llHzOSZI1ZZfJC6WG9jjGa3BfLDzRRjcRoB+WOPX66x0fhqFCoxvhnpu
0ClHHfHFwv8AFvh0ozK+QDpe8c743GJkfBJXlE2YNBd9IPv/AHw0w5n/AAk5sf4raVG0YsV81dfv
jGpWbCD+ERJEB5BIPOk6T+O94us4pHl0jj0RJOGB7X/WvpWKEpY51tEmAVeCrfv99MAARz6tTl2Y
dTIRY6EXviEN5cupBISzwNVfkTvjFjpKNmZjHCePZWs3+uJIWhZYyk+bHESUawBzR5/fvjcYrXy2
Vl1xplHjJkJckuGKmr254v8AGsUav2NIcqEEkNopkkR1sEccgDtvXP4YDyREZVhDEquyWrCQyO4F
HYHgA8//AB7ch6aF1cSTQPGkjGyF1+uj7XuVHWu+KPZHKRxpJF5jDMyGlbzKVlPHFiz9aPtviAkO
VkmzYfMtEEhXQVY6Sx09QRQ3IO/GAXdbnDZ2OOAFiFbhge5F8dN9sBLwSQnSJYs2H38nc6lYjegN
uh2P9boNBFBG3mZXMTSPltnCx+pgRtyb6DcjYWfbAUInnjkOmU0AphdgAVNj4oUfV7dOMAQRHMxy
KiQw2S8iruQdVghiaO45JwwC8wTnRFLH6FV4xpbYkbVvsfVv2+lYAaws0SyxNFIFa9brR23s1zZD
fFDvWAUSF1lOlzJIwbQsJ3Fj1Gug/WsQG8ytbxxvLlIqG7WHYAEavjfbbjAbH8PZWDMZ9GMLKyW/
qZrJHUf/AMenQbmsag7IkKN8VFdanriCjKre2AWkJQ+oWO+MqJGQRQ68YoIV223wEqvsMVFHjJGI
qugFQDyMAGaBXO+/tiDEz+RaIPmC5vkDt8YWLKwUm/8AbYJa2fwGOPUdea6PJOFXVY7DF58Tr1or
mlA9RrbHSdOd5CzcaZuE6q9j2xb6TxgTlMl5hZiDV1e372xjGtc7m/GmaXysuTIpOy2dva7r8sVE
rJKqedIqa+T12vi/+sVkjnc5FJemVgG5XQK99u2NIz2zUSgigTyKJ57+34YGhtmTY3BA4sDt+98R
TULI0b7g2Nr4J+enwMTF0KF2mzSoZZFANgi6Bo9TuOMEbWTjly0YkWRkj0hnvdjZ0kbbge4HtgNL
LymPMpmMxGMvHXqfcmZdtuKLGr3rk4oay88QIYPHmjsiNWl9NjZlAo2T88it8USuYizTkTZjNEQk
sVCennbjgD3rbtgDOwjz7SSTPLErhmiLkhlrcnkgDqKrAXy8cUgZoJJZkBsKxUyE7dDvzQuxXvgK
6qy+ZmzCO2oW2X8wDSG46Dp2sivesBVpZcws8kDLCGG0cqBg29CidgeB9MBESHMeZmRBGM0w0LG6
ilI3BUd6oDt9RgIEuYlUwm48wWJuSglc2Nj16DsMAFpJZpMvPIIxKFFhqpgbtmsb+kHe+mAcy4im
gmy+XSPUEAaVCAKANEkb9hfvY23xQlFlnfLlp5gCSCFZQSt7A7HYE7f0xAMzOVYpGDLq+8SQFqzQ
33NXZ9++2ICvmpGyxkjSJZpAHsj1Bf8ALzzXTFEZfMWInfQmWVCNIAHmMKvb6/1+A6TwXJTDMDxC
STVrU6RZ2B4A9uvzjUiWtpyzbnFQvZBxMVYklbGGDyWTTUbxMA5R9ntgbj6/7ffEzFMwyK6CjeKi
wIva8AQC+cBVksgViCjoF3PTBSWbKKpLbCueuA+aeNZ9Iv4gEMVIpILHGbDXRZDxGNsiWQetKBA6
DoP0xm8tzpePPvJJ6iBXO/HXExrV/wDyfp0q+ygXXXGtTIz/ABSQZqApqp6Iv6VX54zpjN8J8IYI
ubkNVxtew2vBGX4zJJ5zQLX+0aem/vzjUrNKr4PmfSHGgHgMwB/DGtZxE3hbRuCWQA3sT+/zxQJ8
q6G1BKLtdG8QEgys1F3BC9rr6b8Yoey0ahQzk+sgLUh3J6cXiK1Y4IIpBHG2Uj0aTclubsnpfTb8
ODgNHLy/Y4knTNpMX2lYyWK5oG/Seed9vnBTKQDLGaSMgyNZhDKVMh34B5J26dducVE5pYvJ8lAR
mEOsgzXpJIJOk8+5rpxWApP5qQeVOk8IjAtQSY2WySrUABwNz1wA3zU2aAVcvIY0YPpCHY7c0b6k
j5O3XACkVHB+0FxKpADlTakn7pJPFXW2AvmXzEMAiXzHyu5aI0Co1UASB17ex6YB2N/OMGsTRZUx
tcun1H2DV2F0OcArPmR4g8UQZjEGTzgtHV2P0JI+uKCvGjZoDIiEQ36mdtSAfFm7sc9vwgiNojA3
lnUy6W1PFTUDYoDkEV9PrgDZWdY41M8ayIxJEgF2bo6t/fqfYDAZuXaOCRkmhjLgLKBqIDE3+J3H
tz2xBcRhrWKWlRND60uxqLVuPj87xRXLTSyToM5To51eUQNVmgQeK3o/piarvskyvl00gCgBp7e2
Ny6zYLJYGwxpAHI03XOABro84gqZ9B53xFVM9nECjZgZNtUbjy2NmMnj4/th+KbyXicGbQGGQHuO
o+mCNOM6uMAZRycEK5uVY0JNYivn/wDEXjU2alky2VJCIaJAsX83ijis2WlzwkkOl6UEsPpeMjZ8
JkjTNhZSTAponVV39eNuf74iumg+zyelF9J42/fvjNjcpfM5ECYeW5Xnb3xnWsKvkfLBt2YnfnE2
mD+GZg5cmCc3E11t93f9MalQxP4bk0ZpS5DV6W5rDErOzOahyzaQQZHApidW+NxmsvOSZkJ5jS0t
bLtz7Y1GSuVfNzyjQJ7HXn9/jijpP/GNF4O80gZmIs8/03/PAYuSijWSFoPLWScaVJ9RRuDt/fjn
EGhkXkyGZdZ4A5I9XpDEE8EH6/vnEVr5Q5hsuc6c2rspFhk2ZRtVgWCTY2+uKDZcvn85HmoA0cMP
qVm3BN8fPTk19cACNJkfNM2XRGdgoohhd7L8k1v/AMYCzPNQE0Mk6yNZSQetfV2rbgfj84CkJzEW
bnSKQ5eNPVGQq1uRVFtrI98B5HhmqXPZR9aCyyOAWXoa/LbjAWZEYuQ4my7PreMKw0E3uBYr8/6Y
AOYTMGWLKxTTspFwq/F7H0kHAMpKI8w6ohRygjZW9Chq3vpsBe+14D0GuI+euXR45RehBXqsg3vV
Xt9fjAHEKxSJcQZpFOmMt5p5Lc3QB+pwCfiEkEUsSLEUd0/mg2dN0SLvkkd/1OABJlvJy7gaPN1A
Sal/zVdjpsCPx6nbAWR/J8qHKMCbOsqRZAJHQn3P1wB44gsrtHoaRHtgB6hQsbEfp1PXGemuXU+F
Sh6ZCKYWaw4p1Dkk3kk+fsvRumOrIeZkUJt3xLTGNms95Yc3QHXDVxnJ4k0kwC73+WJq49J4o4Ya
AN++Od7Jyx/E/E285TJZB50XZ+nBxn61cxzk3ikuVzgnysjKSykkN0F7fnjfOxmu4/hL+KsxmBFl
/EACWall/v8AONzrWcd3LIsURdiAALJPTFxHzL+Kv4wE+YkyuRc+Wp0u42JrY17YlVzcGahDn1FH
Y0W339hziGhThG8QmCJrVBVVfHQYg3IY4gYAzeU7CzaWVG/WvfjBW7kJ2+zJDImnyo9RJ2oXsD9M
SrKSzPjOXSZdJNHr27n6Yz8tfQGWzZzJ1upUFt9XbEw1WR40kBEnXDDSWYzMMuZiSWd1iYjcHg3x
+WNYmizZCDLASxpJOpA0UL1KcVKWj8E8U8QnryHWMtsbIUY1Edp4f/DUOThXzN3A3vcYuId8gICr
KClcDAch41ko8lno2gbymdi0ZFDcjcEk7YlU74ahGRkbNo+i95HUEdAOR8Htt9MQTmhE4MjyRoDq
UeTRtSSQGrkDYHnFBYoYoclO+aYltepZYjqvje8QGhgYZOSWaZZ9dt6jbUqkggk8jb9MUKZGSB5h
58uZlkkBTSTsQe4v4O3bbAOKubOf+zxkfZsuQBrNWK3NGr3v6n4wC8cjgNmZE1FbLp5ukNe4Nb0b
HXbbAe8zKwusqtKBMtEqTanjaxRrfbjpgFhNnMougmN0jawSqtzZsXv0J2wEL4gqRANBGfWTb2xI
J9RJv9Op98BpZXKxosZjBdFYyIHbSQCNgOu+3O2AmWeZD9pzBRFaIqyR7sDexHPSvxwGWiTTiQh7
lkYqwJ1b9FH0J39sQNR+WrMZwASoMjSVqsqKSiLIroMBQkoAkbKVljVyCQS5PIrnatrusAbzy7wZ
pIdOqU6helzQArawfr2wqx1OQbaPhxxrqicOSms7GJIyHorXGOiRz/iHi6eHxqmcthIdMTxrz7Ed
K9vyxHTISaGPM6mnKuh3VL49yePphibF5ZYxC0aeWlCtiL+MSssHOsYKLMSxOw2X9TjhY3K5/O50
O7JrSjs9ve3bb/rFkTU5fJpnIJndCTpJTTY44Fn+2Lvpnjb8HSC8nMrAVTDzF9RANjrQ5xuMOm/+
oPjrZDwlcrCSJc2KLf6V6/XG2XyJrZzps/GMgnlyR0SCrDf3GA0fDi0utRfmOBVbkmweMRY6ODKO
5SVImAVqO3osDc122o++DR2vOjm1Su8k38ssF0qq/HPvsP8AkBr/AA99mi+0SXJJWwrbGLWpGc+S
8SBUgAUSduh6YSphH/x+deUrMSvUfO/98XUxEmS0BPtDkhbBv5w1cbXg3jZyGZSE6XyzPqkJFldt
tPttjUrNj6Xl9EkKvHRBFg40ikyiwCcNVmZl2DEUtE8gYmjivGZBnfGoozKiJGuoMx4JPI71XGIN
aEypNJU0WbVlAkMrBGWj/p6AGv8AisUDXM5eSGSTMZSOMg0n8sUvRj0J33NA17YCETyYPMRhLlwh
K+YhHdSpI/Hr8YCA0B05jLzeVIjhn0O3UdBXG9H3PQb4A2Wb7PFqhAjlklpVetegC23NWb/TnbAe
geNUzGbRpY9TEFqHqG9ryQCSOl/ngIRUhyyxwZf/ANiZdP8AiUAbYEHjegew298AyhhTw7ymeOB9
TDWBarJudvehx04vuFZRHm2CTwVGyDy5lbUHqu1bbVXQ/jgAR5WTJBzBL553QKt1d3XPyK7k9sAe
eWEFBLl5XdVsMEFLZ52N1V9vgb4BPNTxNMscWoxMA7BnHqBqgTfwfjCqrDO32uOOGKNmBHIslv74
RAg2WZwGmIlQABr9RINjSem/1xBSYRCPRCW8zUrMjgnXtYFb70fw7YCc4+ZEi+ZG8CuxUKGBGng7
j8O2/tWFo08vPPCxWGNy0foBAO6jj52xmVuzxtQ/xFlEWNc+fs7sQpLMCATsLA3A+RjpO4x81z/8
WrLLOWaJUjh1GPSwOtgDufy2xjrrK688bCcfiiyRRyzFcqQQpBYEMey9Tiy/1iwLM+LWzIr1Z4Bs
n2N7fpiXrUwo/iQMLMiEsfSfLcivkNx9TiFAggjmkqZWWt+HUj8DWGxZK1Y48vlYNZQ6FqiCzH8s
ZzW75CmRhhM6LBHKp803qcjSur/SRYPt/wAY6Rypr+M4z4hnfMl/w4FKRrfTm67k4WmMHJ5SEv8A
cZhdHSNVUfywDWcy8MOUeSWKgAbBWj/xiozvCR5M3nPCHawUANAc7/vtiK63wiTzfNJgeeVQGWIG
tIHa/liAMAeQjKtC8sccY0JqYA77AsNIFDgHjAHGfCZCOJkdn4F7kjnft/asZsahXO55Mtk9UtmR
tlUd8ZaY/wD5CbMKzpl3KoaNDnDYnpTOSSyuIXikVH21Vi+IHmoPKVGUNVXqU74Slj6n/DMjyeA5
dmBBKkC+avHRg5NVMeTxgrF8WnEUJJ2oEk9hgrkvDvNzF+IxZZZtcpCKQboivrxeIjQyAGVV/PaO
M6Q+q6a9VBTe3vVXz74CgefMsWj1iGZ2V5JCCAlg1dgHg/P4nAOtHPDmfs4EjRxJ6yWFlmv37AA+
3GKFHYP4hNJFGYgsYDRKp9TG/SQOd6O22AvmYy2QTOZeDy3B2Ba2RASKAP499vwC02adoMtCNaSs
TaGT0sdqsdONtu9YCrTlMoNcYhMT/c6BromrobHt2rnAeLZfOMkEUckUSNrZixKn336m6s4AsjZi
TxCSEztBlwfLKGMHQKsWOPa/74AedCzZRYcuqSvRLPvchLDcA/Q374BXxXLPlfKeBW0eWUIcC+Td
9Dz098KJhVI8q7oyu5bbUa5GxIPWsQHymVhaSUNpjlWJdRZtQexZ+DyOf0xoByjRtEwcG2XSBo24
b0A8jgm8QUdZMqkaSbQyvdb0FFbfNnf3HXEFoScvKkYlZoJdotXABsg1Vb/TkcYVYY8RlgiypEgU
RgWxIv8ALqfbHN0v4U8H8WgheMrlIo11kM4jAodOP3+eNyOex0Gf8S8Lmij8xQ7OSFoGzXX4xvxN
scvmczlijEJFLRtIzQI/tjnY1KRzLRyASIHKMmr1SM303P5DEymktMhjuP0O3qQbWRt+GLImm8i8
pUpPK+oEVrUaQO/Fg/3wyEtajQjR5c8scqyLqAApavqeSa+MPmL9UXJRiTPwnzGcGTU9LQDDgX8f
lisg+PSJ57hjv/q7ew/fXBWdkxHpC3dn7wNXixKzfHZZPtP2UZh2Q0WBqh7YqH/Copcj5ZRYzami
KJ3u9/3+uIrWyc5gzavP911vYafjbgcD8cUMrPoy2ZeOPRQCq4ex/wDGjv1u/bAGMX/qLmoY1+0y
gKYg2oUKFit+OfwxFTl8rlY4RmpswrsCV1XweMc7GpQJtLWcmw1EUdtiPjGNxvCMeQzKxsc1mgTf
3a2/HnF3UzCWYImlSBAST/lHJ9vxxrmM9Pq3huTGS8Ogyw/+0gUnuev547OauaNXXAxFcd/FudEO
RaIEh5fQCRt7/OAwvB0OWlgKxZgxxlC2je1u+Pi9r6fOIN2YZqJIx5qGQSejW1st7etaJ2tt7/pd
CywfaX+yPm1tWsAWQ2x3O9DsPnAGzGSXLZdpBOZZejK2x0k3Z5boP7DACQNkQXnUPDmYwSqNtqsE
De+L6++ApDI8qiSCBJFy4LMrgW98k9NrO3Yd8NELm483nRNOgVRRsHTpAIvjm+w9vc4B587llgUn
76x+iI7leRuKoccg2fpgFlkMeXmycqyGydg5UHYkbV+fesACdWy8ybmGTY6dRNjvfwMA/Dl5oszS
KsyBltySNJvfc/ermxtfffFQpnJXnzJBmRooiQugelt6uuP2cSqjLLFLE8kpUugJSJjswA423P8A
wMQByMMrPpyuoBjp1BSaB5/S6xR6AiRmEcka5dGI0sd2sEE7g78A17fOIDsxmgzUssIDKqgEr6gu
1bdzfG22KKNI0XmxvIGHnAIAdQRgKBCjbb974il83k81nGkMjAlTpWJmVdF77+9V37e2Jhbr0g+z
xafLTzmCaQq6jYsfkRx7/NVFIWhVxl2ULOgpix52s87bb/N4CkmXhZZI4nQeUg2XYC/fk9PwwC1q
o8jNqb2YAtQs9P8Ab/Q4CQiR5nLKb/li31AEAnpt7b/XEGv4dF5cMkuaVJGbVYLFtIG+nfbf8Qfw
xQDLIIYFZtiygkl9IFVfHT+ld8QP5bLSZZpJgNMS/cjFXZ2/LBXOeOSRpNouzd0Tv+OAXy8jZvJN
HDE8ciN8WByLxUILlnfPeVNq2PrZfUR32684I7DKxy5MRRaEli1emIkE0L3urFEH277HBV8yuTzE
8rxiYlVFLHuJDsel1+G1DAUYwOI4o1k+zka3cjfajs1Gq/7wEhM4JjLFlhGyxrSKQSFPFn6HfY4K
d8KeISSR5jUJlBD6kCjbe/mttu31MpAc4sTZgaJWS+xsVjlY6wCWYK6pRkQbXiSFrT/hvw3L5nxn
7UIwBEA5HTV0/v8ATHXmeufVdu7UtY6MMvOy6Dz0JGCvnnjmaTNeMxRkB1y51MhH3iRwfaucSg4f
zMxEcrJ5cKsK0rpCm9yAB7jEGjKjtmZ2EkemJQploUBQPAFk2aFVuOcUeyyjMiWKeWfMSI2kOV2D
ezHdT889jgB5aUJC0oicRZdtDHzAHBLCwNv3vgLvHOIM03nCWAxs8cTGyVY70emwO4J3AwHsllbh
15FxIXHqR744IJ+L/e+AHHG2bzLRoQkcXocMSVNWBXS671vgDTzw+ZGjZcJCPQsv+ZWHXmwo3360
e2AYzWWDIkZJlYRqPWa1klgSW7jpdcC9sUL5jLSGJIppQ0Q9Mb1qYbDuOB7HjjEF84ViyggLaFUB
UIAFEgFtu9bX3PTAZs00eoIU0Rld0W1/DEATM8k5YBA+oNrG+wFc9tsBp+HRSxFm+1RmEpumv7or
muOdtj16YuAREE0hWOLzJELSFdq1UAKrc1+u9YgV+yzGQ22pl3ckg23FHfY8bHfjAGdIPOU6mjSJ
9TxAEseLN8DjABEK5eZHlMokZ2KBVOpTZokk7E0QNvffAeimkGZkkky5laJLW1o2Op6gUCfgYAYA
zBngiNRvZVDL92h1Fnk1gKZZYXy6NmNayajRVAOnU9ef3tgCDLnLzmVlSSpDIWG7EdLJBNm9ud6w
FY8tIcuWKISxLO7ttudt+/63gGdb5jLxRqTIi6VA3ILiyTd+/wCN9hgGoEDQLmJlZwSK2Hev1of9
4KJ4isn/AI7MvBmBGwCqukfd717nCj5zn5X83SzFq6k3vhEprwmVmDIjDXXX9dsVGv8Aw9ATmPNY
qJWkUo+vTp33/wDx/Df2xFdJC/2fMlpQY5kj9Shw2sUDt/u4BHY+2KAETJKpzMjpKxBVYWAcA7qN
uR7dPrgLQTNGk2VMEkuskEeYEeRiAOK9yePrtgJVJpYYMrFl7Dq0Rcj7pHIB323u/YdsRWrlvDW/
8ZcqGVlJG52NmyR+n0ws8J+ue8RDJOdMMilRY3oDHLHTURSqj0FAU0TthIlrt/4Zygy3hSyV65z5
hPt0/Lf646zxzvrRzD1jSOY/ijxA5Pw6aZCPMICoP9xNDBXDeGwzDMgyIsszkHchrJ43463jI3mi
C5bXloyJ4JCJAoLE3VAiujL+NYo94jknj0zkurTEsEAJJcnsTfDfr12wDTT/AGfw6NMwsjuSU/lN
VILBN78URgKqqSZb7JFCNDU6srGiN7sdKqr9h3GAvKnkZxBkwjhwI2iO+3Wq6ek3774AbZaKfyky
chR11KqM9MDfAHW+v16CsAVJIMmGj0xrIzsNcra9QB5oWBvvve94CnlQlpIpZgZIwRGzilpTsA3c
74AkbpCmvL2+W3VF8wlVLAjSRzV7/TAEjVirwuFiibex6hRXbeqAq9zzvv0wgyJ828ktx6wETTEh
HAsb183+WFBVyXnZJ80tGUNYjI6XQ2reze2AoI3kDTGKMrp2IZiFAuxXI4JwBYvsyZdtbRyiiXBc
6gNqA2oC63+MBVJI4ptUE0gaMkhdFamO1Cht9fwxAR1MCiCKyQpdpBIbBFnT9cUSHSfyTmwkbAma
UqT90il2/Afh84AAV1nB8uLLq60DrtV5onn1UK6dDgDyyhJdf2n0alqlpSKNgDcnr9BgF5IIpM6J
oQZFZ9LKTuo6HEBJZRJOVEaFC1sFX752I67n5wA54i0aLG+jzCQ41b6gTsR0+MBAmXyxDlwPM3Ek
lbjuQenB6fnQw0FyOU8xEnlU+WoIK6buq/Lb+mA01HlxNJCkS+ZQrRwa+6dxQBHTfAXTJz5vIeIQ
GAxySpqj1Pq68e1b1gPlniML5fPSwTgh420uLuiMIlTJogzIGWcFCoN3eKjq/ATDLlBBm61sNa6w
aBPx0r3/AAxI02Ypos3IwidlnjR2jTSAWY77X7Xtzv13xQskcwzOX1upJY6RquiOnXf7v5YDQfKD
wpY5VLZmZyQFYX0Ara66Dc4gZ8KyWZOZbzEjpzqZtWoovRa4vpfz1xZDXSqAiBQPSooA4tRifxDk
knyzyxoTKK2Xlh2xmxrXNeH+H5nNeN5bKT5eRYnbVIGFWo3I/KvrhIWvpVAL0HxioRzEg9VnbAfO
/wCJM02d8bihjf8AkZb1seabvXt/XCiYQpV8y6m5BphF0SdtTWBzW9UPvcYg0stLDGIoss7ebrCS
iNCxb0/e3HQk/gemLBEEE2aabMPmQJYgVjBAtqBFkfl/1gDKWyuSy5zKuUkjGqO6On/MBXQg9bqs
AHMRxR+HCRGTVS1pYitzt3HQ883gJyomjiTNGSKL/Mbvji/cn+uAvKTLnI4Xk1NmJf8AE2Po9j0P
Hb9MAPMvJEEGchYSRnXFKRz6hu2x9rH54BnPSebEsUkpoMfMoDavUAR2Nnc9RgJQJGxjjEPk0N2q
m9O99yN9q6juDgFM/mlSCPLZf1K1ayp/yixXvdfrgAPJ5RZkJ3BFMPvc0fg84g0MuVTLQwBmBicF
5KI5P3e42IPv+lGTnknGqV0URliAQBa/912wHvDlHmFiPSBp1bHSSD067X+ziQMxvM8uiRBSakZQ
D9/vtf8AtGKBwokq3PG0SbtSNsWIAPW+22APJHJOdOlfLMeqiaOkN0PxWx+OeQA8ErBFSV4i6ioi
TqYgddv3eArGrqYos1E2mIMzKouiRdkdvjscQVEeX0CcRt5bsdmkrT2o+/Pf88AXJZUtEkuss7Nq
J2IBA2Jrng8fpgJ1COLzj5nmyANEurTp/Ozz+ZwAskj5mSUsiVudTEC9+L9xX54DV9XmSCPMMqIw
uKKgQAONVcnc4oBE+YkgPlaXdVA1E+tSLs8e1fJ+cQa3ghly/hTzTea5Z9CIRvX7/TDVY/8AE38L
p4uPtcTiOcA1ts3ziJY5zMfwmPD/AAx83NP5kqLuij03/XFTGr4c0OX8PRXeMTmMX/LvSDewvptv
XfFU+mWyssMeXnkj+0tr0aDQ+76STV1QB/ZxALLtDllbKSl/MZiC8YorwL32v4vbrgNFMrHNMqLE
Y8yfSPMOosN9yNwRXWt8UdNDGmXiCjpye574oHNNWAUknSNGeRqHPOIK/wAOz/bsxnM3ppY2EUJ7
irY/oPxwG1M+lDeAwfF84uWyskrVpVTeA4HwrLjNGbzWLTSguDpAYvews9P6Yg3p4pMuxYiGWKE1
AzFdnXgG/YcddsURDK0AdpZolzOY3LspZgdR+g+du44wBocvB9mjy7UXkk8xme1oCxsQfnb3O98B
aCNmWVpF05qH0hWZTGinYC+w/DbbmiCgyyZuVXaaNNbaQGcb1yLNVsR35wDM4hcjJBml0HUzJSlT
/ps7UB074BeQxfZ1kWJTIsjUyEgruALAFUTf1r4wFZdb5iKSeV53KndGFMN736EijX7AOLHkhk2k
ESeYwup2Vy3HBNX+P98BaVzk8sj5gSAudUahTS/7Cfg/lgMyOGGaXSrtFbEuAfupd0Dz+ycBafLZ
uABiqyqD6iqmyBvuo/4xAfI5yGSQxTPHHrQLqZj37myD0PSsUS0beUEOiaByKJcM0fAodL34HTj2
BZvKyzl8qSG0UwDWA3BG/Tbv22xLkWTTBmeSeObLXqAIaJmJBIsEknnni+uKgGVlg2XMTOrpKHLM
gYs25az874BhYhQlyeZCyMN47vU5JIB3wCoYS5wS+YolVgTqO3ShuelHEAc4ziQRMfXtrBFU3UV3
o1eKHi32fJNG6xkhQDrHF8AdRv8AI2J9sApkwmXVi6sY2FBg1hCO/Qniu/GIIDZmd1bLBxJJSJTX
VHaiOwHTsT74DTMcIi0w5qJAqEtLYouwIXpsANx139sXBbzVy2mH7PJIYyQ72VGpd7H1JNnECxkV
ppBk5SiCQtMy7k7ih/u3vAdJ4ZKJPDpZKYaJZAQxBIJbVvXzhVYU/wDEzKjKcqSOhD8j8MMNCy05
8X8OzkcqKACU24NjEGN4cXzKeW0algNGp3ss+wNk/oN98VG8Mzr05meVA06jTKrAaGUV5YNdaB//
ACxQFMlm10OpMrTvZ1bMJATt87dqH6B1fh2RGRh/muZpyKeQ7/AHsABii+amCpd7YgxMz4vDGpeR
xpG5rDVYsniM/jDFYldctdElQbvYE7jr0/TE1HVfw3JDl4DlQVVhJsl71QFfO2LA/wCI5gxp5iAE
D7wJqxgrhfG8xmPE8z9mRGRCDRB22F89cQAyGXUStknUtJp28t7s1Y+n/OCNLyo4n+ylJc1EWDWr
ih6ipO3Pbf8AK6xQSZsycwueljZI4zpBRipC1sTX0+arAWa0zXmZbKJJLKSykj1KAK1E3XXn/vAL
5b0ZaZXiKIl610ErQP3S99SAPf64D3ibqGdISohQAot+mmJogfH1GALJKk2TWYade+pZGBBoEHbq
N7GKIAyUMaLJmSrTR0xiX0UNrrvYB26+2ILQLOwfJiMAqFqRSPWm3HTqO++AsctF4hAHdWjaO2dw
33hvub2J26cflgE81mzJFFl0kBTLHZbskngE8bCuO464CFzM2Wj8qXLxgT7ySMTZvoT8CqwBVm0q
Z8vHJoCeX3X69Otb9Pc4iokysGbZCYTDPVO8Y1A8++5/OuvXFxGfKZPD541mVSGpgqvQNdR2Ne2J
+A48QimzhnfLgxlRrXm6B3Ncj5/HDJTbBnyoySqz5ulRtY08Nx6get7AXXXscXEVjly76RmDp0MC
gKEqD1PNnjnp74KokDrGHTckGRBtwDuefyxBZ5W895MzRMbhXYEEqelV7CuD/TFHpMtGC+bmKeWd
kVCQLrgHfYYIKQmZyd2FYgQqFjuzR2442B/P4KFM+XlkKZdY1yyElmB/xD+pAPF9yeKqBnw9I4Sr
6qmk/lhCfUoO4PzyfwwgDnMvTy+XIojVQdDE9OQPexxt+GKDPLqggkkoXpVgUBJVRzud+19LG++A
JlDBONc0+7x6yVoNGbFi6u7OwGA1PDLh8NeGj/iMxJFXqFj8qH0xmtczWBmfC2Oc15YIsDDcML3v
piNZg03n5HweaGJD5rboVAO9jY/TFiUn4bG1v6YkiOYYuXXUGFiyOu1nqMVhoo8oyujLLE5hZ2pC
CAK6WLve/r0wG/4JkTHG2Zk5kY+UpN6F7/U2b98agdncKjAcjEVxf8W+LSZdIYorqSSmA6jtiDnv
/YzEgfVao+4o0D0Xt3+aOIjfysuXyuXyrwallZraNBs/r69uoHOwxQfKZIxtLHKqFSdSP54Fdb3P
Ow3r3wHsxns9nF+zRTG/SGLjm+enHOGqq2RhVYImjdniAeV4SfQpFbe5Fe/sRggMLsUEWSAcxSgB
DszUTs1EdaO3bFDWTaSGeSPOm1CrKdW51ntXO46/6fmwNLG+b8USPz5BCE1BQ5onnm9zZA9gBgM6
Vso8dxKVVJACxJ1MpO5I6/lzgCZdIsznmWAyDLMSAquCwu9yCeD1v8MBZVTP5xlzRfzEITdxe1Dg
d6PXn8wmSUtnmVjF5MJOjzoBwNzQIutj77/XAHy0HlyESBBl3twS2qMoDdbjn1XtxW/XALHLxJlx
LBM0sulRacjSBtq5B22PcCsALxHNlY81Brcyh10qCKY1RJra/wBKxAHw6xmol1hypBBA+t/ib3xF
0/mIG1SBoneKRVceWwayW+9pHfi/nvjSKzZCNVLZKxKHK6y4FizuAOOlYDxVfLgjiniKofMYGt7O
+x7Ak98BUZxpkKTRGaORQTwQLABG4Nbj5F4BNvDnVlbJM8bGyFY7rVcMOPg/jvhgDFKxkDx6I2sM
dPp0EdT+v1+MEaURd1ihkKPAhJ8xlO9C6N7jfeu2ADGUmQiCGQsXCroPqbY2T8iz+H1KOFjyx8qS
IIFGogH1Lv16Hitr5OA9BEJGfLswURaa1H+WGoE78/h784BbNZg+Q+TyqRqkq+pkYmgSCa+ePYWf
mUey0CanzLI/lQ1YrUWO2wA+vsKwg1plUaZ8rD/7Fo5B0jUON96vr+GKEWead8z5zOkMeoeWwHFe
kX16YbQWSNjk6nRImFbM4FqAdh2BJH4YgJksyFy8Il9Plx0rBbGqxyelX9b68YoZybmKN3nCpFOf
us1ULOkg9ev4g4iyj5kSR5gKq0irZ22rGXTZjnPEf/IZbJzfzAJsxOTGhN0pNfpviudTlz5CtkmQ
ToAuhLNekHn/ADXdmvf64qHIngy+YBjy762XSIFK7kKC1379fY1ijsoc1DJkFa9BjADKTRQgcHFI
wvEczLJI4izcSitqG4xm63PHIZqMzyI2Y1PEGKqTvdDc/wDOIzacyqS5Mil82cO9oN9Jrfp+d++2
KhnIKMvrzk8RZgxKerSAQbIO4INj/vAMsxczZx0t8wAyxugpqGy2Te9dOdvjASgCOc3IqmR1X7tH
ywK2ojcfBvFwRKpdIoVkiy+ckXVJ0LG9t+Af7HvWAWVfs580TyhhGdRWM2wIAofB69OOdsA3DMWg
VWgaZGopK63bLfN1837/AIBScZxy2XjKR+WWZZBaB1FfQAdOBf0wFDG86/YS8QdwDHIF++DuAeo3
A3O+2AXOXTL5dNX8rMhgqSLKCDe/6Efu8MB5HTPQ7RpDmtdHSG0oAAb4ob/XfAQJ0jyzZTMUdaFg
4A1gA7rR3BvjAWVTk1LI8k8clNrDaVNalKm+dv064BjMZfLkKoHkPmW0pptSQT/mF8XzYwGHE8be
Y7OwS/SQd9m67b9DxiBnJRSEHMAMIwTbppJ3FbAnkf19sARZI1SZJ2Pr0lD5ZG421D352+cUOvKA
URIVaORVZGqrHduvbYYBbMw62jWZCPMLM51AE+rYH3/e+AmEaVQRggNbKADpYAnv1r9enOAplXkb
NfaHLBS1aQD6q44P5YAc0nmIZMxAyh2C6Alaz77Ve57Vggnnvm3eDKsDGxAIkHpNjdRY2qhXvffA
VEaZWWaQyaKa0s/eI3A9+3A443wA5YmkQSOrK0hqTdtQ9wOvX8cRTedzBysEUaLepiwiYA3xzXQA
Dr2+MUZuUgBmjjjLyM1uxAq+d6xBsxh2zDwwKHjT1SOXo3ddPff6dhihaaaXNZYxx5YhgygmTYmg
b6Ac1t3P4BX/ANVZYQWeVZI2dX0arbUKKj8R33GAYycMUuUSaSWUtGCbAvVRvpuANtv+MAKDMJJN
JmJJmK5dNRRSb408mq5v2+mAbbJw56ON382IAsiIdINf7fi+ef6gtls7mWP2eZmhJUx6XN2w6jbb
Y79Nge+IIy0s6ZBczOq5nNSml83clRsaGAhXdC00jLITqDp5gY8dTVgDf64oHlly6ZFJw6CYal5N
NwRZBB/ftiCchJmZYiFzAhdn9cjiw1D1X0/fO9YqgRoJswD9sMflv6l4DitqrrfTEwHjhuKBM1Hp
VpAsaKSUY8AAi/f04B45XJ5b15me1zEhchkBU1Zrce/5jFxA5swUEOVdYXyrg7nfYmx97exY/fAe
MET+dKGIjyy1AVOoDqT7iztZ/pgEss5V1lYM2hyBIF1ddvgH9g8YBnKfZ8xnpo5oH8+QsS5P3TZO
35DAG0S5fKrFmS6rEjHZ9Sv6r0nrx0v8cBBmEVZbIP5hiUm1cbrvsL5OwO/0wFFE8eeOdzF+UPuu
GH3eOBtxZrbjALDLw5abKSx5jXIz2ylNhuOD++mAYaSGTP5nLzuywldQ1tZU7H8r2+o64Aef8gsB
l5PMTMOCxQWQFPQdKH9MBXOmeZVlmhYZWFksMNxuRte5BsflgBmCSPLSvHAWiQtSyerSNhQ/Fvw7
1cC02bEh8yNQg9SCMbhATdj/AK7YC+SWBpikqAoiUFau4H6fpgHYsuqSwtIW8sPsrtwSx4Nc7f8A
WLgDm1GYYzxREtqOpHs79dxW1isBfz2lJEGqRIyZSJTejbcXY4+N9zgCGf7RKjozhVbQylhq1EbE
E1+GAoCzZuJp2kVEUgBr9Vnj22IwFYJ4Chify/IWT+XdkAmwQb3G2ATyeakl86OUK4KkC+QAeAeg
wgtO5jzuXysfoizMkMkgB5Jv8sMQzrZ6jaijygEaR8c87VgEczm3ysjPDGgaNqBNm6F774LCuZlk
n8Ykkkc35hQAbADUAfx64mh7KEReKwRhQUdwpU8UdjgNJnMZyL/ekmjUs7E2Kqq6Yoz4cw7ZxlcK
yzHQ4O1i76YA0Mx+2tEY4zErSMqadlJWtu2ANKGXxqfKI7JDlwroq7UfT2/+RwAs1mJHg88neOV0
q7DAFRve52PfAUzErSBsySRJE6hKJpRY2HtvgGpR5vh7Z1ifNhlBTsLAY/iTeAfdwvhyFY0GuYqd
umnV+ZwGY8reGrGMrQLIWLEWfTwO1WScQCV9KiSNFQrpmAXoxJ+tbYK0fG8pl8tlmzMcKeYXDnUL
F6q69+uCBZXJQPnoyy7SupIAAA9OogexIwAPCEWXMO7DcNHEpr7qknj4oVihaZ2zcJknZmZJaXfZ
RTmgOORiBnwKGPMEvMoYoQwB4vff8sA7lMxJmJsvBLpMeY8xpBpAs0rf1/DFC+YzBjz65bLxxwJJ
IVYxLR24377fngEPD8zLDnY5Ub+Y7gFuosjfEBmhCvniHcaJZR030kc/Nm8UXzoXKNkZcuiI0kdu
AKDUR/bpgL5nPT/ZcsykKZoxrA4NEjjjpgIzemPKZTMaFZwNHqHQO1YA/ikETZ3IoYx/Ocq5GxIF
f3wFPCIVXxeTKElooySobfcUL7XRxBovFGdGWZAYpN2X4/8A8jFGXmcyzZOEBEVWkaIqooaVUGq9
+vfAZ3hq+cwMm40cdNjx8YgeEgbJ/aWijMiaNNg0NWx2+gxQ/l2fMxRPJI9vCHNNW+oj+n5nARDl
45c+YZdThpDGXZiWoELd96/pgM1s7OJZmVgpMpjOlQLAc4CUvLfYzERTyC1KitzR6e2ILqzSg5Jm
IiaXRsdwPTsPxxRHjSqmVSRRRqMV8jn52wH/2Q==
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment