U2NyaXB0Cg==

This commit is contained in:
lovelywcm 2009-03-11 08:36:57 +00:00
parent 1e2cf10439
commit a75ab263ce
3 changed files with 331 additions and 167 deletions

65
addChecksum.pl Executable file
View File

@ -0,0 +1,65 @@
#!/usr/bin/perl
#############################################################################
# This is a reference script to add checksums to downloadable #
# subscriptions. The checksum will be validated by AutoProxy on download #
# and checksum mismatches (broken downloads) will be rejected. #
# #
# To add a checksum to a subscription file, run the script like this: #
# #
# perl addChecksum.pl subscription.txt #
# #
# Note: your subscription file should be saved in UTF-8 encoding, otherwise #
# the generated checksum might be incorrect. #
# #
#############################################################################
use strict;
use warnings;
use Digest::MD5 qw(md5_base64);
die "Usage: $^X $0 subscription.txt\n" unless @ARGV;
my $file = $ARGV[0];
my $data = readFile($file);
# Remove already existing checksum
$data =~ s/^.*!\s*checksum[\s\-:]+([\w\+\/=]+).*\n//gmi;
# Calculate new checksum: remove all CR symbols and empty
# lines and get an MD5 checksum of the result (base64-encoded,
# without the trailing = characters).
my $checksumData = $data;
$checksumData =~ s/\r//g;
$checksumData =~ s/\n+/\n/g;
# Calculate new checksum
my $checksum = md5_base64($checksumData);
# Insert checksum into the file
$data =~ s/(\r?\n)/$1! Checksum: $checksum$1/;
writeFile($file, $data);
sub readFile
{
my $file = shift;
open(local *FILE, "<", $file) || die "Could not read file '$file'";
binmode(FILE);
local $/;
my $result = <FILE>;
close(FILE);
return $result;
}
sub writeFile
{
my ($file, $contents) = @_;
open(local *FILE, ">", $file) || die "Could not write file '$file'";
binmode(FILE);
print FILE $contents;
close(FILE);
}

View File

