.lpbuild2, .UppBuilder: various fixes

git-svn-id: svn://ultimatepp.org/upp/trunk@4598 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
dolik 2012-02-15 19:12:59 +00:00
parent fd9b15c28c
commit d34a194cc9
6 changed files with 161 additions and 148 deletions

View file

@ -123,7 +123,6 @@ void Parser::Process(){
date, ~includes, ~libpaths);
String icpps, archives, prelink, postlink, custom;
Vector<String> dirs;
dirs.Add("$(BIN)");
for(int i=0;i<pkgs.GetCount();i++){
const String& pkg=pkgs[i].name;
String base=BaseName(pkg);
@ -216,8 +215,6 @@ void Parser::Process(){
liblist+=" -l"+libs[i];
for(int i=0;i<linkopts.GetCount();i++)
optlist+=" "+linkopts[i];
for(int i=0;i<dirs.GetCount();i++)
dirlist+=" "+dirs[i];
String target = GetEnv("TARGET");
if(target.IsEmpty()){
target=BaseName(main);
@ -228,9 +225,11 @@ void Parser::Process(){
}
}
}
if(target[0]!='/')
if(target.Find("/")==-1)
target="$(BIN)/"+target;
dirs.AddUnique(DirName(target));
for(int i=0;i<dirs.GetCount();i++)
dirlist+=" "+dirs[i];
fprintf(mf, "build: createdirs %s %s\n", ~custom, ~target);
fprintf(mf, "%s: %s %s\n"
" $M \"$BLinking$N $C$@$N\"\n"
@ -245,6 +244,6 @@ void Parser::Process(){
for(int i=0;i<pkgs.GetCount();i++)
clean+=" $("+pkgs[i].name+"_out)";
fprintf(mf,"clean:\n"
" $E rm -rf %s",~clean);
" $E rm -rf %s\n",~clean);
fclose(mf);
}
}

View file

@ -108,6 +108,11 @@ TARGET:=
# Add flags from based on mainconfig section (1-based index, set #
# to 0 to disable completely #
USEMAINCFG:=1
# Number of parallel processes to use (like "make -jN" option). #
# The JOBS variable must be used instead of -j option (as -j would not #
# work as expected). Default value is the number of cores (if it is #
# possible to detect) or 1. #
JOBS:=$(shell echo /sys/devices/system/cpu/cpu[0-9] | wc -w || echo 1)
# Ask for some additional details during parsing #
INTERACTIVE:=0
# Use colorized output, recognized values are 0, 1 or auto #
@ -143,7 +148,7 @@ do-build: $(OUT)/parser $(OUT)/brc.sh $(OUT)/color.sh
$m $${B}Parsing package $$C$$pkg$$N $$B...$$N; \
$(TIME) $(pass) $$color $(OUT)/parser $$pkg; \
$m $${B}Building package$$N $$C$$pkg$$N $$B...$$N; \
$(TIME) $$color $(MAKE) -j 3 -f $(OUT)/Makefile && \
$(TIME) $$color $(MAKE) -j $(JOBS) -f $(OUT)/Makefile && \
$m $${B}Package$$N $$C$$pkg$$N$$B finished ...$$N; \
done; set +e

View file

@ -445,7 +445,6 @@ String FlagDir(const Vector<String>& v){
s+="."+r[i];
return s;
}
class Parser{
Vector<Upp> pkgs;
String main;
@ -474,8 +473,7 @@ public:
for(int j=0;j<dflags.GetCount();j++)
if((pkg==0||pkgs[pkg].accepts.Find(dflags[j])>=0) && dflags.Find(id)>=0)
return true;
if(pkg==0&&id=="MAIN") return true;
return false;
return (pkg==0&&id=="MAIN");
}
bool sMatchAnd(String& s,int pkg){
@ -568,7 +566,6 @@ public:
for(int i=0; i<flags.GetCount(); i++)
p+=" "+flags[i];
printf("%s\n",~p);
Vector<String> dflags;
for(int i=0; i<flags.GetCount(); i++)
if(flags[i][0]=='.'){
dflags.Add(flags[i].Mid(1));

View file

@ -11,6 +11,7 @@ additional parser output formats.
void Parser::Process(){
DUMP(flags);
DUMP(nests);
DUMP(dflags);
printf("packages:\n");
for(int i = 0; i < pkgs.GetCount(); i++){
printf(" %s\n", ~pkgs[i].name);

View file

@ -1,6 +1,9 @@
#!/bin/sh
# This script compresses the parser and embeds it into
# the Makefile, using Makefile.in template
#
# Trick to hide the silly warnings caused by windows line ends
file $0 | grep -q CRLF && sed -i 's/\r//' $0 && exec $SHELL $0;
echo Updating Makefile
@ -25,10 +28,13 @@ echo Updating Makefile
cat color.sh | gzip -9 | base64 -w74 | sed 's/.*/#%&/;'
} > "$MAKEFILE_OUT"
# fix line endings
sed -i 's/\r//;' "$MAKEFILE_OUT"
# little trick to ensure Makefile is always "rebuild"
sh -c 'sleep 2 && touch Makefile.in'&
exit 0 # comment this line out to see compression statistics
exit 0 # comment this line out to see some compression statistics
stat() {
printf "%s %5i -> %5i %3i -> %3i\n" "$1"\

View file

@ -108,6 +108,11 @@ TARGET:=
# Add flags from based on mainconfig section (1-based index, set #
# to 0 to disable completely #
USEMAINCFG:=1
# Number of parallel processes to use (like "make -jN" option). #
# The JOBS variable must be used instead of -j option (as -j would not #
# work as expected). Default value is the number of cores (if it is #
# possible to detect) or 1. #
JOBS:=$(shell echo /sys/devices/system/cpu/cpu[0-9] | wc -w || echo 1)
# Ask for some additional details during parsing #
INTERACTIVE:=0
# Use colorized output, recognized values are 0, 1 or auto #
@ -143,7 +148,7 @@ do-build: $(OUT)/parser $(OUT)/brc.sh $(OUT)/color.sh
$m $${B}Parsing package $$C$$pkg$$N $$B...$$N; \
$(TIME) $(pass) $$color $(OUT)/parser $$pkg; \
$m $${B}Building package$$N $$C$$pkg$$N $$B...$$N; \
$(TIME) $$color $(MAKE) -j 3 -f $(OUT)/Makefile && \
$(TIME) $$color $(MAKE) -j $(JOBS) -f $(OUT)/Makefile && \
$m $${B}Package$$N $$C$$pkg$$N$$B finished ...$$N; \
done; set +e
@ -212,141 +217,141 @@ parser-clean:
build do-build no-package-specified
### PARSER CODE (gzipped and base64 encoded) ###
#:H4sIAEZDOE8CA7Qb/VfbRvJn81csKgEJC9uk79orRuQocVre8fX4aJMCl8qSDAqypEiyCU3gb7
#:+Z2Q+tZNkhfXd9fYm1OzszOzvfu/kujL1o4gdsexKHeeF3bneWvlNjXvGQBtWhOLjXP/MiC+Ob
#:KgigicLhzFiY4NBSEYzTyC2CbS9y85yd7yyFcRTGAZsmoc+OBr8NTs1zllufl1rhyKS/W6MUqB
#:TwVfhBltnG4PT0+HSLnSXjoLgF+qy4dQuW3yaTyGdxMA0yduumaRAHPvzI1Uen07mKDasPKINP
#:YWFu4s/Hpcd+E1v8x2+BVyQZMhMDhfCvwHajKPFg3fk6S/tL6WQYhd7WUosDmtYWApk9y2YESL
#:9S+JOJ/z6fBgTx0uo/LrWe5DK2+D+5qkerhMSQpV+CYi+ZxIVpeUmcF7VVWVBMspj41tadr7Ik
#:DTIXCF9em4glthrXpZfxtbaOU2hczafq6wB01/dNOkM8TGBjxyGxWAyGWlIU63wMz0VgWDdB0c
#:y0jfPttsXO+UlJjIqTTxb7zMQaIuV86jMFdxGHHydBCT3lnADLaZI7b8LYN6dEFZiDkR0Hjklt
#:AQauNY4Q+1RwgRhotYaZi4C0Fc4TIUKn1w+3SfYh7AGnkNDUcdLL8FpRCpHIY0loY5MTIXsQEk
#:J0URBXBCm/NXowpFPEyRYIMbQ2dp7OTdppC2cJUFBNmcPM83UrC7i+pjZMriNUMjLPLVpEM2LR
#:4xIY4xQsRen89vlOqRKOkIk2BVLnNsYt6oxcBgPWvVs3qxoRnwNr2KobQArGn/mT1DQMC878Uc
#:FycvxjFfwGLFWweSe1rBlYTjbnREpYQEt4nxQTM0Y4yoLATMkEOfcVU+DYKwYx36SGSRKx/Xww
#:TosHcxacNRvyOpyWw3rsyxcGbMOBADc0gij13Um2nubiVgzhUgnONBzzuaoslZKvK4B2Ig1LS2
#:g8IyUQNezUz6rGisSzDGLwxiloLQDNR6MxU0HUhEbwQ+a3FwXu152zrhoM7alU1b7wFqWbfu5R
#:q/NtEnJ7dmPoCkoNhKWCEYGkPpuXs7hj1mbodlp8kVuE3nvPzYttkv+OWToHjrlNKLhz4CF7md
#:MYB+NxMgVJtBGOpGlzWN25Q9DOuZNr2hiQfNZ+ns3rywZG00ucvEYU5Wd7Ewd6z2O1rqLcNzMz
#:ZcsOKhr5ZtrMupekD6VacFm0pMbgb9wKAtVCgUYdhbCXjFM3C6p0bSkfZ2NTxeESBUy8Arox1+
#:4cnTukKFLb81pAOwA5auiZp2Ms44w6BohV4Q6GuY0NS4Q3jG2O41XDWy201eJnzchljEa1kaS4
#:zKQmOBU9qMZbnN/ApSoEYsCUEmiHXAbo7RcwKGLUYehrXh10LStsVlHKm+K2lLvGuK6rG7RQpB
#:kwtN0Tcbua1TJjkGVJtsX246kbgfOBs3YhwQ2ynBUJ8rLMU1ctd2099oXWEQ00uh3OFVtdFfzt
#:9EgKnCk+BLG4JfdI6k+6SJ4PPuDvZssac8MCHO3NiknJlWD9XvpgktGj4QmJoc4JxGhmaGNrV7
#:01Te5CyZeAkTCIfZkjKK9Q83bRbS7PQQ5lt6QiYj2egly8/dzFIEuR6P498nCoYjsigwA4cKwO
#:TgL2JS1r/0beSswA0JFu4EmwvbQk+D0NXP83N4KMV4UFm8zYD6JwvIlit9e0kZd8RJZajgMBS1
#:qFYfSVGWR9Uf7chamD3vH+NowC08wvcQSsXeDHrIQPYU4iSJSD2873Ly3US/G97JBm4u92G7BS
#:SOqgzeEQniYF84/OyI3yoM+ZvOwBvbUrg7jWlnBz+AjfRTYJuDrp3sUTnh6dRR88cp95IicHrO
#:uevgf1RcybH5FlHCOq+OFdbkCgWEYtvoKRIUScu77EtO2YH1/1tmCr5BWKMCZ2WhlqwronHODI
#:/GghB2LbOCwEn5EiLtHW92ADk3HlOHWHCSl2mFARIEOA9JZiRshMaYwYpyDgOL2aCKWZCkZKOY
#:oBcQzIXRBPxuw4LT4fHR8NbHZ2Mhi8hr/2/xjArJw8Aw8SQHl2cfTvo+Pfj2x2dGyzd4MzhhiA
#:04mHUSAKgAuABpsoSpWLwfOB43DjGxhDICisAcBEepDRazLaz8+SSeYFJkKtspEUB1Z4ow7i6a
#:jIttZZEzJZhmmr3KvUMEE9+FSAVMRqFA1At0nDqrEG4DplZicDDoxiDCySKLkPMpN/croMv9Rx
#:GF6aGjx/X2ph7gfqVpkPvwbgeYunP30S87yN0kGBOjTccNAsACGwWSYbUXjfgGGYNeLA4WfqGy
#:XjZ1A+3ga5Wcl59QNhUPvq58HC0sRzSku4wdLvte6aav4IZQQt3C+C8WelB/e3VPKKrxDm4Gs8
#:KdxhFJQajpESORfLsQWEI6bQ+6q6HiSuD4DaLmyt6GLrd8GDLYtngZBKaMadtPQIuQ2AFk8yS7
#:fI1ijU171idTcavMm9aAtnHEoEtPylV35PI/WN8q74VYfQKo/K017MNsi5tYRXxNNHcohLTghl
#:kbOWYAYWT6ONDQ5DKROSR+UpPS3PkvkfSF9tuGdLL9bg2BDcTziHQrarbOxMO9Q5okXjjkAnhQ
#:UjeO4wUkbX3MaoSbNSJzkUp8KjI4qY9iVAn6Hl4px+dvPgCDxPU4knPVuuObXuHKeWl0Elr3gx
#:jdbrMPtfkKJsoUKrZyMEp1XNqtACyKNXaY4okGkZB9nD8HKz1+thH+7N/sFgnY2cEeROsfk0im
#:0jMyQ3o2reQj0YLVNZHmEza2SRgsVtB9Jd1zeH9qaN2O0RP6C2M8S/u12suhj877Jb17tD+8wy
#:sEgWjtMoGAcxZsZJzO55uzkBWkEAOWeBSJxMbD+2KsecUaJWlQS4qkE8rZhTXI3wmJGVUklN4+
#:Lk5D3tOm07qJ86dObcQLUACCl3knRfZVt5X/dyF2n6uRpn/SD3sjCl1MAPs74ej2uuCEcRjME+
#:7vDPYeZm4LFc3x9F7g04M0j5gQ2bTfKAalO6AAAZTvIiGZcIOf0d5npeAO4QAEY3d/Tn1GaEqo
#:RFbdlhI/gTB5dasANqEVYSAhqtqlQKp+feBAiK+zTlt/3clXallylYXoXjzgvSfo0F9hn1WpKw
#:Ocj8hhSQXGUTq9o2RyYdZ0JpBy4loHq7Qaz8zEsvdCcQ6Cr9grJ+xVgYuXASprAeMgDNxrh7J0
#:upJ9vCdDZF3xrgMIUewdl6JjcYtDxIiwfHbyhPXqZEGfPk/pql+2oEo9z/s4wHy1mnbH3Couwy
#:0+I2JNfLKpaJxBk+ud/XU2qRcHAazORhBJJ0qn3L/JyT/egsf+yroBGJpFug92qNF5SN0IxVcl
#:h/Qz/I1+CJCmBqwaFPw6umSzyQo93DwfvD3bfXWpD27n1gDaV875sIaTMdlDfyAAaYNrqGtnBE
#:4Uqcs3l0cXAw0xyB/IhYa8yRWmD5eBVAEJAg8Qyhu/bKMLaAIHYI5RT8BNrwp7az1gijJuKQky
#:qMKTOEmc4EMloOj9pEvrx05aQcI013Hnm6sjxa3DE54RTYi5zc8Qj25i9fxYbNniTxmcZJrQNS
#:0XZMHUrbKbXdVNkbOCyDu8LcsIVTtMAMEBAz8Qog+kqDu8wFMORJDeVT50KSczRKlzsXkHtiQ7
#:rkuXDoqQ3usOfCCD9uKI9u8WBaMUEtOzW0mGJY0vIrGYVpXF19/+OP4uDFFZyw+VxL6HAUVefK
#:MPqLKPJIwqVjSav3E5FTijhDqZ6WyVmC+pykbS6xOBlGYfGX2lq3y8KbOMkgDwCLAy28X7R67I
#:IUk3gU3uicih8tjITz+BR6quFiBh4a00au8IpMgGvDjpQ0Epj+jwh8q9zQUsbhX8H7PIWcCdAQ
#:FhiFA6cuArfTr6yFP2pL9/8YLFiJqYM6KqUSmFawkdg2L/braT5bk2Kh6JgH2JPFYKyipJLYes
#:5bWz0MXraqZZSTKbL5yCvsFtk8MRGbdVlphdQcFJq0dAxSZPMQqM1qi0sBiDpGlWLcT6t5lIXq
#:zIysUhqiXuLiVvun3I5UcmRVsH6rfvE0s/Q49dJ4tjiulIJ8uVYPztTDDdXzbJHcVCbnMzVypU
#:peUCcvqJSrtfL8alkdkvhLlbkzVbOAUFVvtYKuyl1WVbSiErNHXpSoyFm/zKoUhbyzk4IzNaWl
#:2PV8ip5tCEXQchc9mZ260RzzwhcXbqQvQ3bJ/4nnITAt3gGpsvgNRBEojc3m/I74qdUxmDF2uz
#:mViBAj8yCjGjFPMigLs454xzHV+ZhpJ04bmokZKeNUdBAxttCCD85mn32ormDt9geuW/XG99P0
#:8sO1TPdD5wNdcwmJ4v0dz8HDa9Wy86ydnlBTGG9vXjs4zdMgrm6ULPMpr3JnlgMoFezl3jZhb1
#:nD3vK2Y3SMtkBddi0e5VOREzcDQZbChnR8h6V3VBsKchhKZ15hqVOhjFXUkzaTJSpkWDlPx8AV
#:Ii5+18WESoq28r5P7HuWfp0KRcYOWKBLNYbHtuH3X2sUH8XMrjbzB5/hRvt+TYPqaVA/rYlOAQ
#:8xh27h3aL+aR1CSpzubmQvU/N3y8I5q3cM5fLcxiX9mSWmyjmI4BCNnFYdZ9oaPXOwROYgiAy1
#:zDwvCzmdDxkd5L1Er9Q3EmxO94CWvJjknk62Wf0GvzTbzOP06UR5Ohn6lv6AS7Ig1fADMPFhm6
#:uArosfyltiEzbvOL0vX1DFLuGP645MG4kCXwymxAnBCfqz9MkZ1sUwEqhXV0PfcYzD3f0jY4bT
#:2l0E3YdqOrELNJpVonaOtdPnYmdC7r1ri1/JUQhbXtM+zLVanre6OpP6rQp9a6SGEhlqOxk27A
#:KU7FmbwN3W96Dx8eXLDGtfFrIGsPNZG0AIgCxAuHuVD4B3qJseDHWou7/syPa+pvZq1nHeDc76
#:9Uv2ek4AjOKKagN9SaUCO9j1sFiuLg7lLa1pGTwBKOkJcnXFe1xabOWUs2km/Kx3Cb//Ojhi/O
#:HvFpTcWGc/yX001tklm8NXwOjW0fHsSVAeAGb5OkjzerOlFD8aJrc27NnhhLI5jg4RU9MGquMA
#:HQmtoHyuwxt0dze2aNAgbC1eTGbfkxCiDhbHDREMeZLKUwJCPLOJrt7TEmnShJipwJZXB1XKky
#:aCUkQTkRGUgRf5EK+JK2mLdosktdmuCTgLRuGnmd7gV5KTz7X9T8W2xUYzCO7MaHPc7ancZ1Oj
#:TZw+IkKTzU2dlcnY490YbJUbF2cDdJ57b34xbGPTUK+C6ODz3HPjkfkES2zjhW/Yq7FVul/0ch
#:2qrcuNOEJ56g/Mf3ezWKg385Mgj9cKKP4gIS4SNgyYS2mHbH91RKdJkFCFjezaq+YqkAgy1yvC
#:aaBtaf/ofHC6u3e+/9sA9tQzgCnYmXzXs6wtEmE7duJX8cbmFs/i1KWrqUN+lk3RORsXBYTYtn
#:E4iYoQM1felZhkdMORM3fqhhHedtqw/QjvQJI4kE/oZTopah56WRFuzyFYPkhWRBl7EVps7UW+
#:tkV/ohghobSfdBSoVPqAzISriNYttkelG0/1mIn/cAHkzdyc5XBMgSzdwSdEYV5Y5R4kkndQq4
#:pNYuJ++cK/3kKOKoUPq4oNTFlcbEi68+ixyyvjyiCMVtmFHo2iSX6Lj/rVW8HhZHT58h8/8Fwb
#:u+25CUM2gzE4g8IPY9mNxDdf9NoD5q3yWTC3AVpDNsDACGTFGYtSsboZ0EUA59LAmpDrFQCVaV
#:6MWSuVCTHbZvN0Sr5krBxXfC1NkOZ5qZfavHVJTy8d4yKnDja17hqa1jM5G5PKlHInw/MyXqDI
#:sxGBKW1y8768YHo+JZlrqs54RxbhIgek5oWAEO2F8qSlREpQkQPO+tla4Chd7XMTWWQ1BMeG2k
#:B0w4VprDAlAVgyWEL1Z6krvP4CPmRgqAMDTjvkWOtFdDBWJ/ONFFW/ZzFVS/WqGuYpQMnEWPa8
#:hMLOgRYnbSvWpW+SbZKvYrBZRfa6d6gIYPGuJUqpm3j4kiV+6tXapXKN1nD61cN/5J5AD9R0M6
#:DHadlvdGRcOz45/yb91s4EcDkOXquix5GIZ6MX+kBF1jGoJ2rUFBpRac1S9UBJX7f/x6BxmeyQ
#:Ps5XR3FZ82xtFPAVZUTMqnkyC8jTporM6s3lqbOgsTzFd52oD/gDm/mVviD2QvReWKX9unDj8d
#:087zO76fiusmPZeiFVq0FpD2lI43gPqFI4YfJFRd0W/TTlN2kjGZvUwaPB2fkZZFWTNM0zjw3d
#:v1yIsZCSBlkQQ5QuJuB+QjdiwScXO3c5694m46B72z182IU1hqUXC1Xcbw52f0Hcv+ztsV8u9h
#:G0tOAq6MnB7vmb49NDgD45Ptt/yw72jy7eVlcslbk97ofGtIxYfnK7EwtOssQLcv4tjVMbwzZr
#:+U8wQd/p33LKHicJlmdNZ0WQNj0BknfSY1/086ot7ae8D3Wp9o7WE69zr3h763JTvtWt+BvtPT
#:7k6Svmye75r5Zh/6iepLaAIAT2lZURv/Hz2s4P1VS3sv71/iks/6G+/E8/zOhOB/D8qRD9YwEi
#:vDxvYuTPoZsHs6gW8XS+f064/rkQF4N8DTLEtbx72bm+/E/nen2l210rKfy4gMLxxTnf+E8zcj
#:N/3j+yugrLP0ssCgj7Cd1uq7ViQjF1cPF6YNkr5rLFgsLr0B26eusE/D0Ehf6UidSh7JVzFTqd
#:RPKdMssmWDA0FvHlA1vNZSG81dfVzakrZw3Yom47v3FlkQt0INsu6OqVWvChFxYP/MEtYNMem4
#:gXspWmZeXlGH+7Cp4SCtcNurjXQVorA+b5bMWEwvbupm28B6+CbS+Dv78V/xmBd5uwKwN/gxeJ
#:HmhXvE4YTsLIZxI5ZPRBymqrzXtZfaqHaDFwnQZZSI/PIjYKXOAnsK6Mfm1xG0/X6EPqW91Mkh
#:f/x91I7P/f7XyNbTr+EVZ960Yb9t2uoDP8hH11J8Q/VH9om9rSv7sFwT7zoWrmm3gUb5l5VNva
#:Ut66tA2IVcmkKNOoi3MIG91inHbfw7hh6XcfdwHenDp8SdvoHooRQz2YHMsXkxLYNu7Vs8kxf1
#:cjS6Y3UOyDuRcJPjqL6cGd6O+xJ7l85h/P4z/aEQjGWHN+x85LGbkQX8d4t+JG0QO7CeKA18QS
#:Gx3Zi1x2UoBU5fgRG9Tl1X/ZT48tgcdx4oejBxYW/F/1E488boqurh+kWpvl9eDkrNpfISAviZ
#:JMA9s7Pjg+rcLJewkeSPPZN4wwg2CVkA9uFePaGQR5mK7f9c19iUXtLE4HS9uNfaMtX13NogDI
#:5yCAb1qudgI5X+oWtw07ieR4dTMH+z/LzXCIhv3wiSZ+JDni58Boc0jBEmYl7wuWuff4q88HzF
#:Xxbcl3wD6ozeVPdK8onrEW43WG7xiiBJRrZlEuVBLX2UD29XD8brB76rwI6ffh8dH5r/Lj9e47
#:+fPX44sSBnK084H8OhvsHR+9hi/DrqooKzZ2ivH7h8DN2ps/9Xq2GBjjK1nx03cf5G/Q5EyNhw
#:okDzyuuRVbAtvfcsgCa2YBAb55Yo+y0jlzb98umKUiadE8VEMLpg8Wrd3bm8tR88TuafP44b8h
#:5zlpnhvMWTKH9BzBNg/PkfbYc1YORUDBq/MwQvNa2VvZXjm6MhrgXQ7v7LCVn/egDCsQ3s2823
#:AarBzhyn81r/SA0gBC3t6exTY8tvGJeeg3V7bZRsJW/oUzJyd0AhZr4tT79EkgePtWYWi3vwmH
#:9CtzFED4iOZZPxi5k6jY4nF2dr5z8uvx0bstHoW9KIDY4aF8AkjicxmjBZKrGN19ieCJhz8IAN
#:JfgXkYIke2usMwBr+lgStXLyu4jeOXcyCExRAyDm41Q5bWQ/i+Zxuj0SSmVvKG+Fd3OYyBO3LV
#:9xxM0s4IES7izxIgwRqH/y3l6HqbyIHP7a+wrEZk2XwVeFrdHpRStUhFSNDTPZQeCiHp5a5Joy
#:RQeCC/nfmyPbY3zV2pVGXjnRl7Jzueb6/rJ4OHkz4PK/zzptPtXo8UARyRj7edbfw4Zk4cIxci
#:NvE4vFvNiEeoUmEb766wFUyhskDDzdm/WDvcXUT4Durk+Oyt0slYkmxf2AbA91gqfRGBvsBcqK
#:3apOjhK9mA3TFSwMtoPobRXm6BVarjy6e2dFOcvT49O4d/nOWZLUo7s0VlwfxIyRDi4czSTTU0
#:4KEADnbKc9t98+YVg5LKSgYVMN3dOFmES6delWGIfYNwSzYWuAJ/gxs20FTnq20NGShwMIofHK
#:hmd9Lm5UrbInmZ4+eDWtTYEEKG6ArXoUxcctIunvjpH8ycNETvFxIjjmKP3LlzN8bEL1jpY062
#:zYc33m4z67vpCHgHpuNk+o1gRjC3uZuu/zbAnyHl5diK6fXAgMWkH0AtMd/3abwGcmZ1e/MF5e
#:U5Z7VrlXN1z+g6XqYgZa85AAqQ5U7Q2J3pA6a5B1XacACTp3Am/KuXpxWyPGTUNpr5RV4RE8d+
#:m+KYEW38Q9CcfhwypoWj4YXD9GQRUFKCP4HXraan79vSFd/lcfHIOGph0fqm7XlWh1mAWolKtN
#:zfi9QMw6J3JbrBlpMdsAuEda9QYWyJD4bwRcZLo5hJ9azaFvbcZOmQZuU6QhC+eNmTmKzr0bPh
#:FYFHoMXzjxpaJ6izFnOB3HPLYeKIawft1orRW6vebWXoO71xorb3YjaAt92ejYott07ANTNOzy
#:5HPfz2m/ndRLPAZrQVPTNIUswG24Rw+JoNgYTwhmo8Nsyczv/5KsFv2Xrw/d3C8tL2bm1TQ9J+
#:CMqPv607E9mZwo8DWgke0/ri9dqqxzHWF7GbCCOBj6DTvAmZIgWF2GyP6sfdWh3dGBzsDQ+NaR
#:YFHNJLu0hroC0EeXoel6Efsn4OUnmKhdQT0BZy0A62VRE/h0PjSVIsZ0cJkm+TqjM5MqX0+hu4
#:AqKOraCDRYQEmSMKbG76PqeJbnoSOoHMHuBcwn/c31Y/+vzI3659RyxO6NkZI7lcUb4DBqSQc0
#:zAqiRY1ndRnck8efejyoCHU9mPseNNJNldWquC3BAS/MXay7SWaJYEnAVr8khoeSYvW/6oBrlU
#:7H6GpiAfpcC8RetICgfmUdeIlnx380esd4APH9l0qlTZz271Kp0FTfq1IWPG0JIz81KY3eUUtD
#:9n4YMPWn8Am/Fw4MubUIeTAVjWKlrfTC7ko9WOmO4c96zAxYJpCYd6CWJ6/soaJO+p8gwgjw8j
#:hwxFAnzqTZwPT35wMHJcioJ2fCIu5W2KMIiFtJ8kRxSkr1Ck44aVU7yp1h0WTeOoM4/eFaQU/3
#:Ku8F6i+9Cyhg95nfkMR3EG8u2vRGjQaEN4HgcVVRaCh4FkOiB79AkbnpjmydFbmEvOS74EnczB
#:G1siVB7ORGxJCucUZGJmuYNrokGWU44vC2Z8hGFceTxuj1Qx4Iujd6cnFy5KzreTIlkeDM6LT9
#:nmLhLW/QiNHRWUMTRWvg2c9Ps1ZjC+qlK14KiCDf8A3JjWp7oWWb3PFJY8oNy+xPSUDlLyAbVS
#:oHhNpUM1rZVPGbAwwIVgp8ioURz4fmoaYpjs4OU5/NbwE90bGtNmpNiKEuhAU9GFpUjHcNiDTi
#:XrXi9vvyxAhML4eP6ZR/M5cA8IQ/3HG+dQP+67x0OnnN3uTfC7N05kyE2XK7cRZgwJbKy2scTo
#:wOF8jLmj4fI7Ou3kH07BzQXndTujXJiFfyMVqRER0WlYjML9J6cffX4EVgaz3hRxl7Hxs1qCz5
#:6Slricme5yYmjbJTDiEzeUzSYFn6S25soPvADuj+IzdGDk6+WVHGuGt/EsgCdNJ0kb+8dqeD2u
#:4hwURk6AwuBKt6/JyYCcuDPLNoEcXqmjNga4tJ9nOaOTUVsAAA==
#:H4sIAO0CPE8CA7Qc/VfbRvJn+l7/h0UlWMLCNum79ooROUqclnd8PT7apMClsrQGBVlSJNlASf
#:jbb2a/tCvLDum760uJvTs7Mzs737vkuygJ4klIydYkiYoy7Nxsf/vNd2owKB8yWhtL6J3xvSjz
#:KLmuAQGqOBrODkYpG/v2m5KOs9gv6VYQ+0VBzmAwSuIooWSaRiE5HPw2OLHPSOE8fvvNUjSy+Y
#:elUQbESvhahjTPXWtwcnJ0sklO0zEtb4ANUt74JSlu0kkckoROaU5u/CyjCQ3hQ6G+dDqdy8Ry
#:+oiT3kelvcE+f/72m8/9OezxT7/RoExzxlQChKK/qOvHcRrg6rM1ksHf2WQYR8EmDHBg29lEOL
#:vnuITBsk8Z/CTiv8cTyiBeOn3gYOlJriOL/5PLenyZkB/y9Qstd9NJUtpOkCZFWVuW03KSJ4x5
#:feHZKkkzmvtA+uLKRjSJ07gwu0iu9IWcRuNyPjWzEGB3wtDmZ4qnC6xse0w4DsGxJSmRNT7IDk
#:pgWbNBBe2sjQDttkPO5NFJtIqfe4c8ErGK0fPu+6QCPE+ijxNagU8FP8B6lhbemygJ7SknDTzC
#:0LYHZ6b2AgNXOl9IYap4QSwMg4aei4MrMpwvgkRerx9tsaOIYDNsDqlNPS+7iK4UuYhR+qyRW9
#:+QpJjFCIEhzpgmpmTVgEYWxnTCbHYJpBo569tPZzbf9hLOM1BFPSMesc/WnJxyXc5cmF5DuHRk
#:nzl8HZuS62AZWO0UrKmyia2z7UpdPCEjbQqOQtkiN7xT5mYIbiO48fO6qfFpMJnNupVk4CzycJ
#:LZluWAPnyugDlV/mUVXA2sVcBFJ3OcWWBOuuBkKmBAzDE/KT5mjHWUU2pn3FTFJgyL4QQMu1lg
#:esM0jcleMRhn5YM9C0+aTX4NTs8jPfLpEwHW4XyAITbCcOpblIw9zUWuWGJrJTzRkMzny1wrT6
#:CuD9rJNKytoPGsKqGoca9+ZjVmJKJlEEUwzkCTAWgBHo0dA1MTHskRM83dmPpf9ua6jhC0skpt
#:+9KhVH79uSeujrlR0u3ZvTE/UekiLBa8CDQz00U1jdsmbcIc0xJf5pdR8D7wi3KLHcO2XfkNjr
#:vNcAi/wcP+siAzpuNxOgWBtBGSSdXl0EY4gMBfSFfYtEGg+8x9PZvll438Zhc4fYVItO/tDRzp
#:PZvlutoKT07sjCx7qHzck7NtrQVp9lCpihDMklQj9gU3hWAzAcTgAmWym44zP6cmfVeKy1vfUP
#:FcwwIzr4B8wjW/wGgA+Y60hGImHu6DYDUKJDCQVvFJnQzEuWgbo+T6uiOjI4ZGzwtq0XEmMNZi
#:cM0RqGCPKiXpCRFKFfFMBTGjNgKs4+IqgmLElcJoR1wcGB0W8yli20EUalEAFDEvXWKo7HV5Ux
#:2Dzr+uyutspUxbYGyrJ6O/mT0Ta5Dnab5J9pKpH4OjgtP3IZGmeUHKFNlZFimyniMvfe5LjWSE
#:0Di3OW9kdVVwud3j8uCs8TEWzJfkZrmJME1l3hK/wYdmCxxzAwQ87Q3T9NRacBZB9mAzH4EmKs
#:SH6ihxozmiLbYuey39IJQRwJ9RHtEklNmGciM1NxnfFPJk5FB+w1VHIMBzkau3nr0aRSuS6r/H
#:AZ6z2JXIRAAQfLKHs0hA4f8bDGrIAaIj3cWTZB7PV7B9Qv3wNz+G7FpFFpeZe0jjaLyBh+C2tJ
#:GXfERVe54HYU9ajWX1KyPJ+7L2uo0yj7nVu5soprZdXOAQ+AVBA5McPoQpjiBTDW553790UGPF
#:92WP6yx+abcRL4tsHbRKHGOnyzKDj97IjwvaF7xe9IBm69Li3GurhL18hIEyn1CpZbozCmSwQM
#:/SB3/eJ4EsAwD3WqDvRn1j27A/IvM4xmjjl+BiHYLNMmr4JYwMIXDd9hWqLc/++Kq3CbtmDqSM
#:Es7TUo76sRYorzmyPzrIhpQBmxFnkfdlWs5EsQt7mYyNU9ZdLST0UcprDxlFpJ8VU1KISpvEBI
#:sjntery1TZs+BHF6wYkofD2aTJZEyOsvLx8Ohw4JLT48HgNfy198cA5+XsKfgcCsXi+eG/D49+
#:P3TJ4ZFL3g1OCUcCTE8CjCUxRX5gAdhOqWllAn4TnI2fXOMgwkHVDyA2UoU6wpTaXnGaTvKA2g
#:i4SkZKQFh2jjqIrKNiZavTklJahnlH27xSQ8EFvS9BUAIBSgvg21wLzcgFgJ0ql1ThC4YxsJZp
#:nN7R3OZfBXGCX9UpWUGWWbx0gFlMOEEjDYDoixBB8IX5+3sBIHo/HZSvx8YbVYBQEAeZZbUZS/
#:BVSIZ5Mxoc/yp9ZBXBKZS0N7SwzbRbPyMCtbl+RCTS3ELB0h9u5Oxzq9sy2ldCX0FP90o6fqw0
#:5O6G1+TiawSz+HU8Kf1hTCtLwBjM9iFQYA8Lh2xhIDMqvZ/6IcBqW3K1UpCs3dIHVxb4Aicr84
#:nw+NKRFC5AOiLJrbwrafF8Ysa51valLbGFP17COY+nG1q61NMGpnE1gIdgeGiP4VauWaTfmNlw
#:D7kk3CsqBxJFdGpGKJOcdiRPsH4ar68LKJanIROoXprbFvm6+Il8qO33XOUJm7wjWxGmglkh8F
#:Uy9qYd1gjjC8cdgVOJD4ZQJ2CoiuCFi5GZT0vF5WCCFo+/KHa2SQn8XIsQR/izX9BDcFyNFal0
#:joXmF7tz/WKhBazCdIQGyddR/j+iyFMUg2TPRRhF0kzr0FxYlDBJj3is1FMdZj7Di41er8e6jW
#:/29gdrZOSNIHlL7KdR4lq5pdga1ZIm1k7Ss6TlEfbpRg7Xw6TtQQbuh/bQ3XCRhDsSZ9f2huxD
#:t4tVIoE/Prnxg1u06jwHOybROIvpmCaYracJueMt9xToUQr5b8nQeLmQReLUdCCXGaMpGHB5g2
#:RqWGBi5hSYGWpCymzr/Pj4PRdB1vaYHusLcu8aShrAyTM4Sf5Vvln0a/7yPMseazE9pEWQRxlL
#:ScIo75vRv+bQcBgBCezoFn8Ocz8Hv+eH4Sj2r8ElQlEC3LhkUlBWWbObEZDppCjTsYaRs7BN/C
#:Cg4FUBYnR9y35OXcJwacCoSNtkBD/ZKPyBjbBWqJmBsGFT4TI4Uv+aIixu15bf3WcvdY3ereB7
#:FZSgKLmFaFyQR9R7ScTlMAs6bkB0lUwc8xIB+fS8CUty2FoGVe+eiKWPvExEHwQx1Gh8aIU3xt
#:nYhzOxhXVx69DNkAcKbkkzVYCwrQ3ZvgdQTOxHcNSBLSwKzRNy9cHRG5a8L7PsHZP3fssxfD7C
#:sdrkUQWX5bxTtXphWX6Ra7kB5PzLVYQU6Tx8FyHESPVFfiMIEZuHJagfWOlelQ6C9kdv+WNfC0
#:GxrAYElWCmqcSEJTVmlfm5v6E33DnhQQto3nZEV4g3cxd4TIc7B4P3Bztvr/Q8ILgLgUWU+11o
#:I6hLdFjRvgQgYN7qWvrSEY+AQgPsw/P9/dmmD6RljMPm1GwJPARejzAQyMt4ItJtvbKsTSCKvV
#:E5BR+BPvzUN7g0wmCMSOSsCorKUGGmM4HUWixANWORQAsETGdGulJ9FqnR8ugLnaBjToa8KJgr
#:H8EWw+XLxHLJk+SgoSE009Yx7QHzk8rENHuwVdYIHs7izrOwXOFGHTAUBonFgQGJ7tXiXnYREP
#:O+lvLD80GZQ7UqPz0fkvtvSzry+YDo4C3u5+cDCf9vqUjgiLhsmqmWHFtaPLIc5SKMXMW2Li+/
#://FHqQvi7lJ6h0JLIXEYFerSsvqLyfI4xOXkKPcQpjKbFXGKJZda5uhIHubliPMpJukwjsq/qk
#:12uyS6TtIckguwSFDPu8UIxj4INU1G0bXBsfy0hBF1Lr9CgzV0xMJzJNrIJV4oSnht3FOSRxrT
#:/xmNr5ch2tE4+ou+LzLIyQATRwTDoASsEyKM+UvL4Ud99d4fg4WLMR2pDq/SFExWyEiKgPcq6u
#:UGaSkZsVBbUOxMY3SvQq6S31rBm3g9jIJuVWApj1TmC/AbXJf5XJkxXmcEp1V4c5DoktNxKPHN
#:Q6H2rC+vBCGrqqpI5A5eQaBQVJ9p5GhiESUcF30lCJY/MmUdOTXMX695PKHVPNRMJd9QyxuFKs
#:egV6uzxXtTtd9Q0jcV9cVsRW/W9Iuq+kV1fa2yX1DbVwcn/1b1+GyNL2FUfV4r+GtHIas8vqiW
#:CIyCOK0C8cxtYL1k5R2rDLyxLU3Kradt/OmMUBMtOTIS6akfz7NEfPHix/pCxjlznuKZDsyrN1
#:paDf8GYhLU8XZzOsn5qhVVLEftdgtWwULoLWjOStgizbFqzTviLc1U52e2iTptaqHmTGOnsm+K
#:kYot+eBt9MkHcw1ptz8I7avfCTxNLz5cqboj8j7wy0IhYbwP5XVAdKValIGz3ZO6DBPtjSsP50
#:WyJTSSp+p8NqhdPxYAz3sM1T43YJ950z6Ltmd1rLakoDVePssXO8d+DpLV5A8VwTbJbnntKohi
#:lG54M6fOiuXLouR1iSyjIaMreP4H7pSh45eGRKis6LLvhWwbgWPcWEPRsw0267OaJyBb8PmvFg
#:u8YmZHm/mDz3Azf9/SoHoa1E8t1d7gAevAL4MbVE2tH8qytNtr1cXV3OWydPLqKUmFoHBxUX92
#:kV3lNYzoEL0CW3eU66v03MSRuYkgNDTKg6IqMw12VLCRlzg9TRmZmAt2t+qoS1/hKmWbOWzyaQ
#:1tS8EHO2Wey0aho7+6U5xIFf0AvHzY4nqh6+kH7UbeBlF4Xu/TJ9S9C/hx1ZH5KqPBV4PBcVJw
#:quEsB9yT1tmQKsUprK5GoedZBzt7h5ajXSprOrEDGOeoRO0Q64fPpU2EuHtXDr/LZNFvuaV9sV
#:u1JHJ1dSavXJUK10gPRTDU9zds3gzo2fP2grue2YrGzqdPMxx+WswhAC/mcADxAtIJERdUYgH+
#:YsYQYazDbjeWPXm9oWu/mva8d4PT/uwbhnpyAQzjGvPeQCojZAzb2J1xSFFdu8o7b9uxRCJREZ
#:U0Z3Tvc4OgTctnCaFm0897BfL7r4NDwl91b5IXBVb/T3I/86r/it3hK2B48/Co8XBYKgFW+ppm
#:Rb0tpB0I2ik3Pmw74kxlghwlw846TFCzU3QvbA3LFju8yXh77YpuEgOuxZVJw3sehqqDJXtTxE
#:PGpFJVkBD/XEZa78fJvGvCGDKAtXsTk/ikkaaU1UQmFFq8RmbES3Ej+dGu16SquzVZ53QU3Tc0
#:Ob+Q4DzW5TAV25cbziErIFab429P5X7ndAmlQiA2tO3CNliajAPeOMILAev8dIB+dffNL5ZrbV
#:jVMy2uC0UR+MnIfoJFrvUitNzVpHq5jW6/d9VhFX+1JU+qVP2XCn7380QoPwlTWiStEkpQyLrL
#:lAwp8VnSIht3HdEdEzSqmkreT1QdYyBCcz8ooynVNrZ3eDY42dk92/ttADvrWcAX7E+9sVrWVs
#:lwn3jJq2R9Y1MkherO2tZhH1WTd87+Zckidm8dTOIywoyYd00mObvYKYg/9aMYr4ddkEKMVz9p
#:QtVvT8gMVdZa7CFLtDWHpvbWXNEl5EXkkNaLorXJfqJAIUF1n3QcqGj6gMqwTUxrDtllhSPPGI
#:mNv8ACgid+QQo4MSp7CeAz4qgoHW0fEss7qJnFTrEquHgRXm0iT2alRWrSA0sX1ziS9DyS5OLS
#:urQYTkdvro9G8aS4wd/mqB54Dieji5f/+EFk8XihUNgw5hIYhOMowyhR7VR8j8fe1gCAU73z5o
#:bBFjHDIGAZquZNZKVa2xToJ6wQgsGKVKgawOkJY4KZMCtFErJF5umZeoZqnF9ypeyTQ/ASM3N5
#:C5a/oPWs84I151nnsakdP5P5EaViGfdGPLsTlZA8LhHXMucrccrsVHX3O6r0F0kj66AIENHd0I
#:9ZyqAC1vLFmgOuBRbNBz87/UWGI/B0qAqMdLQw+ZUGJSArJiuwfgMDCnO4iBUZNerQgNWNBN56
#:qU7H6rbza4lWrafFhJ2qfdYAwAKYzLJVJ07o6hxwceyuYl95KtWj+SIOlxiHYHoKQw5f2LzEKt
#:UVNUHyxVXALH/M+8IGVahpwmfpEIx4zu44jHAue6KeDHxHx2dfqfXaCQE2z8NLZXQ+EnVDcEO3
#:qCh7FuvdWnU1R2R6V1c9AdNX7v0xaF6oWrmfFyipuIN6vo6KBaaKIm7VrZmF5MmWIbyZdvjUW9
#:QKn+LDW9QQ/IDXEWbDEvsuekuu1iheLIDkdq6Hmt18cmvuXPZ6mAbWwPS3SEIPee/JKMswaWOl
#:4yb7aMvvXEeZLUrNPBycnp1CMjbJsiIPyND/y4dYDEktzWkCAb2cgI+K/JjQex97iAXp3qRj2r
#:3pHjzswBrLMUoPE/mb/Z1fEPkvu7vkl/M9hNUs3IQ93t85e3N0cgDgx0ene2/J/t7h+dvaEvxf
#:1gm4KT6qJdXqOzdKteg4TwNaiBFlvfoo7wNXv8EL1kDFL/AKdWKC5inXaUmzxqdU8m5+HMrmot
#:mLfyr6UAbr754D8ab6kvfYLjbkC2vTO2m/bQFZ/4p9vHP2q2O5P1YPh5eAKGQBKysjccMZtL0f
#:akmzgeL13glg+GEGw59hlLOrKkD1Z4XrH4tw4VOCRnb+HPoFbcC2kLOzvTOG7p+L0RFI+SDTbB
#:Xdi87VxX86V2sr3W5LI/LjIiJH52dcAj/NytD+ee/Q6VaI/qkhquBYQ6PbXVpasaFa2z9/PXDc
#:FXvZIbQMOuxRgXo4Bmw+0NJ8FsaVRG/wc+U6mcTylTnJJ1iLNLcPqpfQmp/DBU7f0ESvrrg1aI
#:ffEfAbZxL7QAqS+JJdPbOLgyiIygfxMhrwaQ90xDtms5Vqvsrjr4vBxUKlvM5eMxhASysDEoRk
#:xYZS+va6bb0HL4RNOUu8lBb/WTS4ScmlhZ/B7cQPbG+8BhlOojgkEj1UCjQj9eX2nSx01Ru/BF
#:jPaB6xd30xGVEfOKLOpdWvr27jaVt9yKJrO0qL8v+6JYn//76nL7HOdGGExeWa1YbNt02EVpiS
#:L+6G7QGKTDRcfe3f3obYAgmhRhcb+ayenfOouLmpXLxmMRDr0klZJWfnZxB0uuU4676Hccsx7m
#:xuKd4We3xN2+oeiBGreqE6lk9UJbRr3VXvVMfiIZIsx974ABFigwXXsLeMovVIniSCpn+tgf3K
#:lkAyxgr3O3JWCcyHOD3GeyE/jh/INU0oL8MlRnaCLwrZygFypj4gunfpxPz3JNjzVmB0nIbR6I
#:FEJf+3JBijIvjKHnRIM63R83pwfFrr8DCoII3TXIPbPdo/OqkByosUHoiLhpeiMMUAjfwBPDDG
#:xFPIGGB+5g5z7ms23lvjtLCIXt+z2vLlWgMSAH0WCvjOEVQ7gowy88ubph3FasLc1P7ez3JTHK
#:RpX3ymkStJknG1b7U5qGIMc5z3Jcn9O/zUFyP2qhhw1KPsEHTp4id+YyoeEJfjNYLPO+IUVG52
#:WSE0FVe6QPz1cPxusHPivYjY54Ojw7Nf5ZfXO+/kx1+PzisYSADPBvLb6WD36PA1fLPcmuaScn
#:27HL9/oH7e3vip13PFwBifJ4uPof8gP4OC52o8UiAFDaRCG1YG3mHTY/ZZNxjIEebM7LLEd97k
#:27eLpllxthAAirBF8/sLV+/uzmdrzszOyZyJg39DAnU8Z3Iwb9E8+vOkPGd8nuzHgbdyIAIRvh
#:eIYrS9ld2VrZXDS6tpgc8XeNtk5eddqAFLXODnwU00pSuHuPRfc5YGQGsA0XJ31yHrAVm/JwH6
#:2JUtsp6SlX/hzPExOw2HNDIb3N8LDG/fKhTt9tchka5nnj4IHzJnOqQjfxKXmzxKNwB0jn89On
#:y3yYN4EFMINgFKiUKZUMgQL7BcJhgeNAxPPG5CxJAuDazGEum30x1GCbg2HV5FBlk7rh+9nAci
#:DImh4/DOHNDKqBjG78n6aDRJWNN7XfwWZgFj4Kx89X0eKml+DBOu4g8xIFEbR6X331KOZbeNG3
#:j2XxCEhWizeqY5Cd0mrmvEARwESF304LiFokiuWksWJKVuD9G3d57kkLtrt/XB8Io7MySHS86b
#:L0ZPoH0Rx/jzba/fv5kZCtgi/973Wnlyytw4RU4krOJ2+MxaME9QDsNR399h+Z/B5V0OL1d/YL
#:p2f5MSULCz0/P3RpJjHrh/7Zsgf8Qs9csE9jVGev2kS/oB/CRlsj9HEviY9shA1rAuMA94fvWN
#:L7WP87dvzi/gD7t56YvSr3wx8aC51OgQ5njl6a1pGnGTgQcV55Xvv3v3A8OSZMsaLTS9PujmhE
#:cVxla/xNJReCenDTyBGcMVNaj881NrxQxuwHquVqtPsWZFBrca1ZcY/yUa2VXMx9cYu3o3P/2O
#:wZ2mUPNGPdipM1TKq+7nGMIGNX/O8cH19DaoeW5/v5wBw0DbXCz/IpgZDMDdL/e/OeDJlEKJrO
#:kMBqD0YqQSoLYYpPw03wM5t7u7/YKb5ZWE6SsTNtapah3SEvbYW/HJAmj5KGxqEw0B1T2EK+VR
#:gJo5flNXYXsIgQij4oQg1HVE0IQ5LeeAD6GisQ19qUmCDS71RK/pYM7+oRumVMU+gFyJ4q5EpO
#:R+KQJG20nOb18uHgPeILCucuF8iRNDhKLOF2cYQym6VqeNPmT+kKWgvEowlDNYnmLdt1r+6OMy
#:wjRoAhzHNtUkVO6MQUWuhBavcsK8425nxwQ6u8HdxNFv+i5Uxh6lzADLuruaFW3vzsDucioTt7
#:MB/vrWfeeSfuCoaMevqRA5aoM2QTj8LGI7o3ygzJIDs6j3X36qt1zOCvySWzhf+sGdb67f4lBp
#:8HL1FnqUxGUC+QGT9TFfv/JmVs7HvH2X4OQYKXwefCH1oSBPmx9QsnwYs5JO4UFHCOAYrLHQJl
#:z1KHUL1UaTh8AvtO2rToMdVYFqoYkLdLgcd6NeVGTzUUTuqYanSpCihcKyqrbDXCnXNDh4ArKB
#:xSA6dXMJOjsRWGUMdWELWyQmlAyhI0C6gr+0SrB69vlZfF+FGmTsM7I2RQuRp/oxadBMWDMDnG
#:R+s6F6dRbrfF+kKQhPoJMk9QB+ds5kJ1BnV5BpQUfDZh93vd3zvEmwJ0wgpG0tvcWtF27dkEfD
#:+5eo0/GNGMJnVHEkPWGd1dHY8yG8/prJKmDJr6wDTUwC0tImIDULV6mraIxDNkTiGFxicXGX1l
#:5z3Dtcl/ExeLY/ggY4HsVkK/T5kTZXVsaz30wvxsDt8ZmfLg+MQX3FNIhxMgjRJJ80Co2tmrgE
#:bNX/SRDZihT46qMsCp8tve8dQkyDZATRl+Q7Qxs2i1Ti1O+TqH1RiXCcToLQziX2tGh8geL25E
#:NB8vSXYPMeZWITtWj4J5+43BYqin79mCwRHIThFOalUFkWJBgQSKkH+5L+w8Goinh2WxvGrhsy
#:0YQA6ZW3vkSwBi8n4ksEuoGGdM4LoIBCRcbJBaPGzXt58uHN2WVwifP7PFmXW6PZEeO7dfsGs4
#:qEymN5myk45taNwu4OA60BxVxOW1KUJoDEmXAp6hDN2f64MJMJkcSSG5BKi2YqVbYNxTeE0LAS
#:svy8Egika2nFCbltJtZj09mFcANvGHiQzmvYKIwUPvcLHZHX7Pj7C/gGYNUf9pRZFVX0UHF2oB
#:qqLiqSTuz6oDvt+jfbuy8b2GOxfb7+zK0NneBhYdqGzw9qTT8f6hzRJGeb+xCN7oPuKDLS5UmP
#:zTpXIjMnrXxx1pm4nmMMarr9G012shOXYPGCHfsAt9TbwmtlPTay7kmUF91y/84VQJ4ABDc6uT
#:1E8TTy2ZQ9IdQnSwPdrlx/u9DseYJklnHp3WpRxOtP9pyPgg+wGrP03iRo+fPqWu/Fw/d4ScOL
#:xtvQnf9pN72ZT9KQFjpSgMboOin3C3dPckzQbbsENb62l6SMeJD/ABrefDglXgAA
### BRC parser (gzipped and base64 encoded) ###
#~H4sIAEZDOE8CA31UXW/aMBR9z6+4c70GKMGFTpO6iEr0rZo2Td3LWsLAcQzJBk4Um3aj7X/ftR
#~H4sIAO0CPE8CA31UXW/aMBR9z6+4c70GKMGFTpO6iEr0rZo2Td3LWsLAcQzJBk4Um3aj7X/ftR
#~MItGh+IP645/r43HM5ecfiTDGdeidg0kyDFmVWGBC5epCl0dCLSwHzbCkhUyaHXr3Q68zwGCfz
#~vMTgVZEtuclyhWnWmi/kJ0BcT6cu2uW4gnxtirXpCc/T0kAgPZEAmSVZqfhKAu3PiDcfklnMtW
#~x2PLMqcHP128hVAUFi805/uIGnWibgazZutbsTBmwRahaVjPlA53ghRSwrSlnwEgMxVX6dqVYb
@ -361,7 +366,7 @@ parser-clean:
#~W7SqHKP2HXNoBleRt6bnFVeoyFaK5McV2batZj+RCcM/MexbFvp7ScFeYu8FzytXEJQO7P0DVg
#~ZKir8FAAA=
### Colorizer (gzipped and base64 encoded) ###
#%H4sIAEZDOE8CA32PwU7DMAyG73mKn67qLozQVlwoK4inQILDQuO2UZdkSlK1EuzdScth0iSwJd
#%H4sIAO0CPE8CA32PwU7DMAyG73mKn67qLozQVlwoK4inQILDQuO2UZdkSlK1EuzdScth0iSwJd
#%vy/9myNzf8Uxnue+b3W8/JOese+cecv77nVZnrbC3vNVddxTyfhDPKdBfi4ZowNtBFLq5lZVr7
#%l7xlGziSylETlDXQolNNjAN5hJ7gSaKxWgsjMVk3IDI+SDsGxEnhMdHxuOTffvzlFpMK/QJoNc
#%e7lzUa44m1++Sgh0D6hF2IsAijv3tb7ZCwL0RnQPrCzqhATW+RPqNG2lY4o6yzHHmdFSjqrMT3