@ -1,5 +1,5 @@
W0F1dG9Qcm94eSAwLjEuMF0KISBDaGVja3N1bTogMG5hc3Q2RStnRFFuWno1dnNjY3E1QQohIExh W0F1dG9Qcm94eSAwLjEuMF0KISBDaGVja3N1bTogSG1qUWxqZ2llbXJNdEpMdy9ZeVBodwohIExh
c3QgTW9kaWZpZWQ6ICBXZWQsIDExIE1hciAyMDA5IDE1OjU5OjE2ICswODAwCiEgICAgIC0tLS1o c3QgTW9kaWZpZWQ6ICBXZWQsIDExIE1hciAyMDA5IDE2OjM2OjEzICswODAwCiEgICAgIC0tLS1o
dHRwOi8vYXV0b3Byb3h5LWdmd2xpc3QuZ29vZ2xlY29kZS5jb20vCiEtLS0tLS0tLS0tLS0tLS0t dHRwOi8vYXV0b3Byb3h5LWdmd2xpc3QuZ29vZ2xlY29kZS5jb20vCiEtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tTnVtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9uc2YuMTEwbWIu LS0tLS0tLS0tTnVtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9uc2YuMTEwbWIu
Y29tCnxodHRwOi8vd3d3LjFiYW8ub3JnCnxodHRwOi8vM2NjLmNjLwp8aHR0cDovL3d3dy4zY2Mu Y29tCnxodHRwOi8vd3d3LjFiYW8ub3JnCnxodHRwOi8vM2NjLmNjLwp8aHR0cDovL3d3dy4zY2Mu
@ -9,171 +9,171 @@ LS0tLS0tLS0tLS0tLS0Kd3d3LmFib2x1b3dhbmcuY29tCnxodHRwOi8vd3d3LmFib3V0dXMub3Jn
Ci5hbW5lc3R5Lm9yZwphbW5lc3R5dXNhLm9yZwp8aHR0cDovL3d3dy5hbW9paXN0LmNvbS8KfGh0 Ci5hbW5lc3R5Lm9yZwphbW5lc3R5dXNhLm9yZwp8aHR0cDovL3d3dy5hbW9paXN0LmNvbS8KfGh0
dHA6Ly93d3cuYW5keWxhdS5jb20KYW5vbnltaXplci5jb20KfGh0dHA6Ly9hbm9ueW1vdXNlLm9y dHA6Ly93d3cuYW5keWxhdS5jb20KYW5vbnltaXplci5jb20KfGh0dHA6Ly9hbm9ueW1vdXNlLm9y
Zwp8aHR0cDovL25ld3MuYW9sLmNvbS8KfGh0dHA6Ly9wcm94eXB5LmFwcHNwb3QuY29tLwp8aHR0 Zwp8aHR0cDovL25ld3MuYW9sLmNvbS8KfGh0dHA6Ly9wcm94eXB5LmFwcHNwb3QuY29tLwp8aHR0
cDovL3d3dy5hcml6b25hY2hpbmVzZS5jb20Kd3d3LmFzaWFkZW1vLm9yZwouYXRqLm9yZy50dwoK cDovL3d3dy5hcml6b25hY2hpbmVzZS5jb20Kd3d3LmFzaWFkZW1vLm9yZwouYXRqLm9yZy50dwou
IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmJh YXRuZXh0LmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQi0tLS0tLS0tLS0tLS0tLS0t
aWR1LmpwLwp8aHR0cDovL3d3dy5iYXJuYWJ1LmNvLnVrCmJiYy5jby51aypjaGluZXNlCmJlaWpp LS0tLS0tLS0tCmJhaWR1LmpwLwp8aHR0cDovL3d3dy5iYXJuYWJ1LmNvLnVrCmJiYy5jby51aypj
bmdzcHJpbmcuY29tCmJlc3Rmb3JjaGluYS5vcmcKYmlnbmV3cy5vcmcKLmJsaXAudHYKLmJsb2cu aGluZXNlCmJlaWppbmdzcHJpbmcuY29tCmJlc3Rmb3JjaGluYS5vcmcKYmlnbmV3cy5vcmcKLmJs
Y29tLwp8aHR0cDovL3Jjb252ZXJzYXRpb24uYmxvZ3MuY29tLwp8aHR0cDovL3d3dy5ibG9nZ2Vy aXAudHYKLmJsb2cuY29tLwp8aHR0cDovL3Jjb252ZXJzYXRpb24uYmxvZ3MuY29tLwp8aHR0cDov
LmNvbS9mZWVkcwp8aHR0cDovL2Jsb2dsaW5lcy5jb20KfGh0dHA6Ly93d3cuYmxvZ2xpbmVzLmNv L3d3dy5ibG9nZ2VyLmNvbS9mZWVkcwp8aHR0cDovL2Jsb2dsaW5lcy5jb20KfGh0dHA6Ly93d3cu
bQouYmxvZ3NvbWUuY29tCmJsb29vb29vb29nZ2VyLmJsb2dzcG90LmNvbQpjaGluYWdmdy5ibG9n YmxvZ2xpbmVzLmNvbQouYmxvZ3NvbWUuY29tCmJsb29vb29vb29nZ2VyLmJsb2dzcG90LmNvbQpj
c3BvdC5jb20KeWV0YWFpLmJsb2dzcG90LmNvbQp8aHR0cDovL3d3dy5ib29rcy5jb20udHcvCmJv aGluYWdmdy5ibG9nc3BvdC5jb20KeWV0YWFpLmJsb2dzcG90LmNvbQp8aHR0cDovL3d3dy5ib29r
eC5uZXQvc2hhcmVkL3ltY20zazBjeTgKYm94dW4uY29tCmJ1bGxvZ2dlci5jb20KCiEtLS0tLS0t cy5jb20udHcvCmJveC5uZXQvc2hhcmVkL3ltY20zazBjeTgKYm94dW4uY29tCmJ1bGxvZ2dlci5j
LS0tLS0tLS0tLS0tLS0tLS0tLUMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL2Nh b20KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
b2Rhbi5uZXQKfGh0dHA6Ly93d3cuY2FybmVnaWVlbmRvd21lbnQub3JnCnd3dy5jY2R0ci5vcmcK LQp8aHR0cDovL2Nhb2Rhbi5uZXQKfGh0dHA6Ly93d3cuY2FybmVnaWVlbmRvd21lbnQub3JnCnd3
fGh0dHA6Ly93d3cuY2RlZi5vcmcKd3d3LmNkcDE5OTgub3JnCmNkcHd1Lm9yZwp3d3cuY2VjYy5n dy5jY2R0ci5vcmcKfGh0dHA6Ly93d3cuY2RlZi5vcmcKd3d3LmNkcDE5OTgub3JnCmNkcHd1Lm9y
b3YKfGh0dHA6Ly9jZ2lwcm94eS51cy8KfGh0dHA6Ly93d3cuY2dpcHJveHkudXMvCmNoaW5hY29t Zwp3d3cuY2VjYy5nb3YKfGh0dHA6Ly9jZ2lwcm94eS51cy8KfGh0dHA6Ly93d3cuY2dpcHJveHku
bWVudHMub3JnCmNoaW5hZGlnaXRhbHRpbWVzLm5ldC8KY2hpbmFnZncub3JnCi5jaGluYXRpbWVz dXMvCmNoaW5hY29tbWVudHMub3JnCmNoaW5hZGlnaXRhbHRpbWVzLm5ldC8KY2hpbmFnZncub3Jn
LmNvbS8KY2hpbmF3YXkub3JnCmNoaW5lc2VuZXdzbmV0LmNvbQp8aHR0cDovL2Rldi5jaHJvbWl1 Ci5jaGluYXRpbWVzLmNvbS8KY2hpbmF3YXkub3JnCmNoaW5lc2VuZXdzbmV0LmNvbQp8aHR0cDov
bS5vcmcvCnxodHRwOi8vYmxvZy5jaHJvbWl1bS5vcmcvCnBzaXBob24uY2l2aXNlYy5vcmcKfGh0 L2Rldi5jaHJvbWl1bS5vcmcvCnxodHRwOi8vYmxvZy5jaHJvbWl1bS5vcmcvCnBzaXBob24uY2l2
dHA6Ly93d3cuY2l2aXNlYy5vcmcKfGh0dHA6Ly9jb2RlcGFkLm9yZy8KfGh0dHA6Ly93d3cuY29v aXNlYy5vcmcKfGh0dHA6Ly93d3cuY2l2aXNlYy5vcmcKfGh0dHA6Ly9jb2RlcGFkLm9yZy8KfGh0
bGxvdWQub3JnLnR3LwpjcmQtbmV0Lm9yZwpjdWlodWEub3JnCgohLS0tLS0tLS0tLS0tLS0tLS0t dHA6Ly93d3cuY29vbGxvdWQub3JnLnR3LwpjcmQtbmV0Lm9yZwpjdWlodWEub3JnCgohLS0tLS0t
LS0tLS0tLS1ELS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9hay4qLmRhaWx5bW90 LS0tLS0tLS0tLS0tLS0tLS0tLS1ELS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9h
aW9uLmNvbS8KbGlzdHMuZGViaWFuLm9yZwpkaXNjdXNzLmNvbS5oawp8aHR0cDovL3d3dy5kb2Ni ay4qLmRhaWx5bW90aW9uLmNvbS8KbGlzdHMuZGViaWFuLm9yZwpkaXNjdXNzLmNvbS5oawp8aHR0
b29rLm9yZy8KZG91YmxlYWYuY29tCnd3dy5kb3dubG9hZC5jb20vRnJlZWdhdGUvMzAwMC0yMDg1 cDovL3d3dy5kb2Nib29rLm9yZy8KZG91YmxlYWYuY29tCnd3dy5kb3dubG9hZC5jb20vRnJlZWdh
XzQtMTA0MTUzOTEuaHRtbAp8aHR0cDovL3d3dy5kcHAub3JnLnR3Lwpkdy13b3JsZC5kZQp8aHR0 dGUvMzAwMC0yMDg1XzQtMTA0MTUzOTEuaHRtbAp8aHR0cDovL3d3dy5kcHAub3JnLnR3Lwpkdy13
cDovL3d3dy5keW5hd2ViaW5jLmNvbS8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUUtLS0t b3JsZC5kZQp8aHR0cDovL3d3dy5keW5hd2ViaW5jLmNvbS8KCiEtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQplZG9vcnMuY29tCnxodHRwOi8vd3d3LmVkdWJyaWRnZS5j LS0tLS0tLUUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQplZG9vcnMuY29tCnxodHRwOi8vd3d3
b20vCnxodHRwOi8vZW5kc29mdHBhdGVudHMub3JnLwpldHJlZS5vcmcvCgohLS0tLS0tLS0tLS0t LmVkdWJyaWRnZS5jb20vCnxodHRwOi8vZW5kc29mdHBhdGVudHMub3JnLwpldHJlZS5vcmcvCgoh
LS0tLS0tLS0tLS0tLS1GLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9mZWVkcy5m LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1GLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0
ZWVkYnVybmVyLmNvbS8KfGh0dHA6Ly9mYXJtMS5zdGF0aWMuZmxpY2tyLmNvbS8KfGh0dHA6Ly9m dHA6Ly9mZWVkcy5mZWVkYnVybmVyLmNvbS8KfGh0dHA6Ly9mYXJtMS5zdGF0aWMuZmxpY2tyLmNv
YXJtMi5zdGF0aWMuZmxpY2tyLmNvbS8KZnJlZWZvcnVtcy5vcmcvCmZyZWVtb3Jlbi5jb20vCnxo bS8KfGh0dHA6Ly9mYXJtMi5zdGF0aWMuZmxpY2tyLmNvbS8KZnJlZWZvcnVtcy5vcmcvCmZyZWVt
dHRwOi8vd3d3LmZyZWVuZXQtY2hpbmEub3JnLwpmcmVlbmV0cHJvamVjdC5vcmcvCnxodHRwOi8v b3Jlbi5jb20vCnxodHRwOi8vd3d3LmZyZWVuZXQtY2hpbmEub3JnLwpmcmVlbmV0cHJvamVjdC5v
d3d3LmZyZXNobWVhdC5uZXQvcHJvamVjdHMvZnJlZW5ldC8KZnJpZW5kZmVlZC5jb20lMkZlJTJG cmcvCnxodHRwOi8vd3d3LmZyZXNobWVhdC5uZXQvcHJvamVjdHMvZnJlZW5ldC8KZnJpZW5kZmVl
CmZyaWVuZGZlZWQuY29tL2UvCnxodHRwOi8vd3d3LmZzdXJmLmNvbS8KLmZ1dHVyZWNoaW5hZm9y ZC5jb20lMkZlJTJGCmZyaWVuZGZlZWQuY29tL2UvCnxodHRwOi8vd3d3LmZzdXJmLmNvbS8KLmZ1
dW0ub3JnCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1HLS0tLS0tLS0tLS0tLS0tLS0tLS0t dHVyZWNoaW5hZm9ydW0ub3JnCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1HLS0tLS0tLS0t
LS0tLS0KfGh0dHA6Ly93d3cuZ2xvYmFsaW50ZXJuZXRmcmVlZG9tLm9yZy8KfGh0dHA6Ly96aC5n LS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly93d3cuZ2xvYmFsaW50ZXJuZXRmcmVlZG9tLm9yZy8K
bG9iYWx2b2ljZXNvbmxpbmUub3JnLwpnb29nbGUuY29tKmFuYWx5dGljcyp6aC1DTgpmZWVkcHJv fGh0dHA6Ly96aC5nbG9iYWx2b2ljZXNvbmxpbmUub3JnLwpnb29nbGUuY29tKmFuYWx5dGljcyp6
eHkuZ29vZ2xlLmNvbQp8aHR0cDovL3BhZ2VzLmdvb2dsZS5jb20vCnxodHRwOi8vd3d3Lmdvb2ds aC1DTgpmZWVkcHJveHkuZ29vZ2xlLmNvbQp8aHR0cDovL3BhZ2VzLmdvb2dsZS5jb20vCnxodHRw
ZS5jb20vdXJsKmN0PWNsbmsKfGh0dHA6Ly9nb29nbGVibG9nLmJsb2dzcG90LmNvbS8KLmdvb2ds Oi8vd3d3Lmdvb2dsZS5jb20vdXJsKmN0PWNsbmsKfGh0dHA6Ly9nb29nbGVibG9nLmJsb2dzcG90
ZXBhZ2VzLmNvbS8KZ3Bhc3MxLmNvbQp8aHR0cDovL3d3dy5ncHJveHkuY29tCnxodHRwOi8vd3d3 LmNvbS8KLmdvb2dsZXBhZ2VzLmNvbS8KZ3Bhc3MxLmNvbQp8aHR0cDovL3d3dy5ncHJveHkuY29t
LmdyZWFzZXNwb3QubmV0LwpncmVhdC1maXJld2FsbC5jb20KfGh0dHA6Ly93d3cuZ3V0ZW5iZXJn CnxodHRwOi8vd3d3LmdyZWFzZXNwb3QubmV0LwpncmVhdC1maXJld2FsbC5jb20KfGh0dHA6Ly93
Lm9yZy8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUgtLS0tLS0tLS0tLS0tLS0tLS0tLS0t d3cuZ3V0ZW5iZXJnLm9yZy8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUgtLS0tLS0tLS0t
LS0tLQp8aHR0cDovL2hhY2thZGF5LmNvbS8KfGh0dHA6Ly93d3cuaGVhcnR5aXQuY29tLwp8aHR0 LS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL2hhY2thZGF5LmNvbS8KfGh0dHA6Ly93d3cuaGVhcnR5
cDovL3d3dy5oZW1pZGVtaS5jb20vCm15d2ViLmhpbmV0Lm5ldAp8aHR0cDovL3RpbWVzLmhpbmV0 aXQuY29tLwp8aHR0cDovL3d3dy5oZW1pZGVtaS5jb20vCm15d2ViLmhpbmV0Lm5ldAp8aHR0cDov
Lm5ldC8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUktLS0tLS0tLS0tLS0tLS0tLS0tLS0t L3RpbWVzLmhpbmV0Lm5ldC8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUktLS0tLS0tLS0t
LS0tLQp8aHR0cDovL2kxLmhrLwp8aHR0cDovL3d3dy5pYW1maXNoZXIubmV0LwpocC5pbmZvc2Vl LS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL2kxLmhrLwp8aHR0cDovL3d3dy5pYW1maXNoZXIubmV0
ay5jby5qcC8KfGh0dHA6Ly93d3cuaW0udHYvCnxodHRwOi8vd3d3LmlubWVkaWFoay5uZXQvCnxo LwpocC5pbmZvc2Vlay5jby5qcC8KfGh0dHA6Ly93d3cuaW0udHYvCnxodHRwOi8vd3d3LmlubWVk
dHRwOi8vd3d3LmludGVybmV0ZnJlZWRvbS5vcmcvCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t aWFoay5uZXQvCnxodHRwOi8vd3d3LmludGVybmV0ZnJlZWRvbS5vcmcvCgohLS0tLS0tLS0tLS0t
LS1KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9qYWlrdS5jb20KfGh0dHA6Ly93 LS0tLS0tLS0tLS0tLS1KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9qYWlrdS5j
d3cuamFpa3UuY29tCi5qaXJ1YW4ubmV0CnxodHRwOi8vanByYTExMTMub3JnCgohLS0tLS0tLS0t b20KfGh0dHA6Ly93d3cuamFpa3UuY29tCi5qaXJ1YW4ubmV0CnxodHRwOi8vanByYTExMTMub3Jn
LS0tLS0tLS0tLS0tLS0tLS1LLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Ka2FuemhvbmdndW8u CgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1LLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Y29tCnxodHRwOi8vbG9nLmtlc28uY24vCnxodHRwOi8vd3d3LmttdC5vcmcudHcvCnxodHRwOi8v a2FuemhvbmdndW8uY29tCnxodHRwOi8vbG9nLmtlc28uY24vCnxodHRwOi8vd3d3LmttdC5vcmcu
d3d3Lmt6ZW5nLmluZm8vCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1MLS0tLS0tLS0tLS0t dHcvCnxodHRwOi8vd3d3Lmt6ZW5nLmluZm8vCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1M
LS0tLS0tLS0tLS0tLS0KbGliZXJ0eXRpbWVzLmNvbS50dwp8aHR0cDovL2NsZS5saW51eC5vcmcu LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbGliZXJ0eXRpbWVzLmNvbS50dwp8aHR0cDovL2Ns
dHcvCnxodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ZS5saW51eC5vcmcudHcvCnxodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbQoKIS0tLS0tLS0tLS0t
LS0tTS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm1haWwtYXJjaGl2ZS5jb20KfGh0dHA6Ly9j LS0tLS0tLS0tLS0tLS0tTS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm1haWwtYXJjaGl2ZS5j
cS5tYWlsMTYzLnRvLwp8aHR0cDovL3d3dy5tYXRodHVubmVsLmNvbS8KfGh0dHA6Ly9tZW1lZGlh b20KfGh0dHA6Ly9jcS5tYWlsMTYzLnRvLwp8aHR0cDovL3d3dy5tYXRodHVubmVsLmNvbS8KfGh0
LmNuLwoubWluZ2h1aS5vcmcKd3d3Lm1pbmdwYW8uY29tCm1pbmdwYW9uZXdzLmNvbQp8aHR0cDov dHA6Ly9tZW1lZGlhLmNuLwoubWluZ2h1aS5vcmcKd3d3Lm1pbmdwYW8uY29tCm1pbmdwYW9uZXdz
L3d3dy5taW5ncGFvbnkuY29tLwptaW56aHV6aG9uZ2d1by5vcmcKfGh0dHA6Ly93d3cubXBpbmV3 LmNvbQp8aHR0cDovL3d3dy5taW5ncGFvbnkuY29tLwptaW56aHV6aG9uZ2d1by5vcmcKfGh0dHA6
cy5jb20vCm5ld3MubXNuLmNvbS50dwp3d3cubXNuLmNvbS50dwp8aHR0cDovL214ZXhwcmVzcy50 Ly93d3cubXBpbmV3cy5jb20vCm5ld3MubXNuLmNvbS50dwp3d3cubXNuLmNvbS50dwp8aHR0cDov
d2Jicy5vcmcvCnxodHRwOi8vd3d3Lm15Y291bGQuY29tLwp8aHR0cDovL3ZpZHMubXlzcGFjZS5j L214ZXhwcmVzcy50d2Jicy5vcmcvCnxodHRwOi8vd3d3Lm15Y291bGQuY29tLwp8aHR0cDovL3Zp
b20vCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1OLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ZHMubXlzcGFjZS5jb20vCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1OLS0tLS0tLS0tLS0t
LS0KbmV0Y29sb255LmNvbQp8aHR0cDovL3d3dy5uZXdzdmluZS5jb20vCnxodHRwOi8vYmxvZy5u LS0tLS0tLS0tLS0tLS0KbmV0Y29sb255LmNvbQp8aHR0cDovL3d3dy5uZXdzdmluZS5jb20vCnxo
aWhpbG9naWMuZGsvCnxodHRwOi8vdGFpd2FueWVzLm5pbmcuY29tL2dyb3VwL3RhaXdhbnBvd2Vy dHRwOi8vYmxvZy5uaWhpbG9naWMuZGsvCnxodHRwOi8vdGFpd2FueWVzLm5pbmcuY29tL2dyb3Vw
Cm50ZHR2LmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTy0tLS0tLS0tLS0tLS0tLS0t L3RhaXdhbnBvd2VyCm50ZHR2LmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTy0tLS0t
LS0tLS0tLS0tCm9tbml0YWxrLgovb24uY2MvKgoub24uY2MvCm15Lm9wZXJhLmNvbQp8aHR0cDov LS0tLS0tLS0tLS0tLS0tLS0tLS0tCm9tbml0YWxrLgovb24uY2MvKgoub24uY2MvCm15Lm9wZXJh
L29zZGlyLmNvbS8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVAtLS0tLS0tLS0tLS0tLS0t LmNvbQp8aHR0cDovL29zZGlyLmNvbS8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVAtLS0t
LS0tLS0tLS0tLQpwYndpa2kuY29tCnxodHRwOi8vbmV3cy5wY2hvbWUuY29tLnR3LwoucGVhY2Vm LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwYndpa2kuY29tCnxodHRwOi8vbmV3cy5wY2hvbWUuY29t
aXJlLm9yZwpwZWFjZWhhbGwuY29tLgpwaGlsbHkuY29tCnBzaXBob24uY2EKfGh0dHA6Ly93d3cu LnR3LwoucGVhY2VmaXJlLm9yZwpwZWFjZWhhbGwuY29tLgpwaGlsbHkuY29tCnBzaXBob24uY2EK
cHR0LmNjLwoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUS0tLS0tLS0tLS0tLS0tLS0tLS0t fGh0dHA6Ly93d3cucHR0LmNjLwoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUS0tLS0tLS0t
LS0tLS0tCnxodHRwOi8vcGl4ZWwucXVhbnRzZXJ2ZS5jb20vCnxodHRwOi8vcXVrZS5jbgp8aHR0 LS0tLS0tLS0tLS0tLS0tLS0tCnxodHRwOi8vcGl4ZWwucXVhbnRzZXJ2ZS5jb20vCnxodHRwOi8v
cDovL3d3dy5xdWtlLmNuCnF4YmJzLm9yZy8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVIt cXVrZS5jbgp8aHR0cDovL3d3dy5xdWtlLmNuCnF4YmJzLm9yZy8KCiEtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL3d3dy5yc2Yub3JnLwp8aHR0cDovL3d3 LS0tLS0tLS0tLVItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL3d3dy5yc2Yub3Jn
dy5yc2YtY2hpbmVzZS5vcmcvCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1TLS0tLS0tLS0t Lwp8aHR0cDovL3d3dy5yc2YtY2hpbmVzZS5vcmcvCgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9zLnNjcmliZC5jb20vCm5ld3Muc2luYS5jb20udHcK LS1TLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfGh0dHA6Ly9zLnNjcmliZC5jb20vCm5ld3Mu
bmV3cy5zaW5hLmNvbS5oawp8aHR0cDovL3Jzcy5zbGFzaGRvdC5vcmcvCi5zb3VwLmlvLwp8aHR0 c2luYS5jb20udHcKbmV3cy5zaW5hLmNvbS5oawp8aHR0cDovL3Jzcy5zbGFzaGRvdC5vcmcvCi5z
cDovL3BvcnRpczIxLnNwYWNlcy5saXZlLmNvbS8KfGh0dHA6Ly93YW5neWk2NC5zcGFjZXMubGl2 b3VwLmlvLwp8aHR0cDovL3BvcnRpczIxLnNwYWNlcy5saXZlLmNvbS8KfGh0dHA6Ly93YW5neWk2
ZS5jb20vCnxodHRwOi8vd2VueXVuY2hhby5zcGFjZXMubGl2ZS5jb20vCnVzaW5mby5zdGF0ZS5n NC5zcGFjZXMubGl2ZS5jb20vCnxodHRwOi8vd2VueXVuY2hhby5zcGFjZXMubGl2ZS5jb20vCnVz
b3YKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t aW5mby5zdGF0ZS5nb3YKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVQtLS0tLS0tLS0tLS0t
LQp8aHR0cDovL3RhbnNpb2tzaW9rLmNvbS8KdGVjaG5vbG9naXplci5jb20KfGh0dHA6Ly93d3cu LS0tLS0tLS0tLS0tLQp8aHR0cDovL3RhbnNpb2tzaW9rLmNvbS8KdGVjaG5vbG9naXplci5jb20K
dGVjaG5vcmF0aS5jb20vCnxodHRwOi8vdGhlcGlyYXRlYmF5Lm9yZy8KY2hpbmEuYmxvZ3MudGlt fGh0dHA6Ly93d3cudGVjaG5vcmF0aS5jb20vCnxodHRwOi8vdGhlcGlyYXRlYmF5Lm9yZy8KY2hp
ZS5jb20KdGlhbmFubWVubW90aGVyLm9yZwp0bGRwLm9yZwp0b3Jwcm9qZWN0Lm9yZwp8aHR0cDov bmEuYmxvZ3MudGltZS5jb20KdGlhbmFubWVubW90aGVyLm9yZwp0bGRwLm9yZwp0b3Jwcm9qZWN0
L2NzYWkudHNpbmdodWEuZWR1LmNuLwp8aHR0cDovL3R0dGFuLmNvbS8KdHVtYmxyLmNvbQouZ292 Lm9yZwp8aHR0cDovL2NzYWkudHNpbmdodWEuZWR1LmNuLwp8aHR0cDovL3R0dGFuLmNvbS8KdHVt
LnR3Lwp0d2lzdGVybm93LmNvbQp0d2l0dGVyLmNvbS9hbW9paXN0CnR3aXR0ZXIuY29tL2JpbGx6 YmxyLmNvbQouZ292LnR3Lwp0d2lzdGVybm93LmNvbQp0d2l0dGVyLmNvbS9hbW9paXN0CnR3aXR0
aG9uZwp0d2l0dGVyLmNvbS9rY29tZQp0d2l0dGVyLmNvbS9zaGl6aGFvCnR3aXR0ZXIuY29tL1ZP ZXIuY29tL2JpbGx6aG9uZwp0d2l0dGVyLmNvbS9rY29tZQp0d2l0dGVyLmNvbS9zaGl6aGFvCnR3
VENoaW5lc2UKdHdpdHRlci5jb20vemVuZ2ppbnlhbgp0d2l0dGVyLmNvbS96dW9sYQp8aHR0cDov aXR0ZXIuY29tL1ZPVENoaW5lc2UKdHdpdHRlci5jb20vemVuZ2ppbnlhbgp0d2l0dGVyLmNvbS96
L2FwaXdpa2kudHdpdHRlci5jb20vCnxodHRwOi8vYmxvZy50d2l0dGVyLmNvbS8KfGh0dHA6Ly9k dW9sYQp8aHR0cDovL2FwaXdpa2kudHdpdHRlci5jb20vCnxodHRwOi8vYmxvZy50d2l0dGVyLmNv
ZXYudHdpdHRlci5jb20vCnxodHRwOi8vc3RhdHVzLnR3aXR0ZXIuY29tLwoKIS0tLS0tLS0tLS0t bS8KfGh0dHA6Ly9kZXYudHdpdHRlci5jb20vCnxodHRwOi8vc3RhdHVzLnR3aXR0ZXIuY29tLwoK
LS0tLS0tLS0tLS0tLS0tVS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnxodHRwOi8vYmxvZy51 IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnxo
ZG4uY29tLwp8aHR0cDovL2NpdHkudWRuLmNvbS8KfGh0dHA6Ly9wYXBlci51ZG4uY29tLwp1bmN5 dHRwOi8vYmxvZy51ZG4uY29tLwp8aHR0cDovL2NpdHkudWRuLmNvbS8KfGh0dHA6Ly9wYXBlci51
Y2xvcGVkaWEuCnxodHRwOi8vdW5pZm91bmRyeS5jb20vCnxodHRwOi8vd3d3LnVua25vd25zcGFj ZG4uY29tLwp1bmN5Y2xvcGVkaWEuCnxodHRwOi8vdW5pZm91bmRyeS5jb20vCnxodHRwOi8vd3d3
ZS5vcmcvCnxodHRwOi8vd3d3LnVybC5jb20udHcvCnxodHRwOi8vd3d3LmNhZmMudXNjb3VydHMu LnVua25vd25zcGFjZS5vcmcvCnxodHRwOi8vd3d3LnVybC5jb20udHcvCnxodHRwOi8vd3d3LmNh
Z292LwpodHRwOi8vZWFydGhxdWFrZS51c2dzLmdvdi9lcWNlbnRlci9yZWNlbnRlcXN3dy9NYXBz ZmMudXNjb3VydHMuZ292LwpodHRwOi8vZWFydGhxdWFrZS51c2dzLmdvdi9lcWNlbnRlci9yZWNl
LzEwLzEwNV8zMC5waHAKLnV3YW50cy5jb20KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVYt bnRlcXN3dy9NYXBzLzEwLzEwNV8zMC5waHAKLnV3YW50cy5jb20KCiEtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2MmV4LmNvbQp8aHR0cDovL3d3dy52aXN1d29yZHMu LS0tLS0tLS0tLVYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2MmV4LmNvbQp8aHR0cDovL3d3
Y29tLwp8aHR0cDovL3d3dy52b2FuZXdzLmNvbS8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t dy52aXN1d29yZHMuY29tLwp8aHR0cDovL3d3dy52b2FuZXdzLmNvbS8KCiEtLS0tLS0tLS0tLS0t
LVctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp3d3cud2FuZ3J1b3dhbmcub3JnCi53ZWJzaG90 LS0tLS0tLS0tLS0tLVctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp3d3cud2FuZ3J1b3dhbmcu
cy5jb20vCndlbnh1ZWNpdHkuY29tLwp8aHR0cDovL3N0YXRpYy53ZXRwYWludC5jb20vCnxodHRw b3JnCi53ZWJzaG90cy5jb20vCndlbnh1ZWNpdHkuY29tLwp8aHR0cDovL3N0YXRpYy53ZXRwYWlu
Oi8vd3d3LndldHBhaW50LmNvbS8KfGh0dHA6Ly93d3cud2V0cGFpbnRpbmplY3RlZC5jb20vCnxo dC5jb20vCnxodHRwOi8vd3d3LndldHBhaW50LmNvbS8KfGh0dHA6Ly93d3cud2V0cGFpbnRpbmpl
dHRwOi8vd2lkZ2V0LndldHBhaW50c2Vydi51cy8KfGh0dHA6Ly9ldmNoay53aWtpYS5jb20vCndp Y3RlZC5jb20vCnxodHRwOi8vd2lkZ2V0LndldHBhaW50c2Vydi51cy8KfGh0dHA6Ly9ldmNoay53
a2lkb3QuY29tCkBAc3RhdGljLndpa2lkb3QuY29tCi53aWtpbGVha3Mub3JnLwohLVdpa2lMZWFr aWtpYS5jb20vCndpa2lkb3QuY29tCkBAc3RhdGljLndpa2lkb3QuY29tCi53aWtpbGVha3Mub3Jn
cyBJUAoqLzg4LjgwLjEzLjE2MC8qCnNlY3VyZS53aWtpbWVkaWEub3JnCgohLS0tLS0tLS0tLS0t LwohLVdpa2lMZWFrcyBJUAoqLzg4LjgwLjEzLjE2MC8qCnNlY3VyZS53aWtpbWVkaWEub3JnCgoh
LXpoLldpa2lQZWRpYS0tLS0tCiEtLURhIEppIFl1YW4Kemgud2lraXBlZGlhLm9yZyolRTUlQTQl LS0tLS0tLS0tLS0tLXpoLldpa2lQZWRpYS0tLS0tCiEtLURhIEppIFl1YW4Kemgud2lraXBlZGlh
QTclRTclQjQlODAlRTUlODUlODMKIS0tRGEgSmkgWXVhbiBTaGkgQmFvCnpoLndpa2lwZWRpYS5v Lm9yZyolRTUlQTQlQTclRTclQjQlODAlRTUlODUlODMKIS0tRGEgSmkgWXVhbiBTaGkgQmFvCnpo
cmcqJUU1JUE0JUE3JUU3JUI0JTgwJUU1JTg1JTgzJUU2JTk5JTgyJUU1JUEwJUIxCiEtLURhIEpp Lndpa2lwZWRpYS5vcmcqJUU1JUE0JUE3JUU3JUI0JTgwJUU1JTg1JTgzJUU2JTk5JTgyJUU1JUEw
IFl1YW4gU2hpIEJhbzogemgtY24Kemgud2lraXBlZGlhLm9yZyolRTUlQTQlQTclRTclQkElQUEl JUIxCiEtLURhIEppIFl1YW4gU2hpIEJhbzogemgtY24Kemgud2lraXBlZGlhLm9yZyolRTUlQTQl
RTUlODUlODMlRTYlOTclQjYlRTYlOEElQTUKIS0tRGEgU2UgR3VvIEpJCnpoLndpa2lwZWRpYS5v QTclRTclQkElQUElRTUlODUlODMlRTYlOTclQjYlRTYlOEElQTUKIS0tRGEgU2UgR3VvIEpJCnpo
cmcqJUU1JUE0JUE3JUU4JUI1JUE2JUU1JTlCJUJEJUU5JTk5JTg1CiEtLUUgTHVvIFNpCnpoLndp Lndpa2lwZWRpYS5vcmcqJUU1JUE0JUE3JUU4JUI1JUE2JUU1JTlCJUJEJUU5JTk5JTg1CiEtLUUg
a2lwZWRpYS5vcmcqJUU0JUJGJTg0JUU3JUJEJTk3JUU2JTk2JUFGCiEtLUZhIEx1biBHb25nCnpo THVvIFNpCnpoLndpa2lwZWRpYS5vcmcqJUU0JUJGJTg0JUU3JUJEJTk3JUU2JTk2JUFGCiEtLUZh
Lndpa2lwZWRpYS5vcmcqJUU2JUIzJTk1JUU4JUJDJUFBJUU1JThBJTlGCiEtLUZhIEx1biBHb25n IEx1biBHb25nCnpoLndpa2lwZWRpYS5vcmcqJUU2JUIzJTk1JUU4JUJDJUFBJUU1JThBJTlGCiEt
OiB6aC1oYW5zCnpoLndpa2lwZWRpYS5vcmcqJUU2JUIzJTk1JUU4JUJEJUFFJUU1JThBJTlGCiEt LUZhIEx1biBHb25nOiB6aC1oYW5zCnpoLndpa2lwZWRpYS5vcmcqJUU2JUIzJTk1JUU4JUJEJUFF
LUZhbmcgSHVvIENoYW5nIENoZW5nCnpoLndpa2lwZWRpYS5vcmcqJUU5JTk4JUIyJUU3JTgxJUFC JUU1JThBJTlGCiEtLUZhbmcgSHVvIENoYW5nIENoZW5nCnpoLndpa2lwZWRpYS5vcmcqJUU5JTk4
JUU5JTk1JUJGJUU1JTlGJThFCiEtLUh1YSBZdWFuIFJ1YW4gSmlhbgp6aC53aWtpcGVkaWEub3Jn JUIyJUU3JTgxJUFCJUU5JTk1JUJGJUU1JTlGJThFCiEtLUh1YSBZdWFuIFJ1YW4gSmlhbgp6aC53
L3dpa2kvJUU4JThBJUIxJUU1JTlCJUFEJUU4JUJEJUFGJUU0JUJCJUI2CiEtLUh1YSBZdWFuIFdh aWtpcGVkaWEub3JnL3dpa2kvJUU4JThBJUIxJUU1JTlCJUFEJUU4JUJEJUFGJUU0JUJCJUI2CiEt
bmcKemgud2lraXBlZGlhLm9yZyolRTglOEElQjElRTUlOUIlQUQlRTclQkQlOTEKIS0tTGl1IFNp LUh1YSBZdWFuIFdhbmcKemgud2lraXBlZGlhLm9yZyolRTglOEElQjElRTUlOUIlQUQlRTclQkQl
IFNoaSBKaWFuCnpoLndpa2lwZWRpYS5vcmcqJUU1JTg1JUFEJUU1JTlCJTlCJUU0JUJBJThCJUU0 OTEKIS0tTGl1IFNpIFNoaSBKaWFuCnpoLndpa2lwZWRpYS5vcmcqJUU1JTg1JUFEJUU1JTlCJTlC
JUJCJUI2CiEtLU1laSBHdW8gWmhpIFlpbgp6aC53aWtpcGVkaWEub3JnKiVFNyVCRSU4RSVFNSU5 JUU0JUJBJThCJUU0JUJCJUI2CiEtLU1laSBHdW8gWmhpIFlpbgp6aC53aWtpcGVkaWEub3JnKiVF
QiVCRCVFNCVCOSU4QiVFOSU5RiVCMwohLS1XZW4gQ2h1YW4gRGEgRGkgWmhlbgp6aC53aWtpcGVk NyVCRSU4RSVFNSU5QiVCRCVFNCVCOSU4QiVFOSU5RiVCMwohLS1XZW4gQ2h1YW4gRGEgRGkgWmhl
aWEub3JnKiVFNiVCMSVCNiVFNSVCNyU5RCVFNSVBNCVBNyVFNSU5QyVCMCVFOSU5QyU4NwohLS1X bgp6aC53aWtpcGVkaWEub3JnKiVFNiVCMSVCNiVFNSVCNyU5RCVFNSVBNCVBNyVFNSU5QyVCMCVF
dSBHdW8gSmllIEppIFpoZQp6aC53aWtpcGVkaWEub3JnKiVFNiU5NyVBMCVFNSU5QiVCRCVFNyU5 OSU5QyU4NwohLS1XdSBHdW8gSmllIEppIFpoZQp6aC53aWtpcGVkaWEub3JnKiVFNiU5NyVBMCVF
NSU4QyVFOCVBRSVCMCVFOCU4MCU4NQohLS1XdSBKaWUgV2FuZyBMdW8Kemgud2lraXBlZGlhLm9y NSU5QiVCRCVFNyU5NSU4QyVFOCVBRSVCMCVFOCU4MCU4NQohLS1XdSBKaWUgV2FuZyBMdW8Kemgu
ZyolRTYlOTclQTAlRTclOTUlOEMlRTclQkQlOTElRTclQkIlOUMKIS0tWGkgWmFuZyBMaXUgV2Fu d2lraXBlZGlhLm9yZyolRTYlOTclQTAlRTclOTUlOEMlRTclQkQlOTElRTclQkIlOUMKIS0tWGkg
ZyBaaGVuZyBGdQp6aC53aWtpcGVkaWEub3JnKiVFOCVBNSVCRiVFOCU5NyU4RiVFNiVCNSU4MSVF WmFuZyBMaXUgV2FuZyBaaGVuZyBGdQp6aC53aWtpcGVkaWEub3JnKiVFOCVBNSVCRiVFOCU5NyU4
NCVCQSVBMSVFNiU5NCVCRiVFNSVCQSU5QwohLS1aaG9uZyBHdW8gRGEgTHUgRmVuZyBTdW8gV2Vp RiVFNiVCNSU4MSVFNCVCQSVBMSVFNiU5NCVCRiVFNSVCQSU5QwohLS1aaG9uZyBHdW8gRGEgTHUg
IEpJIE1laSBUaSBTaGkgSmlhbgp6aC53aWtpcGVkaWEub3JnKiVFNCVCOCVBRCVFNSU5QiVCRCVF RmVuZyBTdW8gV2VpIEpJIE1laSBUaSBTaGkgSmlhbgp6aC53aWtpcGVkaWEub3JnKiVFNCVCOCVB
NSVBNCVBNyVFOSU5OSU4NiVFNSVCMCU4MSVFOSU5NCU4MSVFNyVCQiVCNCVFNSU5RiVCQSVFNSVB RCVFNSU5QiVCRCVFNSVBNCVBNyVFOSU5OSU4NiVFNSVCMCU4MSVFOSU5NCU4MSVFNyVCQiVCNCVF
QSU5MiVFNCVCRCU5MyVFNCVCQSU4QiVFNCVCQiVCNgohLS1aaG9uZyBHdW8gRGEgTHUgV2FuZyBM NSU5RiVCQSVFNSVBQSU5MiVFNCVCRCU5MyVFNCVCQSU4QiVFNCVCQiVCNgohLS1aaG9uZyBHdW8g
dW8gRmVuZyBTdW8Kemgud2lraXBlZGlhLm9yZyolRTQlQjglQUQlRTUlOUMlOEIlRTUlQTQlQTcl RGEgTHUgV2FuZyBMdW8gRmVuZyBTdW8Kemgud2lraXBlZGlhLm9yZyolRTQlQjglQUQlRTUlOUMl
RTklOTklQjglRTclQjYlQjIlRTglQjclQUYlRTUlQjAlODElRTklOEUlOTYKIS0tWmhvbmcgR3Vv OEIlRTUlQTQlQTclRTklOTklQjglRTclQjYlQjIlRTglQjclQUYlRTUlQjAlODElRTklOEUlOTYK
IFdhbmcgTHVvIFNoZW4gQ2hhCnpoLndpa2lwZWRpYS5vcmcqJUU0JUI4JUFEJUU1JTlCJUJEJUU3 IS0tWmhvbmcgR3VvIFdhbmcgTHVvIFNoZW4gQ2hhCnpoLndpa2lwZWRpYS5vcmcqJUU0JUI4JUFE
JUJEJTkxJUU3JUJCJTlDJUU1JUFFJUExJUU2JTlGJUE1CiEtLVpob25nIEh1YSBSZW4gTWluIEdv JUU1JTlCJUJEJUU3JUJEJTkxJUU3JUJCJTlDJUU1JUFFJUExJUU2JTlGJUE1CiEtLVpob25nIEh1
bmcgSGUgR3VvIFdhbmcgTHVvIFNoZW4gQ2hhCnpoLndpa2lwZWRpYS5vcmcqJUU0JUI4JUFEJUU1 YSBSZW4gTWluIEdvbmcgSGUgR3VvIFdhbmcgTHVvIFNoZW4gQ2hhCnpoLndpa2lwZWRpYS5vcmcq
JThEJThFJUU0JUJBJUJBJUU2JUIwJTkxJUU1JTg1JUIxJUU1JTkyJThDJUU1JTlCJUJEJUU3JUJE JUU0JUI4JUFEJUU1JThEJThFJUU0JUJBJUJBJUU2JUIwJTkxJUU1JTg1JUIxJUU1JTkyJThDJUU1
JTkxJUU3JUJCJTlDJUU1JUFFJUExJUU2JTlGJUE1CiEtLVppIFlvdSBNZW4Kemgud2lraXBlZGlh JTlCJUJEJUU3JUJEJTkxJUU3JUJCJTlDJUU1JUFFJUExJUU2JTlGJUE1CiEtLVppIFlvdSBNZW4K
Lm9yZyolRTglODclQUElRTclOTQlQjElRTklOTclQTgKIS0tWmkgWW91IFlhIFpob3UKemgud2lr emgud2lraXBlZGlhLm9yZyolRTglODclQUElRTclOTQlQjElRTklOTclQTgKIS0tWmkgWW91IFlh
aXBlZGlhLm9yZyolRTglODclQUElRTclOTQlQjElRTQlQkElOUElRTYlQjQlQjIKIS0tWmkgWW91 IFpob3UKemgud2lraXBlZGlhLm9yZyolRTglODclQUElRTclOTQlQjElRTQlQkElOUElRTYlQjQl
IFlhIFpob3UgRGlhbiBUYWk6IHpoLWhhbnMKemgud2lraXBlZGlhLm9yZyolRTglODclQUElRTcl QjIKIS0tWmkgWW91IFlhIFpob3UgRGlhbiBUYWk6IHpoLWhhbnMKemgud2lraXBlZGlhLm9yZyol
OTQlQjElRTQlQkElOUElRTYlQjQlQjIlRTclOTQlQjUlRTUlOEYlQjAKCi53b3JkcHJlc3MuY29t RTglODclQUElRTclOTQlQjElRTQlQkElOUElRTYlQjQlQjIlRTclOTQlQjUlRTUlOEYlQjAKCi53
CkBAaHR0cDovL3Muc3RhdHMud29yZHByZXNzLmNvbS8KQEBodHRwOi8vczEud29yZHByZXNzLmNv b3JkcHJlc3MuY29tCkBAaHR0cDovL3Muc3RhdHMud29yZHByZXNzLmNvbS8KQEBodHRwOi8vczEu
bS8KQEBodHRwOi8vc3RhdHMud29yZHByZXNzLmNvbS8KQEBodHRwOi8vd3d3LndvcmRwcmVzcy5j d29yZHByZXNzLmNvbS8KQEBodHRwOi8vc3RhdHMud29yZHByZXNzLmNvbS8KQEBodHRwOi8vd3d3
b20KLnd1amllLm5ldAoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWC0tLS0tLS0tLS0tLS0t LndvcmRwcmVzcy5jb20KLnd1amllLm5ldAoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWC0t
LS0tLS0tLS0tLS0tCnxodHRwOi8vd3d3LnhhbmdhLmNvbS8KfGh0dHA6Ly93d3cueGluaHVhbmV0 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnxodHRwOi8vd3d3LnhhbmdhLmNvbS8KfGh0dHA6Ly93
Lm9yZy8KfGh0dHA6Ly9ibG9nLnh1aXRlLm5ldC8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t d3cueGluaHVhbmV0Lm9yZy8KfGh0dHA6Ly9ibG9nLnh1aXRlLm5ldC8KCiEtLS0tLS0tLS0tLS0t
LVktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL2Jsb2cueWFtLmNvbS8KbmV3cy55 LS0tLS0tLS0tLS0tLVktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL2Jsb2cueWFt
YW0uY29tCnxodHRwOi8vd3d3LnlvdXBhaS5vcmcvCnxodHRwOi8vd3d3LnlvdXItZnJlZWRvbS5u LmNvbS8KbmV3cy55YW0uY29tCnxodHRwOi8vd3d3LnlvdXBhaS5vcmcvCnxodHRwOi8vd3d3Lnlv
ZXQvCnxodHRwczovL3d3dy55b3VyLWZyZWVkb20ubmV0Lwp5b3V0dWJlLmNvbQpAQHlvdXR1YmUu dXItZnJlZWRvbS5uZXQvCnxodHRwczovL3d3dy55b3VyLWZyZWVkb20ubmV0Lwp5b3V0dWJlLmNv
Y29tL2dldF92aWRlbwp5dGh0Lm5ldC8KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVotLS0t bQpAQHlvdXR1YmUuY29tL2dldF92aWRlbwp5dGh0Lm5ldC8KCiEtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL2x1bnRhbi56YW9iYW8uY29tLwouemVuZ2pp LS0tLS0tLVotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL2x1bnRhbi56YW9iYW8u
bnlhbi5vcmcKemVuZ2ppbnlhbi5zcGFjZXMubGl2ZS5jb20KenVvbGEuY29tCgohLS0tLS0tLS0t Y29tLwouemVuZ2ppbnlhbi5vcmcKemVuZ2ppbnlhbi5zcGFjZXMubGl2ZS5jb20KenVvbGEuY29t
LS0tLS0tLS0tLS0tLS0tLS1PdGhlci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIS0tZG9uZyB0YWkg CgohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1PdGhlci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
d2FuZwolRTUlOEElQTglRTYlODAlODElRTclQkQlOTEKZmFsdW5kYWZhCiEtZmEgbHVuIGRhIGZh IS0tZG9uZyB0YWkgd2FuZwolRTUlOEElQTglRTYlODAlODElRTclQkQlOTEKZmFsdW5kYWZhCiEt
CiVFNiVCMyU5NSVFOCVCRCVBRSVFNSVBNCVBNyVFNiVCMyU5NQohLS1MaXUgWGlhbyBCbwolRTUl ZmEgbHVuIGRhIGZhCiVFNiVCMyU5NSVFOCVCRCVBRSVFNSVBNCVBNyVFNiVCMyU5NQohLS1MaXUg
ODglOTglRTYlOTklOTMlRTYlQjMlQTIKc2VhcmNoP3E9Y2FjaGUKc2VhcmNoP3E9c2FmZXdlYgpV WGlhbyBCbwolRTUlODglOTglRTYlOTklOTMlRTYlQjMlQTIKc2VhcmNoP3E9Y2FjaGUKc2VhcmNo
bHRyYXJlYWNoCgoKCiEtLS0tLS1VblNvcnRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t P3E9c2FmZXdlYgpVbHRyYXJlYWNoCgoKCiEtLS0tLS1VblNvcnRlZC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQoKCgp8aHR0cDovL2Rsc3RhdHVzYmFyLnByb2JvYXJkczQzLmNvbS8KfGh0dHA6 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgp8aHR0cDovL2Rsc3RhdHVzYmFyLnByb2JvYXJkczQz
Ly93d3cud3JldGNoLmNjLwp8aHR0cDovL21hb215Lm1vdGltZS5jb20vCnxodHRwOi8vY2guc2h2 LmNvbS8KfGh0dHA6Ly93d3cud3JldGNoLmNjLwp8aHR0cDovL21hb215Lm1vdGltZS5jb20vCnxo
b29uZy5jb20vCnxodHRwOi8vd3d3LmxhbmNza3kuY29tLwp8aHR0cDovL3d3dy5sZW5pbmxlZS5j dHRwOi8vY2guc2h2b29uZy5jb20vCnxodHRwOi8vd3d3LmxhbmNza3kuY29tLwp8aHR0cDovL3d3
bi8KfGh0dHA6Ly93d3cuYm94Lm5ldC9zaGFyZWQvcDF0MG5meHpyZAp8aHR0cDovL3d3dy5yZmku dy5sZW5pbmxlZS5jbi8KfGh0dHA6Ly93d3cuYm94Lm5ldC9zaGFyZWQvcDF0MG5meHpyZAp8aHR0
ZnIvYWN0dWNuL3BhZ2VzLzAwMS9ob21lY2hpbm9pcy5hc3AKfGh0dHA6Ly93d3cueXp6ay5jb20v cDovL3d3dy5yZmkuZnIvYWN0dWNuL3BhZ2VzLzAwMS9ob21lY2hpbm9pcy5hc3AKfGh0dHA6Ly93
CnxodHRwOi8vd3d3LndlZWttYWcuaW5mby8KYmVuZGlrZW4ubmV0Ci5iYWRvbmdvLmNvbS8KLmVj d3cueXp6ay5jb20vCnxodHRwOi8vd3d3LndlZWttYWcuaW5mby8KYmVuZGlrZW4ubmV0Ci5iYWRv
c3RhcnQuY29tLwp8aHR0cDovL2JzaWVnZWwuYXRoLmN4Lwp8aHR0cDovL3d3dy50eWNvb2wuY29t bmdvLmNvbS8KLmVjc3RhcnQuY29tLwp8aHR0cDovL2JzaWVnZWwuYXRoLmN4Lwp8aHR0cDovL3d3
Lwp3d3cubXNndWFuY2hhLmNvbQp8aHR0cDovL3d3dy5tZWV0dXAuY29tLwp8aHR0cDovL3d3dy5t dy50eWNvb2wuY29tLwp3d3cubXNndWFuY2hhLmNvbQp8aHR0cDovL3d3dy5tZWV0dXAuY29tLwp8
dWx0aXBseS5jb20vCnxodHRwOi8vdHJ1dmVvLmNvbS8KfGh0dHA6Ly9mdW5wLmNvbS8KfGh0dHA6 aHR0cDovL3d3dy5tdWx0aXBseS5jb20vCnxodHRwOi8vdHJ1dmVvLmNvbS8KfGh0dHA6Ly9mdW5w
Ly93d3cub3hmYW0ub3JnLmhrLwp8aHR0cDovL3d3dy5zYWx2YXRpb24ub3JnLmhrLwp8aHR0cDov LmNvbS8KfGh0dHA6Ly93d3cub3hmYW0ub3JnLmhrLwp8aHR0cDovL3d3dy5zYWx2YXRpb24ub3Jn
L3d3dy50YWNlbS5vcmcvCi5waXhuZXQubmV0Lwp8aHR0cDovL215c2luYWJsb2cuY29tLwp8aHR0 LmhrLwp8aHR0cDovL3d3dy50YWNlbS5vcmcvCi5waXhuZXQubmV0Lwp8aHR0cDovL215c2luYWJs
cDovL3d3dy5rd29uZ3dhaC5jb20ubXkvCnxodHRwOi8vd3d3LmRhaWx5bW90aW9uLmNvbS8KfGh0 b2cuY29tLwp8aHR0cDovL3d3dy5rd29uZ3dhaC5jb20ubXkvCnxodHRwOi8vd3d3LmRhaWx5bW90
dHA6Ly9vcmllbnRhbGRhaWx5Lm9uLmNjLwp8aHR0cDovL25ld3MuZnR2LmNvbS50dy8KfGh0dHA6 aW9uLmNvbS8KfGh0dHA6Ly9vcmllbnRhbGRhaWx5Lm9uLmNjLwp8aHR0cDovL25ld3MuZnR2LmNv
Ly93d3cubWl0YmJzLmNvbS8KLmF0bmV4dC5jb20KfGh0dHA6Ly93d3cueHlzLm9yZy8KZ2FyZGVu bS50dy8KfGh0dHA6Ly93d3cubWl0YmJzLmNvbS8KfGh0dHA6Ly93d3cueHlzLm9yZy8KZ2FyZGVu
bmV0d29ya3MuY29tCnNlY3JldGNoaW5hLmNvbQpkb25ndGFpd2FuZy5jb20Kc291bmRvZmhvcGUu bmV0d29ya3MuY29tCnNlY3JldGNoaW5hLmNvbQpkb25ndGFpd2FuZy5jb20Kc291bmRvZmhvcGUu
b3JnCmJvbGluLm5ldGZpcm1zLmNvbQp8aHR0cDovL3d3dy5yZmEub3JnLwplcG9jaHRpbWVzLmNv b3JnCmJvbGluLm5ldGZpcm1zLmNvbQp8aHR0cDovL3d3dy5yZmEub3JnLwplcG9jaHRpbWVzLmNv
bS8KZGFqaXl1YW4uY29tLwpjb21lZnJvbWNoaW5hLmNvbQpnb3BldGl0aW9uLmNvbQpjcmVhZGVy bS8KZGFqaXl1YW4uY29tLwpjb21lZnJvbWNoaW5hLmNvbQpnb3BldGl0aW9uLmNvbQpjcmVhZGVy

99
sendGFWList.sh Executable file
View File

@ -0,0 +1,99 @@
#!/bin/bash
#
# A simple script help to maintain AutoProxy gfwList easily.
#
# Function:
# Update local svn repository;
# Commit decoded changes(by others in your team) to local git repository
# with decoded message and authors name;
# Update "Last Modified" time;
# Update "Checksum";
# Commit your changes to local git repository;
# Commit your encoded changes to remote svn repository with encoded log.
# Usage:
# Initialize:
# $svn checkout https://autoproxy-gfwlist.googlecode.com/svn/trunk/ gfwList --username your-google-user-name
# $cd gfwList
# $git init
# $base64 gfwlist.txt > list.txt
# $git add list.txt
# $git commit -a -m "init"
# Normal Usage:
# edit list.txt as usual;
# $./synGfwList.sh "say something about this edit"
# Note:
# 1: You can use "git" to show, diff, log...what's you want;
# 2: "gfwlist.txt" is a fake file, do NOT commit "list.txt" to svn server;
# 3: Do NOT use any unicode character in the list, there is a known bug.
###############################################################################
# dependence
for cmd in sed date base64 gawk svn git
do
which $cmd &> /dev/null;
if [ $? -ne 0 ]; then
echo "Depends on $cmd, please install it first.";
exit 1;
fi
done
# get current revision number
oriLang=$LANG; export LANG="en_US";
curRevNum=$( svn info | gawk '/^Revision:/ { print $2 }' );
export LANG=$oriLang;
# save local modification
git diff > temp.patch &&
svn update &&
# get formated author and log information
log=$(svn log -r $curRevNum:HEAD) &&
log=$(echo $log | gawk -v RS='------------------------------------------------------------------------'\
'NR > 3 { if (NF > 10) printf "%s:%s;", $3, $NF; }' ) &&
# convert from base64
i=0 &&
convertedLog="" &&
while [ "$log" != "" ]
do
if (( $i%2 == 0 )); then # author
temp=${log%%:*};
convertedLog+=$temp;
convertedLog+=":\"";
log=${log#*:};
else # log, decode it
temp=$( echo ${log%%;*} | base64 -d);
convertedLog+=$temp;
convertedLog+="\"; ";
log=${log#*;};
fi
((i++));
done
# replace last ";" symbol to "."
convertedLog=$( echo $convertedLog | sed 's/;$/\./' ) &&
if [ "$convertedLog" != "" ]; then
# modified by others, commit to local repository.
# log format: author1:"message1"; author2:"message2"...
base64 -d gfwlist.txt > list.txt &&
git commit -a -m "$convertedLog" &&
# apply local modification
git apply temp.patch;
fi
# update date and checksum
sed -i s/"Last Modified:.*$"/"Last Modified: $(date -R -r list.txt)"/ list.txt &&
./addChecksum.pl list.txt &&
# save self change to git
git commit -a -m "$*" &&
# commit to remote svn server
base64 list.txt > gfwlist.txt &&
svn ci -m $( echo "$*" | base64 ) &&
rm temp.patch;