summaryrefslogtreecommitdiff
path: root/support/lug/lug
diff options
context:
space:
mode:
Diffstat (limited to 'support/lug/lug')
-rwxr-xr-xsupport/lug/lug2856
1 files changed, 1918 insertions, 938 deletions
diff --git a/support/lug/lug b/support/lug/lug
index bd1e2c4950..49ff03c86b 100755
--- a/support/lug/lug
+++ b/support/lug/lug
@@ -1,208 +1,321 @@
#!/bin/bash
-version=2.02
-myname=$(basename $0)
+Version=3.00
+ Myname="${0##*/}"
-<<'DOC'
-= lug - create and edit TeX Local User Group web pages
+:<<'DOC'
+= lug - manage TeX Local User Group web pages
= Synopsis
-lug [options] [lug-code]
-
-lug can be used to maintain the TeX Local User Group web pages, currently
-located at www.ntg.nl/lug.
-Without options, reads key=value pairs, possibly embedded in the body of a
-mail as sent by a web form like U{www.ntg.nl/lug/nl.html}{here}.
-You can feed the complete email (after saving it) to lug, or you can paste
-its content to standard input.
-
-For testing, you may want to make a copy and run it from there:
-
- $ cp -a /var/www/html/lug /var/www/html/lugtest
- $ cd /var/www/html/lugtest
- $ ./lug --help
- $ (more lug calls)
-
-Finally look at the results in http://www.ntg.nl/lugtest
-
-Options:
--h,--help Print this help and exit
--H,--Help Print full documentation via less and exit
--V,--version Print version and exit
--f,--full Re-create all files
--e,--extras=STR Re-create STR, where STR can be:
- labels.pdf
- lugs.pdf
- lugs.html
- index.html
- links.inc
--s,--sync[=STR] Synchronize the lug page at |www.ntg.nl/STR| with the current directory
- The default for |STR| is |lug|
--c,--clean Remove all files that can be re-created
+lug [options] [lug-code]
+
+== Options
+-h,--help print short help and exit
+-H,--Help print full documentation via less and exit
+-V,--version print version and exit
+-c,--clean remove all files that can be re-created
+-f,--full re-create all files
+-s,--sync[=STR] synchronize the lug page at |www.ntg.nl/STR|
+ with the current directory;
+ the default for |STR| is |lug|
= Description
-lug can be used to to (re-)create the web pages of the LUG database.
-This script must be executed in its own directory. After the script has
-been executed, this directory will contain the web site for the Electronic
-LUG Database, currently: U{www.ntg.nl/lug}{www.ntg.nl/lug}.
+lug can be used to to (re-)create the web pages of the LUG
+database. This script must be executed in its own directory.
+After the script has been executed, this directory will
+contain the web site for the [Electronic LUG
+Database](www.ntg.nl/lug).
-Before execution, the directory must contain at least"
-- the script (as said)
-- a subdirectory containing one text file for each LUG
-The HTML files depend 4 files in the parent directory:
-|ntg.css|, |1blok1e.inc|, |1blok2e.inc|, and |1blok4e.inc|.
+If you run lug for the first time, do so in a directory
+containging the script only; it wil then create all needed
+files and directories in it.
-The |lugs.rb| script must be moved to the |cgi-bin| directory.
+Recreate all files:
-When people send new data by using the forms of the site, they do so by
+ $ lug --full
+
+Apply corrections sent by email:
+
+ $ lug
+ < paste the email contents to standard input >
+ ^D
+
+When people send new data by using the forms of the site, they do so by
submitting the form, which causes an email with raw data to be sent to
-the administrator(s).
+the administrator(s).
An administrator should verify the password reported in the email and then
cd to this directory, or to a copy of it on his own computer, and he should
then run:
- $ ./lug
+ $ ./lug
lug waits for data, which it can be given by cut (from the email) and paste
(to standard input). By ending the input with |^D|, lug corrects the data in
the directory `lugs'
-It is of course also possible to save the contents of the email into a file
+It is of course also possible to save the contents of the email into a file
and then run:
- $ ./lug <file
+ $ ./lug <file
The administrator can make small correction to one country by giving the
necessary input on the command line. For example, to change the email address
of the treasurer of The Netherlands he can run:
- $ ./lug
- code=nl
- femail=wybo@dekkerdocumenten.nl
- ^D
+ $ ./lug
+ code=nl
+ femail=treasurer@ntg.nl
+ ^D
Synchronize the website (|www.ntg.nl/lug|) with the current directory:
- ./lug --sync
+ $ ./lug --sync
+
+Of course, this action makes no sense if you are operating in the web
+directory itself.
Or, for testing purposes, synchronize |www.ntg.nl/lugtest|:
- ./lug --sync=lugtest
+ $ ./lug --sync=lugtest
or, shorter:
- ./lug -slugtest
+ $ ./lug -slugtest
Remove everything that can be regenerated:
- lug --clean
+ $ ./lug --clean
+
+This stores any changes made in the |README.md| file, the |lugs.rb| script,
+and the |images| en |lugs| directories in the script. After this operation
+only the script will be there, and you can simply restore everything by
+running it with the |--full| option.
-Regenerate everything:
+Regenerate everything:
+ $ ./lug --full
- lug --full
+= Author
+[Wybo Dekker](wybo@ntg.nl)
-= Author and copyright
-Author Wybo Dekker
-Email U{wybo@dekkerdocumenten.nl}{wybo@dekkerdocumenten.nl}
-License Released under the U{www.gnu.org/copyleft/gpl.html}{GNU General Public License}
+= Copyright
+Released under the [GNU General Public License](www.gnu.org/copyleft/gpl.html)
DOC
- die() { echo -e "$myname: $Err$@$Nor" 1>&2; exit 1; }
- Warn() { echo -e "$myname: $War$@$Nor" 1>&2; }
- warn() { $verbose && Warn $@; }
- help() { sed -n '/^= Synopsis/,/^= /p' $0|sed '1s/.*/Usage:/;/^= /d'; exit; }
-helpall() { sed -n '/^<<.DOC.$/,/^DOC$/p' $0|sed -n '1d;$d;p'|less; exit; }
-version() { echo $version; exit; }
-install() { which instscript>&/dev/null && instscript -zp $myname
- cd ..
- zip -Drqq lug/lug-$version.zip lug/{images,lugs,lugs.rb}
- exit
- }
+Red='\e[38;5;1m' Mag='\e[38;5;5m' Nor='\e[0m'
+ die() { local i; for i; do echo -e "$Myname: $Red$i$Nor"; done 1>&2; exit 1; }
+ Warn() { local i; for i; do echo -e "$Myname: $Mag$i$Nor"; done 1>&2; }
+helpsrt() { sed -n '/^= Synopsis/,/^= /p' "$0"|sed '1d;$d'; exit; }
+helpall() { sed -n "/^:<<'DOC'$/,/^DOC/p" "$0"|sed '1d;$d'|
+ less -P"$Myname-${Version/./ยท} (press h for help, q to quit)";exit; }
+
+:<<'DOC' #---------------------------------------------------------------------
+= excheck
+synopsis: excheck executable1 [executable2...]
+description: check if all needed execs are there and getopt is GNU
+DOC
+#-------------------------------------------------------------------------------
+excheck() {
+ local ok=true i
+ for i; do
+ command -v "$i" > /dev/null && continue
+ Warn "Missing executable: $i"
+ ok=false
+ done
+ $ok || die
+ getopt -T
+ [[ $? -ne 4 ]] && die "Your getopt is not GNU"
+}
-Nor='\e[0m' # reset color ]
-Err='\e[31;1m' # light red ]
-War='\e[35;1m' # light magenta ]
+:<<'DOC' #---------------------------------------------------------------------
+= syncwww
+synopsis: syncwww [dir]
+description: synchronize web page (|lug| by default) with current dir
+globals user: webdir
+DOC
+#-------------------------------------------------------------------------------
+syncwww() {
+ local n dir yn
+ n=$(find . -name .git -prune -o -type f|wc -l)
+ (( n<90 )) && die "Only $n files here, can not sync"
+ dir=${1:-lug}
+ read -rp "syncing $n files with www.ntg.nl/$dir - are you sure? " yn
+ if [[ $yn =~ ^[Yy] ]]; then
+ rsync -ia --delete --exclude='.git*,lugs.rb' ./ "$webdir/$dir/"
+ # if dir is lug, don't copy lugs.rb, as we're just testing:
+ [[ $dir == lug ]] && rsync -ia lugs.rb "$webdir/../cgi-bin/lugs.rb"
+ else
+ die "nothing done..."
+ fi
+}
+:<<'DOC' #----------------------------------------------------------------------
+= handle_options
+synopsis: handle_options "$@"
+description: Handle the options
+globals used: Myname Version webdir
+DOC
+#-------------------------------------------------------------------------------
+handle_options() {
+ local options
+ options=$(getopt \
+ -n "$Myname" \
+ -o 'hHVicfe:s::I' \
+ -l 'help,Help,version,install,clean,full,extras:,sync::' \
+ -- "$@"
+ ) || exit 1
+ eval set -- "$options"
+ while true; do
+ case "$1" in
+ (-h|--help) # print short help and exit
+ helpsrt
+ ;;
+
+ (-H|--Help) # print full documentation via less and exit
+ helpall
+ ;;
+
+ (-V|--version) # print version and exit
+ echo $Version
+ exit
+ ;;
+
+ (-c|--clean) # remove all files that can be re-created
+ Clean
+ exit
+ ;;
+
+ (-f|--full) # re-create all files
+ rm -f -- Makefile *.html labels.* lugs.{html,pdf,tex} links.inc lugs.inc
+ makeMakefile
+ make --quiet || die "errors running make"
+ clean
+ exit
+ ;;
+
+ (-e|--extras) # re-create ARG, where ARG can be one of:
+ # labels.pdf lugs.pdf lugs.html index.html links.inc
+ # (not needed by users, Makefile uses it)
+ eval "make$2"
+ exit
+ ;;
+
+ (-s|--sync) # with optional argument (ARG)
+ # synchronize the lug page at |www.ntg.nl/ARG| with the
+ # current directory; the default for |ARG| is |lug|
+ # Catch the error of using -s lugtest instead of -slugtest:
+ [[ -n $4 ]] &&
+ die "I don't expect argument $4; did you mean -s$4?"
+ syncwww "$2"
+ exit
+ ;;
+
+ (-I) gendoc ./lug
+ mkdir -p $PREFIX/man/man1 ||
+ die "-I option is for developer only"
+ cp ../man/man1/lug.1 $PREFIX/man/man1/lug.1
+ cp ../pdf/lug.pdf $PREFIX/pdf/lug.pdf
+ cp ../html/lug.html $PREFIX/html/lug.html
+ zip -j lug-$Version.zip lug README.md ../{man/man1,pdf,html}/lug.*
+ exit
+ ;;
+
+ (--) shift
+ break
+ ;;
+
+ (*) die "option $1 not recognized"
+ ;;
+ esac
+ done
+ args=("$@")
+}
-<<'DOC' #------ function setkeys -----------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= setkeys
-parameters: 1: country code
+synopsis: country_codea ;-replacement &-replacement
description: Set the |keys| hash to the values taken from the file |lugs/$1|.
globals set: keys
-globals used: -
-returns: 0
DOC
#-------------------------------------------------------------------------------
setkeys() { # code semicolonreplacement ampersandreplacement
local k v
- while IFS=$'\t' read -r k v; do
+ while IFS=$'\t' read -r k v; do
[[ $k = '' || $k =~ ^# ]] && continue
[[ $k =~ addr$ ]] && v=${v//;/$2}
keys["$k"]="${v//&/$3}"
- done <lugs/$1
+ done <lugs/"$1"
}
-<<'DOC' #------ function clean -------------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= clean
-parameters: -
-description: Remove files created but not needed for the web site or for
+synopsis: clean
+description: Remove files created but not needed for the web site or for
lug functioning.
-globals set: -
-globals used: -
-returns: 0
DOC
#-------------------------------------------------------------------------------
clean() {
- rm -f utf82html.c Makefile
+ rm -f Makefile
}
-<<'DOC' #------ function Clean -------------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= Clean
-parameters: -
-description: Remove all files that can be re-created.
-globals set: -
-globals used: -
-returns: 0
+synopsis: Clean
+description: Remove all files that can be re-created and store them back in lug.
DOC
#-------------------------------------------------------------------------------
Clean() {
+ local i
clean
- rm -f *.html labels.* lugs.{html,pdf,tex} \
- links.inc utf82html
+ rm -f -- *.html labels.* lugs.{html,pdf,tex} links.inc lugs.inc
+
+ # test if the expected files are there:
+ test -e README.md || die 'Missing README,md'
+ test -e lugs.rb || die 'Missing lugs.rb'
+ for i in images lugs; do
+ test -d $i || die "Missing $i"
+ test "$(find $i -type f | wc -l)" -lt 30 && die "less than 30 files in $i"
+ done
+
+ cp -a ./lug ./lug.backup
+ sed -i '/^begin-base64/,/^auxfiles/d' ./lug &&
+ zip -Drmq - README.md images/ lugs/ lugs.rb | uuencode -m - >> ./lug &&
+ echo auxfiles >> ./lug &&
+ rmdir images lugs
+ rm ./lug.backup
}
-<<'DOC' #------ function makeMakefile ------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makeMakefile
-parameters: -
+synopsis: makeMakefile
description: Create the file |Makefile|
-globals set: -
-globals used: db
-returns: 0
+globals used: db
DOC
#-------------------------------------------------------------------------------
makeMakefile() {
- local i
- cat<<EOF |sed 's/\t//' > Makefile
- BASEFILES = $(for i in ${db[@]}; do echo -n lugs/$i' '; done)
+ function dep {
+ local i
+ for i in $db; do
+ echo "$i.html:lugs/$i; ./lug $i"
+ done
+ }
+ cat<<EOD |sed 's/\t//' > Makefile
+ BASEFILES = lugs/${db// / lugs\/}
.SUFFIXES: .tex .pdf
.tex.pdf:
- PDFLATEX='xelatex -recorder -interaction=batchmode' texi2dvi -p -q \$< 2>/tmp/\$\$ || cat /tmp/\$\$
- PDFLATEX='xelatex -interaction=batchmode' texi2dvi -p -q --mostly-clean \$< 2>/tmp/\$\$ || cat /tmp/\$\$
- all: $(echo -n ${db[@]} |sed 's/ /.html /g').html \
- utf82html index.html lugs.html \
- links.inc \
- lugs.pdf labels.pdf
- $(for i in ${db[@]}; do echo "$i.html: lugs/$i utf82html; ./lug $i"; done)
+ PDFLATEX='lualatex -interaction=batchmode' texi2dvi -p -q \$< 2>/tmp/\$\$ || cat /tmp/\$\$
+ PDFLATEX='lualatex -interaction=batchmode' texi2dvi -p -q --mostly-clean \$< 2>/tmp/\$\$ || cat /tmp/\$\$
+ all: ${db// /.html }.html index.html lugs.html links.inc lugs.pdf labels.pdf
+ $(dep)
labels.pdf: \$(BASEFILES)
./lug --extras=labels.pdf
lugs.pdf: \$(BASEFILES)
./lug --extras=lugs.pdf
- lugs.html: \$(BASEFILES)
+ lugs.html: \$(BASEFILES) images/${db// /.png images\/}.png
./lug --extras=lugs.html
index.html: \$(BASEFILES)
@@ -212,589 +325,447 @@ makeMakefile() {
./lug --extras=links.inc
clean:
- rm -rf *.html labels.* lugs.* links.inc utf82html Makefile
-
- utf82html: utf82html.c
- cc -o utf82html utf82html.c
-
-EOF
-}
-
-<<'DOC' #------ function makeutf82html.c --------------------------------------
-= makeutf82html.c
-parameters: -
-description: Create the file |utf82html.c|;
- it will be compiled /via/ |Makefile|
-globals set: -
-globals used: -
-returns: 0
-DOC
-#-------------------------------------------------------------------------------
-makeutf82html.c() {
- cat <<-'EOF' >utf82html.c
- // utf82html.c: convert UTF-8 byte sequences to numeric html entities
- // Written in 2004 by Peter Samuelson <peter@p12n.org>
- // Copyright abandoned by the author
-
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
-
- void from_utf8 (FILE *in, FILE *out)
- {
- char buf[4096 + 17];
- size_t len = 0;
-
- while (!feof(in)) {
- size_t usable, i;
-
- len += fread(buf+len, 1, 4096, in);
- buf[len] = 0;
- if (feof(in) || len < 16)
- usable = len;
- else
- usable = len - 16;
-
- for (i=0; i<usable; i++) {
- int t;
- unsigned ch, len;
-
- /* properties of UTF-8 chars */
- static struct { unsigned minval; int len; char b0, b0mask; }
- uprop[] = {
- { 1<<7, 2, 0xc0, 0xe0 },
- { 1<<11, 3, 0xe0, 0xf0 },
- { 1<<16, 4, 0xf0, 0xf8 },
- { 1<<21, 5, 0xf8, 0xfc },
- { 1<<26, 6, 0xfc, 0xfe },
- { 0, }
- };
-
- if (!(buf[i] & 0x80)) {
- putc(buf[i], out);
- continue;
- }
- for (t = 0; uprop[t].minval; t++)
- if ((buf[i] & uprop[t].b0mask) == uprop[t].b0)
- break;
- if (!uprop[t].minval)
- goto invalid;
-
- ch = buf[i] & ~uprop[t].b0mask;
- for (len = uprop[t].len - 1; len; len--,i++) {
- if ((buf[i+1] & 0xc0) != 0x80)
- goto invalid;
-
- ch = (ch << 6) | (buf[i+1] & 0x3f);
- }
- if (ch < uprop[t].minval)
- goto invalid;
-
- fprintf(out, (ch > 255) ? "&#x%04x;" : "&#x%02x;", ch);
- continue;
-
- invalid:
- fprintf(stderr, "illegal UTF-8 sequence\n");
- fprintf(out, "&#xfffd;"); /* "REPLACEMENT CHARACTER" */
- }
- if (i < len)
- memcpy(buf, buf+i, len-i);
- len -= i;
- }
- }
-
- int main (int argc, char *argv[])
- {
- if (argc == 1) {
- from_utf8(stdin, stdout);
- return 0;
- }
- while (argc > 1) {
- FILE *fp = fopen(argv[1], "r");
- if (fp)
- from_utf8(fp, stdout);
- else
- perror("fopen");
-
- fclose(fp);
- argc--; argv++;
- }
- return 0;
- }
- EOF
+ rm -rf *.html labels.* lugs.* links.inc Makefile
+EOD
}
-<<'DOC' #------ function makelinks.inc -----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makelinks.inc
-parameters: -
+synopsis: makelinks.inc
description: Create the file |links.inc|
-globals set: -
-globals used: -
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelinks.inc() {
local i
- for i in lugs/*; do
+ for i in lugs/*; do
i=${i#lugs/}
echo "<a href=\"$i.html\">$i</a>"
done
echo '<a href="index.html">home</a>'
} >links.inc
-<<'DOC' #------ function makexx.html -------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makexx.html
-parameters: 1: country code
+synopsis: makexx country_code
description: Create the file |lugs/$1|
globals set: (/via/ setkeys): |keys|
globals used: db keys adminemail
-returns:
DOC
#-------------------------------------------------------------------------------
-makexx.html() {
- [[ -n ${db[$1]} ]] || die "Unknown country code $1"
- setkeys $1 "\n" '&amp;'
+makexx.html() { # countrycode
local www
- [[ -n ${keys[www]} ]] && www='<a href="http://'${keys[www]}'">(Here is this lug'"'"'s website)</a>'
- cat <<-EOF |./utf82html >$1.html
- <!--#include virtual="../1blok1e.inc" -->
- <title>${keys[full]}</title>
- <!--#include virtual="../1blok2e.inc" -->
- <h1>TeX user groups around the world</h1>
- <h2>${keys[full]}</h2>
- <ul>
- <li>Changes won't be instant, but are mailed to the maintainer</li>
- <li>Use either TeX notation or accented characters for accents.</li>
- <li>Enter phone numbers starting with +, then the country code et cetera,<br>
- no whitespace, hyphens or other punctuation.</li>
- </ul>
- <form id="lugform" name="reaction" method="post" action="/cgi-bin/lugs.rb">
- <input size="23" type="hidden" value="${keys[code]}" name="code">
- Links to other User Group correction forms:<p>
- <!--#include virtual="links.inc" --><p>
- <table id="luginfo" border="0" cellspacing="3" summary="form">
- <tr class="mainhead">
- <th colspan="4" align="center">${keys[code]} - ${keys[country]} $www</th>
- </tr>
- <tr>
- <td align="right">full name</td>
- <td>
- <textarea cols="21" rows="2" name="full">
- ${keys[full]}
- </textarea></td>
- <td align="right">periodical</td>
- <td>
- <textarea cols="21" rows="2" name="publ">
- ${keys[publ]}
- </textarea></td>
- </tr>
- <tr>
- <td align="right">short name</td>
- <td><input size="23" value="${keys[short]}" name="short"></td>
- <td align="right">editor</td>
- <td><input size="23" value="${keys[editor]}" name="editor"></td>
- </tr>
- <tr>
- <td align="right"><a href="http://www.lingoes.net/en/translator/langcode.htm">language(s)</a></td>
- <td><input size="23" value="${keys[lang]}" name="lang"></td>
- <td align="right">editor email</td>
- <td><input size="23" value="${keys[eemail]}" name="eemail"></td>
- </tr>
- <tr>
- <td align="right">members</td>
- <td><input size="23" value="${keys[members]}" name="members"></td>
- </tr>
- <tr>
- <td align="right">email</td>
- <td><input size="23" value="${keys[email]}" name="email"></td>
- <td align="right">bank</td>
- <td><input size="23" value="${keys[bank]}" name="bank"></td>
- </tr>
- <tr>
- <td align="right">web site</td>
- <td><input size="23" value="${keys[www]}" name="www"></td>
- <td align="right">bank account</td>
- <td><input size="23" value="${keys[bacc]}" name="bacc"></td>
- </tr>
- <tr>
- <td align="right">mailing list</td>
- <td><input size="23" value="${keys[list]}" name="list"></td>
- <td align="right">swift code</td>
- <td><input size="23" value="${keys[bcode]}" name="bcode"></td>
- </tr>
- <tr>
- <td align="right">subscribe at</td>
- <td><input size="23" value="${keys[subscr]}" name="subscr"></td>
- <td align="right">routing no/BIC</td>
- <td><input size="23" value="${keys[brout]}" name="brout"></td>
- </tr>
- <tr>
- <td align="right">address</td>
- <td>
- <textarea cols="21" rows="6" name="addr">
- $(echo -e ${keys[addr]})
- </textarea></td>
- <td align="right">bank address</td>
- <td>
- <textarea cols="21" rows="6" name="baddr">
- $(echo -e ${keys[baddr]})
- </textarea></td>
- </tr>
- <tr class="mainhead">
- <th colspan="4" align="center">contact addresses</th>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <th>policy matters</th>
- <th>general matters</th>
- <th>finance / member admin</th>
- </tr>
- <tr>
- <td align="right">position</td>
- <td><input size="23" value="${keys[ppos]}" name="ppos"></td>
- <td><input size="23" value="${keys[gpos]}" name="gpos"></td>
- <td><input size="23" value="${keys[fpos]}" name="fpos"></td>
- </tr>
- <tr>
- <td align="right">name</td>
- <td><input size="23" value="${keys[pname]}" name="pname"></td>
- <td><input size="23" value="${keys[gname]}" name="gname"></td>
- <td><input size="23" value="${keys[fname]}" name="fname"></td>
- </tr>
- <tr>
- <td align="right">address</td>
- <td>
- <textarea cols="21" rows="6" name="paddr">
- $(echo -e ${keys[paddr]})
- </textarea></td>
- <td>
- <textarea cols="21" rows="6" name="gaddr">
- $(echo -e ${keys[gaddr]})
- </textarea></td>
- <td>
- <textarea cols="21" rows="6" name="faddr">
- $(echo -e ${keys[faddr]})
- </textarea></td>
- </tr>
- <tr>
- <td align="right">email</td>
- <td><input size="23" value="${keys[pemail]}" name="pemail"></td>
- <td><input size="23" value="${keys[gemail]}" name="gemail"></td>
- <td><input size="23" value="${keys[femail]}" name="femail"></td>
- </tr>
- <tr>
- <td align="right">phone</td>
- <td><input size="23" value="${keys[pphone]}" name="pphone"></td>
- <td><input size="23" value="${keys[gphone]}" name="gphone"></td>
- <td><input size="23" value="${keys[fphone]}" name="fphone"></td>
- </tr>
- <tr>
- <td align="right">fax</td>
- <td><input size="23" value="${keys[pfax]}" name="pfax"></td>
- <td><input size="23" value="${keys[gfax]}" name="gfax"></td>
- <td><input size="23" value="${keys[ffax]}" name="ffax"></td>
- </tr>
- <tr>
- <td></td>
- <th align="left"><a href="lugs/${keys[code]}">download data</a></th>
- </tr>
- <tr class="mainhead">
- <th colspan="4" align="center">submission of corrected data; enter your email address and password first!</th>
- </tr>
- <!--
- <tr><td></td><td align="center" colspan="2" ><font color="red"><b>Currently no changes can be submitted</font></b></td><td></td></tr>
- <tr><td></td><td align="center" colspan="2" ><font color="red"><b>due to technical problems</font></b></td><td></td></tr>
- <tr><td></td><td align="center" colspan="2" ><font color="red"><b>Please try again later.</font></b></td><td></td></tr>
- -->
- <tr>
- <td></td>
- <td align="right">password</td>
- <td><input size="23" name="password"></td>
- <td><font size="1">obtain from wybo@dekkerdocumenten.nl</font></td>
- </tr>
- <tr>
- <td></td>
- <td align="right">your email address</td>
- <td><input size="23" name="submitemail"></td>
- <td><font size="1">needed in case we have questions</font></td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td align="left"><input type="submit" value="submit corrected data"></td>
- </tr>
- </table><p>
- Links to other User Group correction forms:<p>
- <!--#include virtual="links.inc" -->
- </form>
- <!--#include virtual="../1blok4e.inc" -->
- <!--#config timefmt="%Y-%m-%d %H:%M" -->
- <!--#echo var="LAST_MODIFIED" -->
- by <a href="mailto:$adminemail">$adminemail</a>
- </p> </div> </body> </html>
- EOF
+ [[ " $db " =~ \ $1\ ]] || die "Unknown country code $1"
+ setkeys "$1" "\n" '&amp;'
+ [[ -n ${keys[www]} ]] &&
+ www='<a class="lug" href="http://'${keys[www]}'">(Here is this lug'"'"'s website)</a>'
+ cat <<-EOD >"$1".html
+ <!--#set var="title" value="TeX User Groups around the world" -->
+ <!--#include virtual="/ssi/header-en.html" -->
+ <h2>${keys[full]}</h2>
+ <ul>
+ <li>Changes won't be instant, but are mailed to the maintainer when you click the submit button at the bottom
+ <li>Use either TeX notation or accented characters for accents.
+ <li>Enter phone numbers starting with +, then the country code et
+ cetera,<br>
+ no whitespace, hyphens or other punctuation.
+ </ul>
+ <form id="lugform" method="post" action="/cgi-bin/lugs.rb" name="lugform">
+ <div>
+ <input type="hidden" value="${keys[code]}" name="code"> Links to other
+ User Group correction forms:<br>
+ <!--#include virtual="links.inc" -->
+ <table id="luginfo">
+ <tr>
+ <th colspan="4" class="lug">${keys[code]} - ${keys[country]}
+ $www
+ <tr>
+ <td class="r">full name
+ <td>
+ <textarea class="lug" cols="20" rows="2" name="full">${keys[full]}
+ </textarea>
+ <td class="r">periodical
+ <td>
+ <textarea class="lug" cols="20" rows="2" name="publ">${keys[publ]}
+ </textarea>
+ <tr>
+ <td class="r">short name
+ <td><input class="lug" value="${keys[short]}" name="short">
+ <td class="r">editor
+ <td><input class="lug" value="${keys[editor]}" name="editor">
+ <tr>
+ <td class="r">
+ <a href=
+ "http://www.lingoes.net/en/translator/langcode.htm">language(s)</a>
+ <td><input class="lug" value="${keys[lang]}" name="lang">
+ <td class="r">editor email
+ <td><input class="lug" value="${keys[eemail]}" name="eemail">
+ <tr>
+ <td class="r">members
+ <td><input class="lug" value="${keys[members]}" name="members">
+ <td>
+ <td>
+ <tr>
+ <td class="r">email
+ <td><input class="lug" value="${keys[email]}" name="email">
+ <td class="r">bank
+ <td><input class="lug" value="${keys[bank]}" name="bank">
+ <tr>
+ <td class="r">web site
+ <td><input class="lug" value="${keys[www]}" name="www">
+ <td class="r">bank account
+ <td><input class="lug" value="${keys[bacc]}" name="bacc">
+ <tr>
+ <td class="r">mailing list
+ <td><input class="lug" value="${keys[list]}" name="list">
+ <td class="r">swift code
+ <td><input class="lug" value="${keys[bcode]}" name="bcode">
+ <tr>
+ <td class="r">subscribe at
+ <td><input class="lug" value="${keys[subscr]}" name="subscr">
+ <td class="r">routing no/BIC
+ <td><input class="lug" value="${keys[brout]}" name="brout">
+ <tr>
+ <td class="tr">address
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "addr">$(echo -e "${keys[addr]}")
+ </textarea>
+ <td class="tr">bank address
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "baddr">$(echo -e "${keys[baddr]}")
+ </textarea>
+ <tr>
+ <td>
+ <th colspan="3" class="lug">contact addresses
+ <tr>
+ <td>&nbsp;
+ <th>policy matters
+ <th>general matters
+ <th>finance / member admin
+ <tr>
+ <td class="r">position
+ <td><input class="lug" value="${keys[ppos]}" name="ppos">
+ <td><input class="lug" value="${keys[gpos]}" name="gpos">
+ <td><input class="lug" value="${keys[fpos]}" name="fpos">
+ <tr>
+ <td class="r">name
+ <td><input class="lug" value="${keys[pname]}" name="pname">
+ <td><input class="lug" value="${keys[gname]}" name="gname">
+ <td><input class="lug" value="${keys[fname]}" name="fname">
+ <tr>
+ <td class="tr">address
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "paddr">$(echo -e "${keys[paddr]}")
+ </textarea>
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "gaddr">$(echo -e "${keys[gaddr]}")
+ </textarea>
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "faddr">$(echo -e "${keys[faddr]}")
+ </textarea>
+ <tr>
+ <td class="r">email
+ <td><input class="lug" value="${keys[pemail]}" name="pemail">
+ <td><input class="lug" value="${keys[gemail]}" name="gemail">
+ <td><input class="lug" value="${keys[femail]}" name="femail">
+ <tr>
+ <td class="r">phone
+ <td><input class="lug" value="${keys[pphone]}" name="pphone">
+ <td><input class="lug" value="${keys[gphone]}" name="gphone">
+ <td><input class="lug" value="${keys[fphone]}" name="fphone">
+ <tr>
+ <td class="r">fax
+ <td><input class="lug" value="${keys[pfax]}" name="pfax">
+ <td><input class="lug" value="${keys[gfax]}" name="gfax">
+ <td><input class="lug" value="${keys[ffax]}" name="ffax">
+ <tr>
+ <th>
+ <th>
+ <th class="r">
+ <a href="lugs/${keys[code]}">download data</a>
+ <th>
+ <tr>
+ <td>
+ <th colspan="3" class="lug">submission of corrected data; enter your
+ email address and password first!
+ <tr>
+ <td>
+ <td class="r">password
+ <td><input class="lug" name="password">
+ <td><small>obtain from $adminemail</small>
+ <tr>
+ <td>
+ <td class="r">your email address
+ <td><input class="lug" name="submitemail">
+ <td><small>needed in case we have questions</small>
+ <tr>
+ <td>
+ <td>
+ <td colspan="2"><div id="html_element"></div>
+ <tr>
+ <td>
+ <td>
+ <td><input class="lug" type="submit" value="submit corrected data">
+ </table>
+ <p>Links to other User Group correction forms:<br>
+ <!--#include virtual="links.inc" -->
+ </div>
+ </form>
+ <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
+ <!--#include virtual="/ssi/footer-en.html" -->
+ EOD
}
-<<'DOC' #------ function makeindex.html ----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makeindex.html
-parameters: -
+synopsis: makeindex.html
description: Create the file |index.html|
-globals set: -
globals used: db fullname adminemail
-returns: 0
DOC
#-------------------------------------------------------------------------------
makeindex.html() {
- local content=$(for i in ${db[@]}; do echo "<tr><td>$i</td><td><a href=\"$i.html\">${fullname[$i]}</a></td></tr>"; done)
- cat <<-EOF |./utf82html >index.html
- <!--#include virtual="../1blok1e.inc" -->
- <title>Nederlandstalige TeX Gebruikersgroep</title>
- <!--#include virtual="../1blok2e.inc" -->
- <h1>TeX user groups around the world</h1>
- <table border="0" cellspacing="0" cellpadding="10">
- <tr valign="top"><td width="67%">
- This page presents electronic information about TeX User Groups around
- the world, with an automated mechanism for updating this information and
- a download facility with which the primary database can be extracted.
+ content() {
+ local i
+ for i in $db; do
+ echo "<tr><td>$i<td><a href=\"$i.html\">${fullname[$i]}</a>"
+ done
+ }
+ cat <<-EOD >index.html
+ <!--#set var="title" value="TeX User Groups around the world" -->
+ <!--#include virtual="/ssi/header-en.html" -->
+ <div class="lugcountries">
+ <table>
+ $(content)
+ </table>
+ </div>This page presents electronic information about TeX User Groups around
+ the world, with an automated mechanism for updating this information and a
+ download facility with which the primary database can be extracted.
+ <p>
+ The data for each user group is generated in a separate table.
+ To access it, simply click on the name of the country.
+ <p>
+ A user group representative (the secretary, usually) can send a
+ corrected version of his group data by editing the data on-line
+ and then hitting the Send button. This will mail the changed
+ data to the maintainer of this page.
<p>
- The data for each user group is generated in a separate table. To access it,
- simply click on the name of the country.
- <p>
- A user group representative (the secretary, usually) can send a corrected version of his
- group data by editing the data on-line and then hitting the Send
- button. This will mail the changed data to the maintainer of this page.
- <p><b>New</b> user groups can request an entry by sending an
- email to wybodekker@dekkerdocumenten.nl
+ <b>New</b> user groups can
+ request an entry by sending an email to
+ $adminemail
<ul>
- <li>Please enter ASCII characters (decimal 32-126) only
- <li>use TeX for accents
- <li>Enter phone numbers starting with +, then the country code
- et cetera, no whitespace, hyphens or other punctuation.
+ <li>Please enter ASCII characters (decimal 32-126) only
+ <li>use TeX for accents
+ <li>Enter phone numbers starting with +, then the country code et cetera,
+ no whitespace, hyphens or other punctuation.
</ul>
- Anybody can obtain user group information by downloading the data from
- the green cell in a table.
- This will generate a key=value line for each cell in the table, starting with
- a key for that cell, followed by the contents of the cell.
<p>
- <table border="1" cellspacing="0" cellpadding="10">
- <tr class="mainhead"><th colspan="3">
- How to obtain information about all lugs at once:
- </th>
- </tr>
- <tr><td>Obtain a LaTeX file presenting all lug information
- for publication in two-column format:
- </td>
- <td><a href="lugs.tex">LaTeX source</a>
- </td>
- <td><table>
- <tr><td><a href="lugs.pdf">PDF</a></td></tr>
- <tr><td><a href="lugs.html">HTML</a></td></tr>
- </table>
- </td>
- </tr>
- <tr><td>Obtain a LaTeX file containing labels with addresses
- of all lugs, where you can send your publication:
- </td>
- <td><a href="labels.tex">LaTeX source</a>
- </td>
- <td><a href="labels.pdf">PDF</a>
- </td>
- </tr>
+ Anybody can obtain user group information by downloading the data from
+ the green cell in a table. This will generate a key=value line for each cell
+ in the table, starting with a key for that cell, followed by the contents of
+ the cell.
+ <table>
+ <tr>
+ <th colspan="3" class="lug">How to obtain information about all lugs at
+ once:
+ <th>
+ <tr>
+ <td>Obtain a LaTeX file presenting all lug information for publication in
+ two-column format:
+ <td>
+ <a href="lugs.tex">LaTeX source</a>
+ <td>
+ <table>
+ <tr>
+ <td>
+ <a href="lugs.pdf">PDF</a>
+ <tr>
+ <td>
+ <a href="lugs.html">HTML</a>
+ </table>
+ <td>
+ <tr>
+ <td>Obtain a LaTeX file containing labels with addresses of all lugs,
+ where you can send your publication:
+ <td>
+ <a href="labels.tex">LaTeX source</a>
+ <td>
+ <a href="labels.pdf">PDF</a>
+ <td>
</table>
- </td>
- <td><table>
- $content
- </table></td></tr></table>
- <!--#include virtual="../1blok4e.inc" -->
- <!--#config timefmt="%Y-%m-%d %H:%M" -->
- <!--#echo var="LAST_MODIFIED" -->
- by <a href="mailto:$adminemail">$adminemail</a>
- </p></div></body></html>
- EOF
+ <!--#include virtual="/ssi/footer-en.html" -->
+ EOD
}
-<<'DOC' #------ function makelugs.html -----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makelugs.html
-parameters: -
+synopsis: makelugs.html
description: Create the file |lugs.html|
globals set: (/via/ setkeys) |keys|
globals used: db keys fullname
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelugs.html() {
- local linkline=$(for l in ${db[@]}; do echo "<a href=\"#$l\">$l</a>"; done)
- local i l lug www
- { cat <<-EOF
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <script language="Javascript" type="text/javascript">
- <!--
- if (top.location != location) top.location.href = location.href;
- -->
- </script>
- <title>All TeX User Groups</title>
- <style type="text/css">
- <!--
- body {
- margin-top: 8pt;
- margin-left: 8pt;
- color: #777;
- background: white;
- font-family: Cambria, sans-serif;
- font-size:110%;
- }
- H1, H2, H3, H4 { color: navy; }
- a:link { color: navy; }
- a:visited { color: green; }
- a:active { color: red; }
- td.label {
- text-align: right;
- }
- td.addr {
- text-align: right;
- vertical-align:top;
- }
- .nounderline A {text-decoration:none; font-weight:bold}
- th.kop {
- background-color:#aaa;
- color:black;
- vertical-align:middle;
- text-align:left;
- font-size:150%;
- line-height:200%;
- }
- th.sub {
- color:navy;
- text-align:left;
- font-size:120%;
- }
- -->
- </style>
- </head>
- <body>
- <h1>TeX user groups around the world</h1>
- The TeX Users Group (contact info below) serves as the local user
- group (LUG) of TeX users in North America and any other area or
- language not appearing in the following list. TUG is always
- interested in fostering the formation of local TeX users groups;
- please contact the TUG board (board at tug.org) for assistance,
- such as forwarding information about others who might be
- interested, publicity, arranging joint memberships and so on.
+ local i
+ # create lugs.inc
+ echo '<p>' >lugs.inc
+ for i in $db; do echo "<a href=\"#$i\">$i</a>"; done >>lugs.inc
+ # create lugs.html:
+ { cat <<-EOD
+ <!--#set var="title" value="TeX User Groups around the world" -->
+ <!--#include virtual="/ssi/header-en.html" -->
<p>
- See also:
+ The TeX Users Group (contact info
+ below) serves as the local user group (LUG) of TeX users in North America
+ and any other area or language not appearing in the following list. TUG is
+ always interested in fostering the formation of local TeX users groups;
+ please contact the TUG board (board at tug.org) for assistance, such as
+ forwarding information about others who might be interested, publicity,
+ arranging joint memberships and so on. See also:
<ul>
- <li>The TeX calendar (
- <a href="http://texcalendar.dante.de/month.php">month view</a>,
- <a href="http://texcalendar.dante.de/year.php">year view</a>
- ) for user group activities.
- <li>The <a href="http://www.tug.org/calendar.html">TUG Calendar</a> for general TeX and other typographic activities.
- <li>The list of <a href="http://www.tug.org/pubs.html">user group publications and journals</a>.
- <li>This same information in <a href="lugs.pdf">PDF</a> and in <a href="lugs.tex">LaTeX</a>.
- </ul>
+ <li>The TeX calendar (
+ <a href="http://texcalendar.dante.de/month.php">month view</a>,
+ <a href="http://texcalenmakelugs.htmldar.dante.de/year.php">year view</a>
+ ) for user group activities.
+ <li>The <a href="http://www.tug.org/calendar.html">TUG Calendar</a> for
+ general TeX and other typographic activities.
+ <li>The list of <a href="http://www.tug.org/pubs.html">user group
+ publications and journals</a>.
+ <li>This same information in <a href="lugs.pdf">PDF</a> and in <a href=
+ "lugs.tex">LaTeX</a>.
+ </ul>This information comes from the <a href=
+ "http://www.ntg.nl/lug/index.html">Electronic LUG Database</a>: you can
+ correct or add information there.<br />
+ The following links bring you straight to the individual user group
+ correction forms:
<p>
- This information comes from the
- <a href="http://www.ntg.nl/lug/index.html">Electronic LUG Database</a>:
- you can correct or add information there.<br>The following links
- bring you straight to the individual user group correction forms:<p>
- <strong>
- EOF
- for i in ${db[@]}; do
- echo " <a href=\"http://www.ntg.nl/lug/$i.html\">$i</a>"
+ EOD
+ for i in $db; do
+ echo " <a href=\"http://www.ntg.nl/lug/$i.html\">$i</a>"
done
- cat <<-EOF
- </strong>
+ cat <<-EOD
<p>
Below, a similar line of links just above
- every LUG header can be used to wander between the LUG info records in this document.<hr>
- <table summary="lugs">
- EOF
- for lug in ${db[@]}; do
- setkeys $lug '<br>' '&amp;'
- www=${keys[www]}
- [[ -n $www ]] && www="<a href=\"http://$www\">$www</a>"
- cat <<-EOF
- <tr><td colspan="2"><br>$linkline</td></tr>
-
- <tr><th class="kop" colspan="2">&nbsp;<img src="./images/$lug.png"/>&nbsp;<a name="$lug">$lug - ${fullname[$lug]}</a></th></tr>
- <tr><td class="label">short name: </td><td>${keys[short]}</td></tr>
- <tr><td class="label">full name: </td><td>${keys[full]}</td></tr>
- <tr><td class="label">language: </td><td>${keys[lang]}</td></tr>
- <tr><td class="label">members: </td><td>${keys[members]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[email]}</td></tr>
- <tr><td class="label">web site: </td><td>$www</td></tr>
- <tr><td class="label">discussion list:</td><td>${keys[list]}</td></tr>
- <tr><td class="label">subscribe at: </td><td>${keys[subscr]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[addr]}</td></tr>
-
- <tr><th class="sub" colspan="2">Periodical</th></tr>
- <tr><td class="label">title: </td><td>${keys[publ]}</td></tr>
- <tr><td class="label">editor: </td><td>${keys[editor]}</td></tr>
- <tr><td class="label">editor email: </td><td>${keys[eemail]}</td></tr>
-
- <tr><th class="sub" colspan="2">Banking</th></tr>
- <tr><td class="label">name: </td><td>${keys[bank]}</td></tr>
- <tr><td class="label">account: </td><td>${keys[bacc]}</td></tr>
- <tr><td class="label">(swift) code: </td><td>${keys[bcode]}</td></tr>
- <tr><td class="label">routing no.: </td><td>${keys[brout]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[baddr]}</td></tr>
-
- <tr><th class="sub" colspan="2">${keys[ppos]:-President}</th></tr>
- <tr><td class="label">name: </td><td>${keys[pname]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[paddr]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[pemail]}</td></tr>
- <tr><td class="label">phone: </td><td>${keys[pphone]}</td></tr>
- <tr><td class="label">fax: </td><td>${keys[pfax]}</td></tr>
-
- <tr><th class="sub" colspan="2">${keys[gpos]:-Secretary}</th></tr>
- <tr><td class="label">name: </td><td>${keys[gname]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[gaddr]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[gemail]}</td></tr>
- <tr><td class="label">phone: </td><td>${keys[gphone]}</td></tr>
- <tr><td class="label">fax: </td><td>${keys[gfax]}</td></tr>
-
- <tr><th class="sub" colspan="2">${keys[fpos]:-Treasurer}</th></tr>
- <tr><td class="label">name: </td><td>${keys[fname]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[faddr]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[femail]}</td></tr>
- <tr><td class="label">phone: </td><td>${keys[fphone]}</td></tr>
- <tr><td class="label">fax: </td><td>${keys[ffax]}</td></tr>
- EOF
+ every LUG header can be used to wander between the LUG info records
+ in this document.
+ <hr>
+ <table>
+ EOD
+ for i in $db; do
+ setkeys "$i" '<br/>' '&amp;'
+ w=${keys[www]}
+ [[ -n $w ]] && w="<a href=\"http://$w\">$w</a>"
+ cat <<-EOD
+ <tr><td colspan="2"><!--#include virtual="lugs.inc" -->
+ <tr><th class="kop"><img src="images/$i.png" width="48" alt="flag"><th class="kop" id="$i">$i - ${fullname[$i]}
+ <tr><td class="r">short name: <td>${keys[short]}
+ <tr><td class="r">full name: <td>${keys[full]}
+ <tr><td class="r">language: <td>${keys[lang]}
+ <tr><td class="r">members: <td>${keys[members]}
+ <tr><td class="r">email: <td>${keys[email]}
+ <tr><td class="r">web site: <td>$w
+ <tr><td class="r">discussion list:<td>${keys[list]}
+ <tr><td class="r">subscribe at: <td>${keys[subscr]}
+ <tr><td class="tr">address: <td>${keys[addr]}
+ <tr><td class="h3" colspan="2">Periodical
+ <tr><td class="r">title: <td>${keys[publ]}
+ <tr><td class="r">editor: <td>${keys[editor]}
+ <tr><td class="r">editor email:<td>${keys[eemail]}
+ <tr><td class="h3" colspan="2">Banking
+ <tr><td class="r">name: <td>${keys[bank]}
+ <tr><td class="r">account: <td>${keys[bacc]}
+ <tr><td class="r">(swift) code:<td>${keys[bcode]}
+ <tr><td class="r">routing no.: <td>${keys[brout]}
+ <tr><td class="tr">address: <td>${keys[baddr]}
+ <tr><td class="h3" colspan="2">${keys[ppos]:-President}
+ <tr><td class="r">name: <td>${keys[pname]}
+ <tr><td class="tr" >address: <td>${keys[paddr]}
+ <tr><td class="r">email: <td>${keys[pemail]}
+ <tr><td class="r">phone: <td>${keys[pphone]}
+ <tr><td class="r">fax: <td>${keys[pfax]}
+ <tr><td class="h3" colspan="2">${keys[gpos]:-Secretary}
+ <tr><td class="r">name: <td>${keys[gname]}
+ <tr><td class="tr">address: <td>${keys[gaddr]}
+ <tr><td class="r">email: <td>${keys[gemail]}
+ <tr><td class="r">phone: <td>${keys[gphone]}
+ <tr><td class="r">fax: <td>${keys[gfax]}
+ <tr><td class="h3" colspan="2">${keys[fpos]:-Treasurer}
+ <tr><td class="r">name: <td>${keys[fname]}
+ <tr><td class="tr">address: <td>${keys[faddr]}
+ <tr><td class="r">email: <td>${keys[femail]}
+ <tr><td class="r">phone: <td>${keys[fphone]}
+ <tr><td class="r">fax: <td>${keys[ffax]}
+ EOD
done
- echo "</table></body></html>"
- } | sed '/^$/d;/<\/td><td><\/td><\/tr>$/d' |
- tac | # reverse and go looking for <h3> headers with no content
- while read -r l; do
- if [[ $l =~ :\ *\</td\> ]]; then # content line?
- keep=true # yes, keep <h3> header
- elif [[ $l =~ class=\"sub\" ]]; then # sub header?
- $keep || continue # keep it if keep was set true, skip otherwise
- keep=false # not a content line, so set keep false
+ cat <<-EOD
+ </table>
+ <!--#include virtual="/ssi/footer-en.html" -->
+ EOD
+ } | sed '/^$/d;/<td>$/d' |
+ tac | # reverse and go looking for headers with no content
+ while read -r i; do
+ local keep
+ if [[ $i =~ :\ *\<td\> ]]; then # content line?
+ keep=true # yes, keep header
+ elif [[ $i =~ (\<img|span=) ]]; then # header?
+ $keep || continue # keep it if keep was set true, skip otherwise
+ keep=false # not a content line, so set keep false
else
- keep=false # not a content line, so set keep false
+ keep=false # not a content line, so set keep false
fi
- echo "$l"
+ echo "$i"
done |
- tac |
- utf82html >lugs.html
+ tac >lugs.html
}
-<<'DOC' #------ function makelugs.pdf ------------------------------------------
+
+:<<'DOC' #----------------------------------------------------------------------
+= urlit
+synopsis: urlit string
+description: if argument is not empty, print it surrounded with |\url{...}|,
+DOC
+#-------------------------------------------------------------------------------
+urlit () {
+ if [[ -n $1 ]]; then
+ printf '\\url{%s}' "$1"
+ fi
+}
+
+:<<'DOC' #----------------------------------------------------------------------
+= stackit
+synopsis: stackit string
+description: if argument is empty, print newline,
+ if not, replace semicolons with double backslashes and print it
+ surrounded with |\Longunderstack[l]{...}\strut|
+DOC
+#-------------------------------------------------------------------------------
+stackit () {
+ if [[ -z $1 ]]; then
+ echo
+ else
+ printf '\\Longunderstack[l]{%s\\strut}' "${1//;/\\\\}"
+ fi
+}
+
+
+:<<'DOC' #----------------------------------------------------------------------
= makelugs.pdf
-parameters: -
-description: Create the files |lug.tex| and |lugs.pdf|
+synopsis: makelugs.pdf
+description: Create the files |lugs.tex| and |lugs.pdf|
globals set: (/via/ setkeys) |keys|
globals used: keys db fullname
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelugs.pdf() {
- local l lug
- { cat <<-'EOF'
- %!xelatex
+ local i
+ { cat <<-'EOD'
+ %!lualatex
\documentclass[10pt]{article}
\usepackage[a4paper,margin=25mm]{geometry}
+
\usepackage{textcomp}
\usepackage{fontspec}
\usepackage{url}
@@ -811,403 +782,1412 @@ makelugs.pdf() {
#2}\nopagebreak}
\def\subhead#1{\\{\bfseries\upshape #1:}}
\begin{document}\fontspec{FreeSans}
- EOF
- for lug in ${db[@]}; do
- setkeys $lug '\\' '\&'
- cat <<-EOF
+ EOD
+ for i in $db; do
+ setkeys "$i" "\\\\" '\&'
+ cat <<-EOD
\begin{mylist}
- \head{$lug}{${fullname[$lug]}}
+ \head{$i}{${fullname[$i]}}
\item[short name] ${keys[short]}
\item[full name] ${keys[full]}
\item[language] ${keys[lang]}
- \item[members] ${keys[members]}
- \item[email] ${keys[email]:+$(echo "\\url{${keys[email]}}")}
- \item[web site] ${keys[www]:+$(echo "\\url{${keys[www]}}")}
+ \item[members] ${keys[members]}
+ \item[email] $(urlit "${keys[email]}")
+ \item[web site] $(urlit "${keys[www]}")
\item[discussion list]${keys[list]}
\item[subscribe at] ${keys[subscr]}
- \item[address] ${keys[addr]:+$(echo "\\Longunderstack[l]{${keys[addr]//;/\\\\}\\strut}")}
+ \item[address] $(stackit "${keys[addr]}")
\subhead{Periodical}
- \item[title] ${keys[publ]}
- \item[editor] ${keys[editor]}
- \item[editor email] ${keys[eemail]:+$(echo "\\url{${keys[eemail]}}")}
+ \item[title] ${keys[publ]}
+ \item[editor] ${keys[editor]}
+ \item[editor email] $(urlit "${keys[eemail]}")
\subhead{Banking}
- \item[name] ${keys[bank]}
- \item[account] ${keys[bacc]}
+ \item[name] ${keys[bank]}
+ \item[account] ${keys[bacc]}
\item[(swift) code] ${keys[bcode]}
\item[routing no.] ${keys[brout]}
- \item[address] ${keys[baddr]:+$(echo "\\Longunderstack[l]{${keys[baddr]//;/\\\\}\\strut}")}
+ \item[address] $(stackit "${keys[baddr]}")
\subhead{${keys[ppos]:-President}}
- \item[name] ${keys[pname]}
- \item[address] ${keys[paddr]:+$(echo "\\Longunderstack[l]{${keys[paddr]//;/\\\\}\\strut}")}
- \item[email] ${keys[pemail]:+$(echo "\\url{${keys[pemail]}}")}
- \item[phone] ${keys[pphone]}
- \item[fax] ${keys[pfax]}
+ \item[name] ${keys[pname]}
+ \item[address] $(stackit "${keys[paddr]}")
+ \item[email] $(urlit "${keys[pemail]}")
+ \item[phone] ${keys[pphone]}
+ \item[fax] ${keys[pfax]}
\subhead{${keys[gpos]:-Secretary}}
- \item[name] ${keys[gname]}
- \item[address] ${keys[gaddr]:+$(echo "\\Longunderstack[l]{${keys[gaddr]//;/\\\\}\\strut}")}
- \item[email] ${keys[gemail]:+$(echo "\\url{${keys[gemail]}}")}
- \item[phone] ${keys[gphone]}
- \item[fax] ${keys[gfax]}
+ \item[name] ${keys[gname]}
+ \item[address] $(stackit "${keys[gaddr]}")
+ \item[email] ${keys[gemail]}
+ \item[phone] ${keys[gphone]}
+ \item[fax] ${keys[gfax]}
\subhead{${keys[fpos]:-Treasurer}}
- \item[name] ${keys[fname]}
- \item[address] ${keys[faddr]:+$(echo "\\Longunderstack[l]{${keys[faddr]//;/\\\\}\\strut}")}
- \item[email] ${keys[femail]:+$(echo "\\url{${keys[femail]}}")}
- \item[phone] ${keys[fphone]}
- \item[fax] ${keys[ffax]}
+ \item[name] ${keys[fname]}
+ \item[address] $(stackit "${keys[faddr]}")
+ \item[email] $(urlit "${keys[femail]}")
+ \item[phone] ${keys[fphone]}
+ \item[fax] ${keys[ffax]}
\end{mylist}
- EOF
+ EOD
done
echo '\end{document}'
} |
- sed '/^\\item\[.*\] *$/d;/^$/d' |
+ sed '/^\\item\[.*\]\s*$/d;/^$/d' |
tac | # reverse and go looking for \subhead headers with no content
- while read -r l; do
- if [[ $l =~ ^\\item ]]; then # content line?
- keep=true # yes, keep <h3> header
- elif [[ $l =~ ^\\subhead ]]; then # \subhead header?
- $keep || continue # keep it if keep was set true, skip otherwise
- keep=false # not a content line, so set keep false
+ while read -r i; do
+ local keep
+ if [[ $i =~ ^\\item ]]; then # content line?
+ keep=true # yes, keep header
+ elif [[ $i =~ ^\\subhead ]]; then # header?
+ $keep || continue # keep it if keep was set true, skip otherwise
+ keep=false # not a content line, so set keep false
else
- keep=false # not a content line, so set keep false
+ keep=false # not a content line, so set keep false
fi
- echo "$l"
+ echo "$i"
done |
tac >lugs.tex
- mk --noprint --noview lugs.tex &&
- mk -c lugs.tex ||
+ if lualatex lugs.tex >/dev/null; then
+ rm lugs.{aux,log}
+ else
die "Problems compiling lugs.tex"
+ fi
}
-<<'DOC' #------ function makelabels.pdf ----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makelabels.pdf
-parameters: -
-description: Create the file |labels.tex| and |labels.pdf|
+synopsis: makelabels.pdf
+description: Create the files |labels.tex| and |labels.pdf|
globals set: (/via/ setkeys) |keys|
globals used: keys db
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelabels.pdf() {
- local a i lug
- { cat <<-'EOF'
- %!xelatex
+ local a i j
+ { cat <<-'EOD'
+ %!lualatex
\documentclass{article}
\usepackage{labels,fontspec}
\LabelRows=8\LabelCols=3
\TopBorder=0mm\BottomBorder=0mm
\LeftBorder=7mm\RightBorder=7mm
\begin{document}\fontspec{FreeSans}\begin{labels}
- EOF
- for lug in ${db[@]}; do
- setkeys $lug "\n" '\&'
- a=
- for i in addr gaddr paddr faddr; do
- if [[ -n ${keys[$i]} ]]; then
- a=${keys[$i]}
- break
- fi
- done
- [[ -n $a ]] || continue
- echo -e "${keys[short]:-${keys[full]}}\n$a\n"
+ EOD
+ for i in $db; do
+ setkeys "$i" "\n" '\&'
+ a=
+ for j in addr gaddr paddr faddr; do
+ if [[ -n ${keys[$j]} ]]; then
+ a=${keys[$j]}
+ break
+ fi
+ done
+ [[ -n $a ]] || continue
+ echo -e "${keys[short]:-${keys[full]}}\n$a\n"
done
- echo '\end{labels}\end{document}'
+ echo '\end{labels}\end{document}'
} >labels.tex
- mk --noprint --noview labels.tex &&
- mk -c labels.tex ||
+ if lualatex labels.tex >/dev/null; then
+ rm labels.{aux,log}
+ else
die "Problems compiling labels.tex"
+ fi
}
-<<'DOC' #----------- fullname -----------------------------
+:<<'DOC' #----------------------------------------------------------------------
= fullname (hash)
Links the country codes to the full name of countries.
Also used to test the validity of country codes.
DOC
-#----------------------------------------------------------
+#-------------------------------------------------------------------------------
declare -A fullname=(
- [ad]='Andorra' [ky]='Cayman Islands'
+ [ad]='Andorra' [ky]='Cayman Islands'
[ae]='United Arab Emirates' [kz]='Kazakhstan'
- [af]='Afghanistan' [la]='Laos'
+ [af]='Afghanistan' [la]='Laos'
[ag]='Antigua and Barbuda' [lb]='Lebanon'
- [ai]='Anguilla' [li]='Liechtenstein'
- [al]='Albania' [lk]='Sri Lanka'
- [am]='Armenia' [lr]='Liberia'
+ [ai]='Anguilla' [li]='Liechtenstein'
+ [al]='Albania' [lk]='Sri Lanka'
+ [am]='Armenia' [lr]='Liberia'
[an]='Netherlands Antilles' [ls]='Lesotho'
- [ao]='Angola' [lt]='Lithuania'
- [ar]='Argentina' [lu]='Luxembourg'
- [as]='American Samoa' [lv]='Latvia'
- [at]='Austria' [ly]='Libya'
- [au]='Australia' [ma]='Morocco'
- [aw]='Aruba' [mc]='Monaco'
- [az]='Azerbaijan' [md]='Moldova'
+ [ao]='Angola' [lt]='Lithuania'
+ [ar]='Argentina' [lu]='Luxembourg'
+ [as]='American Samoa' [lv]='Latvia'
+ [at]='Austria' [ly]='Libya'
+ [au]='Australia' [ma]='Morocco'
+ [aw]='Aruba' [mc]='Monaco'
+ [az]='Azerbaijan' [md]='Moldova'
[ba]='Bosnia and Herzegovina' [mg]='Madagascar'
- [bb]='Barbados' [mh]='Marshall Islands'
- [bd]='Bangladesh' [mk]='Macedonia'
- [be]='Belgium' [ml]='Mali'
- [bf]='Burkina Faso' [mm]='Myanmar'
- [bg]='Bulgaria' [mn]='Mongolia'
- [bh]='Bahrain' [mo]='Macau'
- [bi]='Burundi' [mp]='Northern Marianas Islands'
- [bj]='Benin' [mq]='Martinique'
- [bm]='Bermuda' [mr]='Mauritania'
- [bn]='Brunei' [ms]='Montserrat'
- [bo]='Bolivia' [mt]='Malta'
- [br]='Brazil' [mu]='Mauritius'
- [bs]='Bahamas' [mv]='Maldives'
- [bt]='Bhutan' [mw]='Malawi'
- [bw]='Botswana' [mx]='Mexico'
- [by]='Belarus' [my]='Malaysia'
- [bz]='Belize' [mz]='Mozambique'
- [ca]='Canada' [na]='Namibia'
+ [bb]='Barbados' [mh]='Marshall Islands'
+ [bd]='Bangladesh' [mk]='Macedonia'
+ [be]='Belgium' [ml]='Mali'
+ [bf]='Burkina Faso' [mm]='Myanmar'
+ [bg]='Bulgaria' [mn]='Mongolia'
+ [bh]='Bahrain' [mo]='Macau'
+ [bi]='Burundi' [mp]='Northern Marianas Islands'
+ [bj]='Benin' [mq]='Martinique'
+ [bm]='Bermuda' [mr]='Mauritania'
+ [bn]='Brunei' [ms]='Montserrat'
+ [bo]='Bolivia' [mt]='Malta'
+ [br]='Brazil' [mu]='Mauritius'
+ [bs]='Bahamas' [mv]='Maldives'
+ [bt]='Bhutan' [mw]='Malawi'
+ [bw]='Botswana' [mx]='Mexico'
+ [by]='Belarus' [my]='Malaysia'
+ [bz]='Belize' [mz]='Mozambique'
+ [ca]='Canada' [na]='Namibia'
[cf]='Central African Republic' [nc]='New Caledonia'
- [cg]='Congo' [ne]='Niger'
- [ch]='Switzerland' [nf]='Norfolk Island'
- [ci]='Ivory Coast' [ng]='Nigeria'
- [ck]='Cook Islands' [ni]='Nicaragua'
- [cl]='Chile' [nl]='Netherlands'
- [cm]='Cameroon' [no]='Norway'
- [cn]='China' [nr]='Nauru'
- [co]='Colombia' [nu]='Niue'
- [cr]='Costa Rica' [nz]='New Zealand'
- [cu]='Cuba' [om]='Oman'
+ [cg]='Congo' [ne]='Niger'
+ [ch]='Switzerland' [nf]='Norfolk Island'
+ [ci]='Ivory Coast' [ng]='Nigeria'
+ [ck]='Cook Islands' [ni]='Nicaragua'
+ [cl]='Chile' [nl]='Netherlands'
+ [cm]='Cameroon' [no]='Norway'
+ [cn]='China' [nr]='Nauru'
+ [co]='Colombia' [nu]='Niue'
+ [cr]='Costa Rica' [nz]='New Zealand'
+ [cu]='Cuba' [om]='Oman'
[cv]='Cape Verde Islands' [pa]='Panama'
- [cy]='Cyprus' [pe]='Peru'
- [cz]='Czech Republic' [pf]='French Polynesia'
- [de]='Germany' [pg]='Papua New Guinea'
- [dj]='Djibouti' [ph]='Philippines'
- [dk]='Denmark' [pk]='Pakistan'
- [dm]='Dominica' [pl]='Poland'
+ [cy]='Cyprus' [pe]='Peru'
+ [cz]='Czech Republic' [pf]='French Polynesia'
+ [de]='Germany' [pg]='Papua New Guinea'
+ [dj]='Djibouti' [ph]='Philippines'
+ [dk]='Denmark' [pk]='Pakistan'
+ [dm]='Dominica' [pl]='Poland'
[do]='Dominican Republic' [pm]='St Pierre and Miquelon'
- [dz]='Algeria' [pr]='Puerto Rico'
- [ec]='Ecuador' [pt]='Portugal'
- [ee]='Estonia' [pw]='Palau'
- [eg]='Egypt' [py]='Paraguay'
- [eh]='Western Samoa' [qa]='Qatar'
- [er]='Eritrea' [re]='Reunion'
- [es]='Spain' [ro]='Romania'
- [esc]='Spain (Catalan)' [ru]='Russia'
- [et]='Ethiopia' [rw]='Rwanda'
- [fi]='Finland' [sa]='Saudi Arabia'
- [fj]='Fiji Islands' [sb]='Solomon Islands'
- [fk]='Falkland Islands' [sc]='Seychelles Islands'
- [fm]='Micronesia' [sd]='Sudan'
- [fo]='Faroe Islands' [se]='Sweden'
- [fr]='France' [sg]='Singapore'
- [ga]='Gabon' [si]='Slovenia'
- [gb]='United Kingdom' [sk]='Slovak Republic'
- [gd]='Grenada' [sl]='Sierra Leone'
- [ge]='Georgia' [sm]='San Marino'
- [gf]='French Guiana' [sn]='Senegal'
- [gh]='Ghana' [so]='Somalia'
- [gi]='Gibraltar' [sr]='Suriname'
- [gl]='Greenland' [sv]='El Salvador'
- [gm]='Gambia' [sy]='Syria'
- [gn]='Guinea' [sz]='Swaziland'
- [gp]='Guadeloupe' [tc]='Turks and Caicos Islands'
- [gq]='Equatorial Guinea' [td]='Chad'
- [gr]='Greece' [tg]='Togo'
- [gt]='Guatemala' [th]='Thailand'
- [gu]='Guam' [tj]='Tajikistan'
- [gw]='Guinea-Bissau' [tk]='Tokelau'
- [gy]='Guyana' [tm]='Turkmenistan'
- [hk]='Hong Kong' [tn]='Tunisia'
- [hn]='Honduras' [to]='Tonga Islands'
- [hr]='Croatia' [tp]='East Timor'
- [ht]='Haiti' [tr]='Turkey'
- [hu]='Hungary' [tt]='Trinidad and Tobago'
- [id]='Indonesia' [tv]='Tuvalu'
- [ie]='Ireland' [tw]='Taiwan'
- [il]='Israel' [tz]='Tanzania'
- [in]='India' [ua]='Ukraine'
- [iq]='Iraq' [ug]='Uganda'
- [ir]='Iran' [us]='TeX User Group (International)'
- [is]='Iceland' [uy]='Uruguay'
- [it]='Italy' [uz]='Uzbekistan'
- [jm]='Jamaica' [ve]='Venezuela'
- [jo]='Jordan' [vg]='Virgin Islands (GB)'
- [jp]='Japan' [vi]='Virgin Islands (US)'
- [ke]='Kenya' [vn]='Vietnam'
- [kg]='Kyrgyzstan' [vu]='Vanuatu'
- [kh]='Cambodia' [wf]='Wallis and Futuna Islands'
- [ki]='Kiribati' [ye]='Yemen'
- [km]='Comoros' [yt]='Mayotte Island'
+ [dz]='Algeria' [pr]='Puerto Rico'
+ [ec]='Ecuador' [pt]='Portugal'
+ [ee]='Estonia' [pw]='Palau'
+ [eg]='Egypt' [py]='Paraguay'
+ [eh]='Western Samoa' [qa]='Qatar'
+ [er]='Eritrea' [re]='Reunion'
+ [es]='Spain' [ro]='Romania'
+ [esc]='Spain (Catalan)' [ru]='Russia'
+ [et]='Ethiopia' [rw]='Rwanda'
+ [fi]='Finland' [sa]='Saudi Arabia'
+ [fj]='Fiji Islands' [sb]='Solomon Islands'
+ [fk]='Falkland Islands' [sc]='Seychelles Islands'
+ [fm]='Micronesia' [sd]='Sudan'
+ [fo]='Faroe Islands' [se]='Sweden'
+ [fr]='France' [sg]='Singapore'
+ [ga]='Gabon' [si]='Slovenia'
+ [gb]='United Kingdom' [sk]='Slovak Republic'
+ [gd]='Grenada' [sl]='Sierra Leone'
+ [ge]='Georgia' [sm]='San Marino'
+ [gf]='French Guiana' [sn]='Senegal'
+ [gh]='Ghana' [so]='Somalia'
+ [gi]='Gibraltar' [sr]='Suriname'
+ [gl]='Greenland' [sv]='El Salvador'
+ [gm]='Gambia' [sy]='Syria'
+ [gn]='Guinea' [sz]='Swaziland'
+ [gp]='Guadeloupe' [tc]='Turks and Caicos Islands'
+ [gq]='Equatorial Guinea' [td]='Chad'
+ [gr]='Greece' [tg]='Togo'
+ [gt]='Guatemala' [th]='Thailand'
+ [gu]='Guam' [tj]='Tajikistan'
+ [gw]='Guinea-Bissau' [tk]='Tokelau'
+ [gy]='Guyana' [tm]='Turkmenistan'
+ [hk]='Hong Kong' [tn]='Tunisia'
+ [hn]='Honduras' [to]='Tonga Islands'
+ [hr]='Croatia' [tp]='East Timor'
+ [ht]='Haiti' [tr]='Turkey'
+ [hu]='Hungary' [tt]='Trinidad and Tobago'
+ [id]='Indonesia' [tv]='Tuvalu'
+ [ie]='Ireland' [tw]='Taiwan'
+ [il]='Israel' [tz]='Tanzania'
+ [in]='India' [ua]='Ukraine'
+ [iq]='Iraq' [ug]='Uganda'
+ [ir]='Iran' [us]='TeX Users Group (International)'
+ [is]='Iceland' [uy]='Uruguay'
+ [it]='Italy' [uz]='Uzbekistan'
+ [jm]='Jamaica' [ve]='Venezuela'
+ [jo]='Jordan' [vg]='Virgin Islands (GB)'
+ [jp]='Japan' [vi]='Virgin Islands (US)'
+ [ke]='Kenya' [vn]='Vietnam'
+ [kg]='Kyrgyzstan' [vu]='Vanuatu'
+ [kh]='Cambodia' [wf]='Wallis and Futuna Islands'
+ [ki]='Kiribati' [ye]='Yemen'
+ [km]='Comoros' [yt]='Mayotte Island'
[kn]='St Kitts and Nevis' [yu]='Yugoslavia'
- [kp]='Korea (North)' [za]='South Africa'
- [kr]='Korea (South)' [zm]='Zambia'
- [kw]='Kuwait' [zw]='Zimbabwe'
+ [kp]='Korea (North)' [za]='South Africa'
+ [kr]='Korea (South)' [zm]='Zambia'
+ [kw]='Kuwait' [zw]='Zimbabwe'
)
-<<'DOC' #----------- keys, inp ----------------------------
-= keys, inp (hashes)
-Depending on which lug is handled, |keys| will contain the
-key and values defined in the files in |lugs/|.
-In an edit operation, |inp| will be filled with similar
-keys and values that will replace those in keys.
-DOC
-#----------------------------------------------------------
+# =============== Program starts here =============
+
+# Are all executables there?
+excheck getopt uudecode uuencode lualatex rsync sed tac mktemp
+
+# Depending on which lug is handled, |keys| will contain the
+# key and values defined in the files in |lugs/|.
+# In an edit operation, |inp| will be filled with similar
+# keys and values that will replace those in keys.
declare -A keys inp
-<<'DOC' #------------- db ---------------------------------
-= db (string)
-Contains the space-separated country codes for which data
-are available in the |lugs/| directory.
-DOC
-#----------------------------------------------------------
-db=$(test -d lugs && cd lugs && ls | tr "\n" " ")
+# webdirectory where the --sync option places the new data:
+webdir=www.ntg.nl:/var/www/ntg.nl/www/htdocs/
+
+# Contains the email address that should receive corrections
+# from the web site.
+adminemail=wybo@ntg.nl
+
+# This lug-script must be in either an empty directory
+# (where a lug web page will be generated), or in an
+# existing web page directory:
+i=$(realpath "$0")
+i=${i%/lug}
+cd "$i" || die "could not cd to $i}"
+if [[ $1 =~ --?[HhV] ]]; then
+ : # go on
+elif [[ $(ls) == 'lug' ]]; then
+ # if we got in a directory containing only the lug script, then we
+ # setup from scratch:
+ Warn 'This looks like your first run of the lug script' \
+ 'so I will set up auxilliary files and then quit' \
+ '(this will take some time...)'
+ tmp=$(mktemp)
+ uudecode lug > "$tmp"
+ unzip -qq "$tmp"
+ rm "$tmp"
+ db="$(cd lugs && echo [a-z]*)" # db='bg br ca...'
+ makeMakefile
+ make --quiet || die "errors running make"
+ clean
+elif [ -d lugs ] && [ -d images ] && [ -e lug ] && [ -e lugs.rb ]; then
+ : # go on
+else
+ die 'The lug script must run in an otherwise empty directory, or' \
+ ' in a directory containing all LUG data. You must run it in' \
+ ' that directory, or you must make a link to the lug script' \
+ ' in your PATH.' \
+ ' If this is the first time you run lug, move it to an empty' \
+ ' directory and run it from there; it will create everything' \
+ ' in that directory to make it a copy of the remote web site.'
+fi
-<<'DOC' #------------- admin ------------------------------
-= admin (string)
-Contains the user name of the lug administrator at www.ntg.nl
-DOC
-#----------------------------------------------------------
-admin=wybo
+# for the help and version options, the lugs dir may be absent:
+test -d ./lugs && db="$(cd lugs && echo [a-z]*)" # db='bg br ca...'
-<<'DOC' #------------- adminemail -------------------------
-= adminemail (string)
-Contains the email address that should receive corrections
-from the web site.
-DOC
-#----------------------------------------------------------
-adminemail=wybo@dekkerdocumenten.nl
+handle_options "$@"
+set -- "${args[@]}"
-# =============== Program starts here =============
-source=$(readlink $0 || echo ./lug)
-cd ${source%/lug}
-test -d lugs -a -e lug ||
- die "The lug script is part of a directory containing all LUG data;\n" \
- " You must run (an exact copy of) it in that directory,\n" \
- " or you must make a link to the lug script in your PATH"
-diff ./lug $0 >/dev/null || die "You are running a copy of the lug script that differs from its source"
-
-if ! options=$(getopt \
- -n $myname \
- -o hHVIcfe:s:: \
- -l help,Help,version,clean,full,extras:,sync:: \
- -- "$@"
-); then exit 1; fi
-eval set -- "$options"
-while [ $# -gt 0 ]; do
- case $1 in
- (-h|--help) help;;
- (-H|--Help) helpall;;
- (-V|--version) version;;
- (-I) install;;
- (-c|--clean) Clean
- exit;;
- (-f|--full) Clean
- makeutf82html.c
- makeMakefile
- make --quiet
- clean
- exit;;
- (-e|--extras) eval "make$2"
- exit;;
- (-s|--sync) i=${2:-lug}
- n=$(ls -R|wc -l)
- test $n -lt 70 && die "Only $n files here, can't sync"
- echo syncing with www.ntg.nl/$i
- rsync -ia --delete --exclude='.hg*' ./ $admin@www.ntg.nl:html/$i/
- exit;;
- (--) shift; break;;
- (*) break;;
- esac
+# any arguments are country codes for which an html files are created:
+for i; do
+ makexx.html "$i"
done
-
-if [ -n "$1" ]; then
- for i in "$@"; do
- makexx.html $i
- done
- exit
-fi
+[ $# -gt 0 ] && exit
in=false
echo waiting for input...
-while IFS='' read line; do
+while IFS='' read -r line; do
+ line=$(sed -e 's/^\s\+//;s/\s\+$//' <<<"$line") # trim
[[ -z $line ]] && continue # skip empty lines
- if [[ $line =~ ^code= ]]; then # we get here only with manual input
+ if [[ $line =~ ^code= ]]; then # we get here only with manual input
in=true # of a few lines; those must start with code=
inp[code]=${line#*=}
fi
[[ $line == 'password=kjwb' ]] && { in=true; continue; }
$in || continue # look only after "password=kjwb"
- [[ $line =~ =$ ]] && continue
if [[ $line =~ = ]]; then
- IFS='=' read k v <<<$line
+ IFS='=' read -r k v <<<"$line"
inp[$k]="$v"
- else
+ else
inp[$k]+=";$line"
fi
done
+
code=${inp[code]}
[[ -n $code ]] || die "No code was specified"
-[[ $(echo ${db[@]}) =~ $code ]] || die "Unrecognized code: $code"
-
-setkeys $code ';' '&' # make copy of old data in keys
-for i in ${!inp[@]}; do keys[$i]=${inp[$i]}; done # overwrite with new data
+[[ $db =~ $code ]] || die "Unrecognized code: $code"
+
+setkeys "$code" ';' '&' # make copy of old data in keys
+
+changed=false
+for i in "${!keys[@]}"; do
+ old=${keys[$i]}
+ new=${inp[$i]}
+ if [[ $old != "$new" ]]; then
+ $changed || echo "The following changes were found:"
+ printf "%-7s: '%s'\n%9s'%s'\n" "$i" "$old" ">" "$new"
+ changed=true
+ fi
+done
+$changed || die "no changes"
-cat <<-EOF >new
+while true; do
+ read -r -p "Save [Yn]? " r
+ case $r in
+ ([yY]|'')
+ cat <<-EOD >"lugs/$code"
# General:
- code ${keys[code]}
- short ${keys[short]}
- full ${keys[full]}
- lang ${keys[lang]}
- members ${keys[members]}
- email ${keys[email]}
- www ${keys[www]}
- list ${keys[list]}
- subscr ${keys[subscr]}
- addr ${keys[addr]}
+ code ${inp[code]}
+ short ${inp[short]}
+ full ${inp[full]}
+ lang ${inp[lang]}
+ members ${inp[members]}
+ email ${inp[email]}
+ www ${inp[www]}
+ list ${inp[list]}
+ subscr ${inp[subscr]}
+ addr ${inp[addr]}
# Periodical:
- publ ${keys[publ]}
- editor ${keys[editor]}
- eemail ${keys[eemail]}
+ publ ${inp[publ]}
+ editor ${inp[editor]}
+ eemail ${inp[eemail]}
# Banking:
- bank ${keys[bank]}
- bacc ${keys[bacc]}
- bcode ${keys[bcode]}
- brout ${keys[brout]}
- baddr ${keys[baddr]}
+ bank ${inp[bank]}
+ bacc ${inp[bacc]}
+ bcode ${inp[bcode]}
+ brout ${inp[brout]}
+ baddr ${inp[baddr]}
# Policy matters:
- ppos ${keys[ppos]}
- pname ${keys[pname]}
- paddr ${keys[paddr]}
- pemail ${keys[pemail]}
- pphone ${keys[pphone]}
- pfax ${keys[pfax]}
+ ppos ${inp[ppos]}
+ pname ${inp[pname]}
+ paddr ${inp[paddr]}
+ pemail ${inp[pemail]}
+ pphone ${inp[pphone]}
+ pfax ${inp[pfax]}
# General matters:
- gpos ${keys[gpos]}
- gname ${keys[gname]}
- gaddr ${keys[gaddr]}
- gemail ${keys[gemail]}
- gphone ${keys[gphone]}
- gfax ${keys[gfax]}
+ gpos ${inp[gpos]}
+ gname ${inp[gname]}
+ gaddr ${inp[gaddr]}
+ gemail ${inp[gemail]}
+ gphone ${inp[gphone]}
+ gfax ${inp[gfax]}
# Finance matters:
- fpos ${keys[fpos]}
- fname ${keys[fname]}
- faddr ${keys[faddr]}
- femail ${keys[femail]}
- fphone ${keys[fphone]}
- ffax ${keys[ffax]}
- EOF
-diff -y --left-column --report-identical-files lugs/$code new && die "No changes"
-while true; do
- echo -n "Save [Yn]? "
- read r
- case $r in
- ([yY]|'') mv -f new lugs/$code && Warn Saved || die "Could not save"
- exit
- ;;
- (n|N) die "Not saved, result left in file new"
- ;;
- esac
+ fpos ${inp[fpos]}
+ fname ${inp[fname]}
+ faddr ${inp[faddr]}
+ femail ${inp[femail]}
+ fphone ${inp[fphone]}
+ ffax ${inp[ffax]}
+ EOD
+ Warn Saved
+ exit
+ ;;
+ (n|N)
+ die "Not saved, result left in file new"
+ ;;
+ esac
done
+
+:<<'auxfiles'
+begin-base64 644 -
+UEsDBBQACAAIAMOCfFQAAAAAAAAAAAECAAAJABwAUkVBRE1FLm1kVVQJAAOO
+xEFihsVBYnV4CwABBOgDAAAE6AMAAEWRwWrDMAyG734KwS4tNFnHbj1t0JJL
+GTu0bDB2cBylMXXsYMvzAn34yUm7BhPwL+nTL/kBTDyJC+TvjCNcoMGgvB5I
+O3vVi6LYXDb8z/c5yHlcBwX00soTwgE/Ye+UNHAM6KHyLg6QsIaBo2Hm0Dgg
+19UydFmQkTrnWfgYawdbPJ/RT4nYS21YT6y/WDqV1rD+gz6wJdafy/WaBaMV
+2pCJ1dsRKrTouf17rDkA+zkoBLtcPC1BSQs1QgzYALl8Fh6LpfIoCYE6vJsF
+107C/lhBI0myXyzFodPhNnsfA2Ua/qKKxERtQRMXJrsCx7U+aTaG/UDjChrt
+UZHzYyleW+LlZPiV1MnAILR3VNLUTRlFC256hBVfufc/hlOMEcpZktz3Zj1o
+nqN1M/1rZzjXO5s3wWNsr2N8L1JK5bzSR97MshTiD1BLBwhLyOJ/RAEAAAEC
+AABQSwMEFAAIAAgAlbp7VAAAAAAAAAAAkgQAAA0AHABpbWFnZXMvdXkucG5n
+VVQJAAMq1UBiKtVAYnV4CwABBOgDAAAE6AMAAHWSe0xTVxzHD2wNr8kkig4Y
+UyfIs6Z0MqCAEVIoRCEqmGHiEhgvCSAINTwkExmw6RigokNeY8PwGo/IpAhj
+ZOMZB4M5TWoKQgUKtPS2994+7u29ve0ObvtjWXbyO/eX38n95Pc939+5cTpW
+sMvW2RYAsCs6in8W5sNwO1u/Ab+2eY72ML2ZHhYTBsDDGjtjEgvWB5OjzsYA
+UHwEgNJyACh4VLoFwBUOAIpEAHj1AOzPbRo5EwKApd/pU/ER5teLoVQmxmCk
+NSaGNpsYk5Ew/7NIpcig/kWrHKSJdQqfI5UjZrMJQYmlV+jSKmrQrRg0Ygqf
+JhR1uOySXt5CyKsN2JQe/ZWhdTeb511Cm11OtJhMNK2VUDoJLivBVzL18ixU
+6oUvRelVRfh6un77kYkhYMB2xbUz4P1a4H4LIrAXsVmrV93CpIcxqYtWbaPZ
+3o+9csQWI0lVK7HVYFBPQ+R221Ov6Davkw+gcobGSGRQu5qIy9gEBSjzTmgR
+O61CoEfKSfVjI4VARKun5Eq9HNHDK2uVw/h6Abp8DN9422D6G9HrWKjECXsZ
+q9msJ3DxjicMRWFPiO0GAmqW+ulwCwNjQVKW+PZbOuQ8gVTSuj+g5hfLqoGx
+ZRgMjZPICKWZ0W1UoYseGiUPW3HQKL0xiS+2KiCxPkJ+n9I8u1b3hOV9h8W+
+SxObuOymXt1AqK+ikkCdKpdAy3Wb9Rp5B7MzF/K1MzXQGagfWkOTckJxj9JO
+aGQ3COwRoaxmKAVNKhgj2SmSnMsRnbs8xBg1BnQSqiKwBdqgMKA/G8k1k8nM
+wNswJjj2v0acUzn+34CNgOed+93Pca0h4KNuWDoENiyIt/faJ8TDV2XxyUkB
+H3zBco2ChU1u1Pl8+ErFO9si3LOxEB5aCaNjIqzWrKz3Oe27oNaSkHGL5ofF
+ey589SwunxW2myXdsyjKDg4QZcO0uDE93z/7Ml6WMeBPh+omuvpUDe+Vejic
+8btsE+2VoSqv8l1fd9x7t+5by87urj0vaivb74mq+1rGrh9KTMkKB6d+m2P7
+9vZkZyFK13ebmz6+YFPa+OPnHV8P1fR/c+1E60HPQLc6UF4h4EdGzExOT3m4
+HXHveNDuUKqtmutRNi2NGsvGv1u9bRZ7s336O3u6+7p6v8+5yI/Lt7O4mJ2p
+3lIqVHJk+8A7k7+j1teRY7wPj/sF+Yd+EBxQUzHlXsYZGB0YEY09HB786Qc7
+JXJg96cCXgjveFBocPrsl7M+4yvr4sfDshJ25JaqpaiwpDgtUFph3y8sbFu7
+8plaSLZOeLiObaExM8TVp0ZgL0kwFxXOj0IL3YURCcKUJGEqLzkvFSbA5fgF
+sTkBbE5gPJfL4/rzuFwfDpfH4fTSz4f+BWTnpGSkFf0/sNSeZQcBpx0gLidN
+WJCUlwoKCgqOZlzKzE9Oyk09mpOX3qgKcYY/geiIWH5feGLZn1BLBwisIJR6
+QQQAAJIEAABQSwMEFAAIAAgAlbp7VAAAAAAAAAAAiwQAAA0AHABpbWFnZXMv
+YnIucG5nVVQJAAMq1UBiKtVAYnV4CwABBOgDAAAE6AMAAAGLBHT7iVBORw0K
+GgoAAAANSUhEUgAAAB4AAAAVCAYAAABR915hAAAAAXNSR0IArs4c6QAAAAZi
+S0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wC
+ChIsLKgetaMAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4X
+AAAD5klEQVRIx8WWW0hcVxSGv71nxpzJZNTpqFESNcZbqzYOVUpqepFgQqHt
+SyQPDSkEpLR5CpSE0gTSgvRCW0gDhUCFUIT2pdgLbWhpGjBt2tjG0ZiOqRFN
+xqjEe2Kd0ZnjOWf3YS4KjXFiCV2wXzZnr3/9619rnSVoqVP8DybX/FLFzxrN
+viZAIE/TAbgVSYtdiAfGWMVZCo4XDxPY3k1gezfHi4dBiXhAqadArK6xijkG
+Nq7T+c73F7WZYZQVdyCh846L5y8/wng0wV6tmoLVU60EKME7ZUGOFI0SnXfw
+VmsdPddzAKjeOsGRxkuMPNPJBzc2cbR/S0qpX4FxnKVQbHVGaa8JkO/UOdtV
+yO7D+8BmgYxTtiSYkh8//Jxdjw0xvJBGvb+K6wvrkj7uFoVcCdQmFCfKgvTV
+dZHv1Pn9qpfdr+0BIwq6DkZcc2mB3eTZo3vpGsgh36nTV9fFibIgNpGQSd2L
+8ZKWle4wv9QG8NhNLEDa4L32t5mIlmEoHS3spuPyTS51j6IvWlhmLIia8jE6
+W1pRkRjH24aNpzqr6J1z/Ut7+3LQDIfBuyVDHMwfBwWWAiFgfErjzPkCQqEh
+LFOR7dlAaYmXHfV5bMrO4Ez7NX74OojfX8jUhIY3PYKlwGM3CTzRw6nhjbwx
+UMjsoj0Jbk8UUIlrgc7Hr5BuN7GsGGDi9A1nceFsH2g6QgpgEqUApXjI46Kx
+sZTPvniOl5t+IxDMor56ZGnGWPDq5nH25U5R+8c2BsJOEAmNhWJwXqPpagn9
+8xpSEnMct2zPPGBD0xzJe6fmwO3WmJkJ0fKxn9cP/0xzcz0PF8rkN0qBlNAf
+9z04r8UZJ4tLoJSgbdxL9UUfp0dzkHLpcUXpDPlFisjCItme9ShLEdUNwvN6
+LCWajblZk4/e/57cvJtJYCnh9GgO1Rd9tI17UUokNZbLygwERC1JU085Df4K
+AiEnQgI6vPniV6AkC1EDu92GlAIpBOudaWSkOxHCRvP+byASK8ZAyEmDv4Km
+nnKilkz6X7mdBOAwODedia/Dx7H+ArDgwK4Ae56+RuiOiWFamIaFYVjY7ZJF
+08HOR7vYv/MKWHCsvwBfh49z05ngMO46TFYZmQpMyQ7vLCfLblCTG+aTtm20
+/lTF8KQbgPysv3mpIcAre//Ef8vFof4ifp3OiA2Ze4yvlGe1Q1oc3DzGycog
+0YgkoscawplmkKZZHOrdwqmRXBYtmdKsFqkvAgpMG8UbwnxaOcCTnjkALtx2
+c6C3hMGQC2xmyv9HcX8byBL7F7JvA/DtpCdllv9hERAgYFEJvhzzxstTxfHE
+A95AEgHI5W1w//YPgnifZ6/90iAAAAAASUVORK5CYIJQSwcIdPe+HJAEAACL
+BAAAUEsDBBQACAAIAJW6e1QAAAAAAAAAAPIAAAANABwAaW1hZ2VzL3BsLnBu
+Z1VUCQADKtVAYirVQGJ1eAsAAQToAwAABOgDAADrDPBz5+WS4mJgYOD19HAJ
+AtIKQCzCwQYk30y09wdSjMVB7k4M687JvARy2JK83V0Y/oPggr3LJwNFOAs8
+IosZGLiFQZiRYdYcCaAge4mnryv7HSYuIUUZ68zfTkAhyRLXiBLn/Nzc1LwS
+Buei1MSS1BSF8sySDAV3T9+A8EY+caAiX08XxxCP48k1///9rW9jZNHhAQIm
+JibmpJ/t/PISMyTYJHqsEq4wLuZLSExISPjx/efrBsuGj/v8DhyY1lIfv0fS
+t2Uxn0TpgRXMbCIMDPLm/FyNVYaWQIMZPF39XNY5JTQBAFBLBwhhFKkA5gAA
+APIAAABQSwMEFAAIAAgAlbp7VAAAAAAAAAAAFQQAAA0AHABpbWFnZXMvemEu
+cG5nVVQJAAMq1UBiKtVAYnV4CwABBOgDAAAE6AMAAAEVBOr7iVBORw0KGgoA
+AAANSUhEUgAAACAAAAAVCAYAAAAnzezqAAAAAXNSR0IArs4c6QAAAAZiS0dE
+AP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCChIS
+GMhvWmsAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAD
+cElEQVRIx7WWXWyTVRjHf+dt+3Z929kxOmBTTLfB2AIbkQUI2cpM/CAZoAwV
+C0GygGaALmYbmTqUj8QZCMRd4QdMNHEjyPQCA9OLRQUkxAsVBMZHULIsbB1l
+sM0VV9b3PV60hZVFL+jL//Kckzy/83+e5zxH0LBUEpeUbH1qJXWlFTj7bxHY
++g4jZ06DoiCE4GFIJADEIDJcbr6v3M6crFxuH/+JQG01WK0PBUKZ7QyBIYAY
+hxAEhwcpbtpAXft+FN9CcjqOo5X4MMJh8x3Qj6bLDVdy2dubCUKCSHRDtdo4
+tX4Xc7JyCf3YQd/bm0AI09ywaCnKth3PDLAodYATQ4/QH7aDYgAChEA3dPb+
+8h3dQzdYUu5nYsVLjPb0EO48CzZb0iACkPPz7bRv10hPM9h4KY99fZOIGErU
+kbglUpLmcPFz1U5mTnqc0A8dBBu3YQwPJ+XI3eRrdsFmv5OGSpUzQY2KCwVc
+/cdxz40YBMDLRT4O+uuRA7e40bSbwW8O3d17YIC4ygpVvqjV8D4mef3CdD4N
+TEGXItENXcflcHJ0zRYWZs9KPgX3LzpUQWOlixq/je5BFd8fhXSNpIxLiaIo
+LJiaT1GmF2kmQFy+WSrNb2rkeRXqL3tp6skiIiGhVQwDDN1cB+5X61tuVpVZ
+OBfSKPzticRWTVLW/9tMcyp8XutimU9woNdD/VXv+ENSmg8gBJTPtXPkfSfh
+O4JXzk+npS8DlDEPVSywx+nGYVPNA5iQqnB4Syq+2ZKvAxPZ+GcOwbB9XAGi
+R9izvJr18xehYDEHYPE8O9++p9FvqPjPZfNVYApY9OjN44ENnZlZuRxe3UCO
+O5OPWs6y45PfMQz54AAWRXBit5sFBXAomMHay9MI6RawRhIrXo+w78UaXp37
+LIHgbaY93cJfXYNJFaV11ZMptG5y0C9VVl/MpjUwOXprMabdIqOU5BTR/MIb
+5Hum8sHHv7K58SSoFlCSnAWyfYI8cjOdpZ0FIMW4aYgeYdeS16grraDr2t8U
+P9/GzYGRaKWa0YYrLubTdj0jNopjhSYl3BmhNK+Y5uXVzPA8Sv3OU3y4/zR6
+xDAtOIC1LegZM3AESAOHLYXGxeuoKVlGd+8w3rIv6eoeitpt8q/Ieu9BjFpe
+PmMee56rwps2map3j/FZWyf6qJF0rv9L/wLqmjkyjZGzfQAAAABJRU5ErkJg
+glBLBwgpT+z2GgQAABUEAABQSwMEFAAIAAgAlbp7VAAAAAAAAAAA7AAAAA0A
+HABpbWFnZXMvbHQucG5nVVQJAAMq1UBiKtVAYnV4CwABBOgDAAAE6AMAAOsM
+8HPn5ZLiYmBg4PX0cAkC0spALMrBBiTP/Ap/CaQYi4PcnRjWnZMBcdiSvN1d
+GOYx6DNY/k5cfRsowlngEVnMwMAtDMKMDLPmSAAF2Us8fV3Z7zFxi0ixPPUz
++wAUkixxjShxzs/NTc0rYXAuSk0sSU1RKM8syVBw9/QNCG/kEwcqcvd0cQzx
+OP726kZeBgUeZkfpjfxbdGabCi4yMF7CPam+KbhrhuH0gCVtTpLJPtv4VvA9
+exfM5uz5z/hYTXciD/9Sw5OWC/STfVaxT4jnUVjrbPYPaCSDp6ufyzqnhCYA
+UEsHCI//wy7jAAAA7AAAAFBLAwQUAAgACACVuntUAAAAAAAAAADnAAAADQAc
+AGltYWdlcy9kZS5wbmdVVAkAAyrVQGIq1UBidXgLAAEE6AMAAAToAwAA6wzw
+c+flkuJiYGDg9fRwCQLSykAsysEGJM/8Cn8JpBiLg9ydGNadkwFx2JK83V0Y
+/oPggr3LJwNFOAs8IosZGLiFQZiRYdYcCaAge4mnryv7HSYuIQkJo4ZND4FC
+kiWuESXO+bm5qXklDM5FqYklqSkK5ZklGQrunr4B4Y184kBFTp4ujiEex5NT
+EhJ+nDfwYBA+rMC0uE+y9MyEMp7Trw8+meG/+KLJqxkL58z+x6d03ODfftuK
+rFyxtvOLM9OuGC7uWwj0yMcl7Ne2d+2pBJrG4Onq57LOKaEJAFBLBwg9dL/h
+3AAAAOcAAABQSwMEFAAIAAgAlbp7VAAAAAAAAAAAMgEAAA0AHABpbWFnZXMv
+ZGsucG5nVVQJAAMq1UBiKtVAYnV4CwABBOgDAAAE6AMAAOsM8HPn5ZLiYmBg
+4PX0cAkC0jJALMrBBiRDmfpigBRjcZC7E8O6czIvgRy2JG93F4b/ILhg7/LJ
+QBHOAo/IYgYGbmEQZmSYNUcCKMhe4unryn6HiUtI3/CBaddOoJBkiWtEiXN+
+bm5qXgmDc1FqYklqikJ5ZkmGgrunb0B4I584UFGvp4tjiMfxt1MMuQ4FCLik
+n+kSY9zbVMEY+OEfu8dEI/cNITfUJhiE1Xl8Vr4voFM2KzXhIS8Pz+1faikm
+ux6v0vtZVs+4vS0od8MmJokD/9lvPTj/5jDH/B8L6xtrQ3mWqJy19WQ6WVJ/
+MfzAVes/KVFK0tJzTK8/jO1/Ij3PYUp5Rpj8584aqyvbrI9UsBs0nH7Fy2Wk
+y2Wyz1Qa6DAGT1c/l3VOCU0AUEsHCMt+1UArAQAAMgEAAFBLAwQUAAgACACW
+untUAAAAAAAAAAARAgAADQAcAGltYWdlcy9jbi5wbmdVVAkAAyvVQGIr1UBi
+dXgLAAEE6AMAAAToAwAAAREC7v2JUE5HDQoaCgAAAA1JSERSAAAAIAAAABUI
+BgAAACfN7OoAAAABc1JHQgCuzhzpAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
+WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AIKEhQSfuAU8wAAABl0RVh0Q29t
+bWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAFsSURBVEjH7ZSxSlxBFIa/
+/473sq5XEZRAiIqtpWCTKoH0eY2ABB8hlU3yAiFNHiRPkCqdllZKFLHRsK73
+7p0/xezqBoRtxtjsgWE4wzDnm/P/MzrZWTUzwgYiKJA9ikfK4Zjm+019s/K+
+oVj00wN4JOp3De70sNZCf7eh3Iq4G3cE5wQwdjq42u5Y37+FcW4DI7g4XGJ4
+FFh63RBqYysLwELSWFSbHWsfhhQrEfXMy89/GJ0XXH1bxHcCAQHqNy1uxeBX
+mQVAExN6BOWryMbXa9SDu+MFTg9qVII0MaORhDtQMIkqkwcUTPu7gBJuflQ4
+OjlfU1pbhNWIKuc3oaPo77WcfVzm8kufwc8S9RhrnTyiYF58GlC/bXFUZgmc
+bjttrulcGFXJB27Sv5BXAqUDJe7HJA91ZOP7DeVmJN4KorIU/6cDs37Cope2
+eahctR+e4UxKmTjUVKf+M8BEiqeIgmeOOcAcYA7w7AB/Aeh7kYTrPM7DAAAA
+AElFTkSuQmCCUEsHCKA0VXoWAgAAEQIAAFBLAwQUAAgACACWuntUAAAAAAAA
+AAA6AgAADQAcAGltYWdlcy9lcy5wbmdVVAkAAyvVQGIr1UBidXgLAAEE6AMA
+AAToAwAAAToCxf2JUE5HDQoaCgAAAA1JSERSAAAAIAAAABUIBgAAACfN7OoA
+AAABc1JHQgCuzhzpAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAAL
+EwEAmpwYAAAAB3RJTUUH3AIKEiIW8JFBnwAAABl0RVh0Q29tbWVudABDcmVh
+dGVkIHdpdGggR0lNUFeBDhcAAAGVSURBVEjH7ZY9TxRRFIafM3dmmJUvF10S
+hAgIBAsKCxNqQ2diYmmBf8FEfwjxN5CYWNsTYmJWC6N8JCbGbzESUFwUdob5
+uPdYQLs07GQa3vJUT+55zjlXmr1XlQrjUXHOAXy8ShVAWo+jSglEX9ARQBVE
+QIEkE6JAEQHhuCZdacFpdAKtJOTPzxpfdiOmgkPyEcPUlQOMaJccOCWq8Hvb
+4+VSiJ1os9WqEQ06Jh6C+OB5ZU6BByuvodfmDM61iY/qRHdvM704z69/hudv
+u9ODzgAWxm8+4ODbCG92QqKey1zSBez+PS5cnKEx9wi0RID8CD48fc+PzZQg
+7qcZN/i0+5U03Wf9ScJecxObleiAU/BsxPAdy7VnLYi/U1/bINuKubFYZ321
+D1uACUsAUIWePrC3AsiUQmF2uE1/kpE5YS8RmFeCWkkvICdyxX93GJ3Mady3
+vEtmGTCO67VVPuZD+OlnrHr44s62iA6Xg44qhaYgdwYRMBQoYDXAiENEKZxB
+zyiivBoaq3QV+y6t9iCe/wcqB/gP8aaVMUzMvH8AAAAASUVORK5CYIJQSwcI
+ADZmmD8CAAA6AgAAUEsDBBQACAAIAJW6e1QAAAAAAAAAAC0KAAANABwAaW1h
+Z2VzL2toLnBuZ1VUCQADKtVAYirVQGJ1eAsAAQToAwAABOgDAAB1Vns404sb
+/1YLJ5SiKOSuCVlzbS7lsmlyz9wtDEMindHMJaQc/HDojJRLETsl5jZyG52F
+ajkz9/ty5DKLxWi04uz883ue33me3/M+7/t53svn/eN9//lkODvaSh46dQgA
+AEnkZRtXISYK3VlsvzC2D6w+EgIIa+lgCQD1ueLfAw4Kc2XMZVcHACBoAkBy
+GgB8E5aSlwEgBgIAK/4AAHsIALI3i9tczIQNkcArtjbA3j/2pJP0AAB+skHa
+WLrhJ1eLkRHyYyeTWR9uyrtC05/ZuBbYZEApzu6f3CMkDNHqdMTxsbeLBob5
+qrXMnuhBXXECOFMG7NxEqiKVmx9/dx7WdA8FymEOHw7+iQJm4jpCT+aAvQxk
+o5m/FhOLK0XfN6lN4ZKbCzBUroHy3sk/E7ZZe7t8hFTq1h1A+YiizNnk2ae3
+xTYPd1o/ub2suL/Tmiu1rEhIv8QdMN08nPLfHl9P8S10Oe2EP/WfgR+RboAV
+VXFAQAvpYMTtsMkl6zDqMz55BzqLUxjD7a5gsxVXjdvjoSwBxSF1Z9fZEzes
+pWkmc0jlTXOriNpL/SMHTlunqVzTOSENUimyX7yfqPHEirt3+y3hhmDurtx9
+FbFU5ctTc3k3O08Q9sjev/HUEgfv5hcqnhpgbzXoxJudBlnaa16N3Lu0dVX9
+SRJsI+1QJ+vBPVl+15cWPo1sfk1Dk2St9tzQtqUv1GBtqsWpesSIzy12mv70
+a7g7jYTGr5HveOGj9yp4deOPu7+Cp21Tu9UYn708s3iEmoQY5h+/8N/5Ou89
+Nm6Ep8y/Kio6efe1slgqJr19TknWAGhd0rriYIPD8QN13nMMvw1YlSi/Tujq
+f+Y11LbHEUsdj411Mjy1JlulHL5c0VjpipTpeXDGaZEX51Vw0ZSHJGo7GS4X
+X2NbSz0LY6whrQ5wPiyxI88gGzo7S8rBGPJSqYqXeUFow2mTbx2v/SFF9hgM
+JqSxlUpN2p5Q064xWrTIDZycgLu4+fjII/OfVCsSuvqhActK5s5niepIVbHA
+vre7cfJUrSrQcNO+K98/tlZj94IbJ8RSTWI/P5yIQLjgIgMzYbu4RbSDQxrk
+s4lJ040pI7iLOnJFyfxVqL4V99JB5bDhAdauyE2DY6D621w0yHJFB8SbwRrD
+F1MacG+Nbe/pipYesheFsjfHxz1hJYftnUxt03dwseGhSzNjjGJ8r00EDRLB
+KDUHWf4eK8+vsUZWhNDjH+vW3jaWCP1oquZ3urCyrwIzkZGRUVBQ0NYGMytt
+NR0fYM2r2zM6b0UQCKeAunj+2oZlVFQU+lxNGOTm18mqq83tUzGRsr0QaWnp
+c4X0IGhGBkWcfPrU9kdMSx1xo+VVWRGejz+arEnygyyXM5fz1GxDsNi40rG6
+Pw7up3tzWt3je4MZrz6va2Z95MCjrS3Kcm1UHUlD4ZSqIfbOzo7bWY1M1ZIK
+CqAlivWNHbxxJHvTx8cH+ks+fQFha6vn+yo5QM5/XIYRfGRtzULpxUwCizlz
+8pWM1b5AivcNo6ntbTwWi633DArtvYU3cRhqXlu7pW415J7dy+WLp14awj13
+Kw97pP7OXvOBXeUgu2mMA0fcj/J42AOv7lG1e0GbG2Dj5ufnExMTG3Swr8+S
+LdvbzQz9WBrIcPbmgBmJGRoSEtKBjlKW6ob8Z2GnanXKq2Bk1qqC6S/3dYOu
+F9+JlqBNTk4iEIjpyBZwZnvsKoywCc4snzT1l+udu3mzIznAU1kKfM2rgvkJ
+X0uhqyF9pnuioqm8g0Z5XtY/23+bjpOMvFxTqY5sM7mA1COrstPU6eLi4gtv
+A+vf8hIsymThzIVbyHzc2vQFFEogECDzX5LJJHBm8MR7ItylA78eqFWUwZN4
+MVQ16vqi3D5xBSuNzGDIR/h0RHf1bHWaxCAF7/PGWHHV3fXN9+/PHaDp0I+5
+czKMHRdG2ftY3V99mpqbwymThWgCEoXK7VOjb1ATBe7u7iKiopyVFeEHGide
+jnFq3tyOjX3Uv8jd2842o4+vfn069zTh6YB/S9e3ySMVzNB5Bqtxw3V1tCgn
+plQLQnIqa/bUMWMcAECWymKBgYFWYEhP4FEaJGf+PbzKGQzOhBobk4bYMvB9
+gPBWYxzrp1KA8M0o1HG4S9RrXgeLa/y4n6jto1MwRHLS30k9Q6PFSHv6+Ex1
+2J0l2jzHrU4awl3sKo8h8zPLv5jp0aF90Y99BAnUl8fhTHqhXoVw6fLg4LG+
+6EpXdkoXiiPIM+wZ5UrrwlWLu+Wze+01pSVEtDLtKl2No2Y/HbLP0XpZW1vA
++UDU9oAW2YNlvH19IyIjHTUfmOSk0wIU+pD5EiJ3C8/5tUXPi9AbtLW1F+KO
+960TicTR0dGtra0NYtgjKmHrbO1Q1M7VqAVWFjyiCul0wAT6rE9yHa8A+Buc
+8iqAS71h48rB4cPyYo1xFfO/LUDglObWcubvymL56nMm58Ss4rJ6V2NtVfPW
+chRFEjCY9KowxEcUKhtRkVkul43ImYdIXI+MPBFn+U1wkY/ONR26572ZxONH
+mW995SzM+0M8dU6IiopqxwMox5dvtn8kpdOYiddvoMzxt24NRhjxt7aIF8sI
+XKd+7venix2MJB5yTC8p7aO8tYXC4cf9Ie0zpXaVDRMRHh4exJ+R+U3eNZKS
+ku+CXKVAhXSUBj46mhlOMTIy0jz2U878dCS/t0BBb3Z7RilR6WB4KFoy3ufh
+IsL742iUC3j69IYEbXom/TtX//BYVm0Vx3zqeija8Mfm9vrVM2vf1eUk3GEd
+fu2xKLJ+g86QgZ/F2upqDRob5IW+dk1Pib+56bYiAXQv8X4IGNy7Y3cE2/Gy
+UnVNJZfJPZTGxjL5fXN1O6Mydi4y9wNGvJ9UalSPeFtQk37AaBBUqlbmCxCD
+wcj6a2l2Ov/6+lZIuRpCfrhvMt47XQK9Mx5YH3F6S8xVeCYRkSoSSfdEFmOp
+uvQPIDklZV8Xi8Vkrncn6Ik6OTq2+daa8jqLNzgXL8R0htXBE37/S+lpjLTD
+0Gv/Oldp6uUvJfIBKDCf2+pbixhzmDszOYxJXwoJoTzq17Om0Y9eefAz5vOd
+2OMB1atlzvSjPrzeBLwu5HGuxosfoUHPj5nJdrwhGXW9yw/KuMOnfEnHmnkU
+KA3BMC2K3xam+N9FxEc9Fkf+3KWeqf6zesUAXeRx24Jdjca6SaNPWs+mkCNf
+6MsrwLbf7QB4384rCk5JsDgGOZB+RavVzcNDNrfnjWf+p+qtvPNn7dUymaG+
+fn4jgwcN8mqPKVwrH02JgBb9VS9X0M/WbxVMy3toc0a8RdZsrbgU0P69i5AP
+/9YhIEL6rMo/cuRfGiVBZffAE5swenG7hKdQYWng4J64oABcMAxzK1gIABQC
+hehCzutCTdwgRrDzRjDIBW0IBAaB3OuYrv4fwo2ooLCQuP9P2JwLkhUSACTc
+0abWyj/1b1BLBwiyw766EwoAAC0KAABQSwMEFAAIAAgAlbp7VAAAAAAAAAAA
+8QAAAA0AHABpbWFnZXMvaXQucG5nVVQJAAMq1UBiKtVAYnV4CwABBOgDAAAE
+6AMAAOsM8HPn5ZLiYmBg4PX0cAkC0gpALMrBBiTVz755BaQYi4PcnRjWnZN5
+CeSwJXm7uzD8B8EFe5dPBopwFnhEFjMwcAuDMCPDrDkSQEH2Ek9fV/Y7TFxC
+4krFIuVzgEKSJa4RJc75ubmpeSUMzkWpiSWpKQrlmSUZCu6evgHhjXziQEU+
+ni6OIR7Hk1NmPPk2v1Hgx/fpB70vfnoftj8tjU3pwNwvf/bP55NNTktRWzOn
+M7Hh4ApmN1mDVw2B7D1WCVcYF/NJlB5YwTxD4v9/+QB2BgaDer6IlmjHbKC5
+DJ6ufi7rnBKaAFBLBwhWWsKa5wAAAPEAAABQSwMEFAAIAAgAlbp7VAAAAAAA
+AAAAnwQAAA0AHABpbWFnZXMva3IucG5nVVQJAAMq1UBiKtVAYnV4CwABBOgD
+AAAE6AMAAAGfBGD7iVBORw0KGgoAAAANSUhEUgAAACAAAAAVCAYAAAAnzezq
+AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAA
+CxMBAJqcGAAAAAd0SU1FB9wCChMlBqOlrQsAAAAZdEVYdENvbW1lbnQAQ3Jl
+YXRlZCB3aXRoIEdJTVBXgQ4XAAAD+klEQVRIx8VWTUhjVxT+bv6ImcYYnSpv
+1HHayIhVwVoFFx2FgS4UmhBCcJpZCKUQsSFT6mYgYwrNSjEbSymkJZO6aGBo
+pynFXVKxEHexYcYfHCX0ByItTV7UMYZM3jtdxASneW9IN50PHu9yzz33O/e8
+8757GM/zhJcIFQA0NTXVGIgIjLGacb2oxz+Xy0HxIudQKIRoNIpsNludr4cY
+ALLZLKLRKEKhEBhj8r48z5MUUqkUGQwGstlsZLVaKZ1OU71Ip9NktVrJZrOR
+wWCgVColuY7neVLInWBiYgI+nw+pVAocxyEcDlftUqe5OB8Oh8FxHA4ODrC0
+tISVlRX5DEplIBAIkNvtpt7eXgoGg2QymahUKpEoikRE9OzohA6/ekC7djft
+2t10+OUDenZ0QkREoihSqVSi/v5+Wltbo56eHpqdnaVAICCZAcbzPP27CMfH
+x2E0GqHT6bC6uopEIoHu7m4AwOEX3+D3Tz5D6egETFlOIAkiVAY9rn7qBjfz
+HgDg9PQUAwMDGB0dRT6fB8/zWF9frylCyQAAwOfzQaPRoKGhAW63GwCQ+fEn
+7Fo/hLJBK1lPwlkBb3z/OZrfvQkAWF5extnZGYrFIubn5yX/AtkAACCTyaCx
+sREqlQqMMcSG7dDtHTz/7QEwIjAAxBi03Vfx5i8/gIhQKpVwfHyMlpYWyf1z
+uVxZB+Rw0fGPzFNsP/4NwxqUyc6JT5VqrBrakVNpMHyawVvJxyj++Tc0bZeh
+VqtlyZ8Tonqw9SSNn5uvYOTkVxBjYERQg2AzjeFEqQEAfN1iwr2iiN5HT6B5
+53L9SlgPTFeM+M5wDXTpEm48/Qu8UoOVltfL5EQAYwARvn2lHd4u7r9JsRzy
++Ty0Wi0YY7je9SqM7c14eNyAh8auCxWAMvn5W3mtE+rrr1V1oVAoQKfTyXLI
+ClE8HofX60UsFqvq+L33bwKCeE4sISqCiA9mJs9jYYjFYvB6vYjH47JCVBMA
+Ywwejwculwt6vR52ux35fB4A8PHtt3FrYhAQqRwIUfkRREAk3JoYxEe3b1T3
+cjgc0Ov1cLlc8Hg80healBI6nU5aXFykzs5O8vv9NDY2RoIgVJUuuZemyTv3
+CSN3iY3cpck79ym5l64qpSAINDU1RVtbW9TR0UELCwvkdDollbAmAFEUSRAE
+4jiONjY2aHp6miwWC0UikapdDhVbJBIhs9lMDoeDEokEzczMkCAINb6SlxFj
+DAqFAsFgEHa7HTs7O2htbUWhUKja5VCxFQoFtLW1YX9/H2azGRaLBQqFQtJX
+Ugkr/cDc3ByGhobQ19eHwcHBuhqTyppkMont7W1sbm7C7/dL+r5Qiv+vjkhV
+Gbws/AM1sxFx7VppVQAAAABJRU5ErkJgglBLBwj2OU03pAQAAJ8EAABQSwME
+FAAIAAgAlrp7VAAAAAAAAAAAuAEAAA0AHABpbWFnZXMvaW4ucG5nVVQJAAMr
+1UBiK9VAYnV4CwABBOgDAAAE6AMAAOsM8HPn5ZLiYmBg4PX0cAkC0gpALMrB
+BiTVz755BaQYi4PcnRjWnZN5CeSwJXm7uzD8B8EFe5dPBopwFnhEFjMwcAuD
+MCPDrDkSQEH2Ek9fV/Y7TFxCokYxU1mrgEKSJa4RJc75ubmpeSUMzkWpiSWp
+KQrlmSUZCu6evgHhjXziQKuEPV0cQzyOv526P4vJUeBY/eNZDVdVfbV4oyNa
+TMQyc3VqWOY73n966oBj1P0HUtLzD5xSisi0mi7AoXKHVaX+jmfhR8Yyzphi
++Rzrz9L7Zv51kX83RerqojRTBl6H2ecXhTEE/hcuaePqOPB9evr2auYF9/c/
+ebOnVctjA2sSR6VS2yIbo7m6gTxdiVbRQVPcVTaIJTkwP9173SR2ZfHStJtR
+m3PWnps6a5n213vt0y6XrUhflZB7KO3zqZp/P9IPsl5Tm8oqtKtlobfyg5iT
+CQVHK3IauTI2VnDlyXEq8LTHfqo5nVLE7DAvX7J33UQOpsCrKwys9hyuq2dY
+cPv1BU+l8x++7ROf27a8Uzl9hU7Fv4qV39V7Pq7lXMz2wP4rt9ec/RLij216
+gWHI4Onq57LOKaEJAFBLBwiw3nWJuQEAALgBAABQSwMEFAAIAAgAlrp7VAAA
+AAAAAAAAuQIAAA0AHABpbWFnZXMvcHQucG5nVVQJAAMr1UBiK9VAYnV4CwAB
+BOgDAAAE6AMAAAG5Akb9iVBORw0KGgoAAAANSUhEUgAAACAAAAAVCAYAAAAn
+zezqAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAL
+EwAACxMBAJqcGAAAAAd0SU1FB9wCChMGDYreA+IAAAAZdEVYdENvbW1lbnQA
+Q3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACFElEQVRIx+2WPWhTURiGn3Nucm9i
+4k3ND9qIRWtJfyIuutjBWfFnEINzEIqr4CA41MHBMYt/4ODipCAoVgSFagdB
+B62D1YpGGtLE0sT02tsk5qbHwQiiBNuY2EE/OMs5B76X7315308wgmI1JUFd
+pm0lWeP6D8C14p8KWG6cn65FRwE0OgQ9cHAI4mFIbwfzOfjvg7HQSQoUaBKO
+9bs4N+wh91rn2Usd856OmNbJnfFQ3K+hZCcm0Gh+dCec2hIge8dHatzB2iHJ
++yGSdsi+8lJMWjhOgcgDEKrNFKw34MQw9GarRJ9WiJ5O8cTQKQnB4KcCtUuj
+LM8LrL0QngAqq9dDcwACggZYS5DOg+6VRA/tI2CbIATC+cD8tVFCXSDCUO4C
+X77NE+jxQ8mG2y9gJObiZOoRRncfTh3k7CTHe91UMw61EBS7OwAgY0PxC/R5
+JVuvW5x/OMiUuQ0QDMzY2MlFKgkD8RmCudZEqLGLs81EqATs3gTvqy6kBpHM
+DOXSOsTbN9QnLjAXn8VM1ql9rBG5CTjt1ABgVWAyB4k9Nu82mmy+Nc7Q2BQa
+irlYAS0hsVlkww0Q1dYMqfkEBCgF00VwCejvqXKxrHgcW+BAwcJdc3APLBG4
+AoG7IFVrFIjfxnHjNeSFw3GIh+BI+psT+sbAU/ozJxQr3ge+Z4EAdfVvZsEP
+lKD9at6CTmbBv7GQqLUF8BVhH6uFQITedQAAAABJRU5ErkJgglBLBwhSg8p8
+vgIAALkCAABQSwMEFAAIAAgAlrp7VAAAAAAAAAAA8gAAAA0AHABpbWFnZXMv
+bmwucG5nVVQJAAMr1UBiK9VAYnV4CwABBOgDAAAE6AMAAOsM8HPn5ZLiYmBg
+4PX0cAkC0gpALMrBBiTVz755BaQYi4PcnRjWnZN5CeSwJXm7uzD8B8EFe5dP
+BopwFnhEFjMwcAuDMCPDrDkSQEH2Ek9fV/Y7TFzCzEoxFaf+AYUkS1wjSpzz
+c3NT80oYnItSE0tSUxTKM0syFNw9fQPCG/nEgYp8PV0cQzyOJ8eoL/44P5GB
+UfgwQ3Mge49Vw9Prx/uZXzEcq6//x5NhlvLn////GZYGrxomvmVw+9zxknkW
+d0Tcvr82G1QVlZUfZyjJlB5oYGL4myJ4ZwXHyiagwQyern4u65wSmgBQSwcI
+8u7CEegAAADyAAAAUEsDBBQACAAIAJW6e1QAAAAAAAAAAOwAAAANABwAaW1h
+Z2VzL3J1LnBuZ1VUCQADKtVAYirVQGJ1eAsAAQToAwAABOgDAADrDPBz5+WS
+4mJgYOD19HAJAtIKQCzKwQYk1c++eQWkGIuD3J0Y1p2TeQnksCV5u7sw/AfB
+BXuXTwaKcBZ4RBYzMHALgzAjw6w5EkBB9hJPX1f2O0xcwmzWrinTqoFCkiWu
+ESXO+bm5qXklDM5FqYklqSkK5ZklGQrunr4B4Y184kBF7p4ujiEex99eNmQ8
+4MDBcvBpJ8Or7/m6phYKRutOzGVclrB4t/hDuYZVk2TmS/I9kkxwSFlncphB
+94B9QoPd4emrzxYclJT6kH+AXfUo3ycWm5U9QCMZPF39XNY5JTQBAFBLBwi/
+u3MW4wAAAOwAAABQSwMEFAAIAAgAlbp7VAAAAAAAAAAALAIAAA0AHABpbWFn
+ZXMvdm4ucG5nVVQJAAMq1UBiKtVAYnV4CwABBOgDAAAE6AMAAAEsAtP9iVBO
+Rw0KGgoAAAANSUhEUgAAACAAAAAVCAYAAAAnzezqAAAAAXNSR0IArs4c6QAA
+AAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1F
+B94CCxQFFDWjKAoAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBX
+gQ4XAAABh0lEQVRIx+2Wy2pTURSGv//kmMtpLkWpoTchgnReWxwLDiRTB4VO
++hB5BafFgdDHKFQcOe5TFFqUthJom0GaGI/nshycJBBsMad6DAUX7Mneg//f
+a31rsXT0bNWYYTjMOO67AcPiGRpQEQprP2ZlwCg3+1S3+tgfYOzeWT4WleYA
+dyGCEHjwTw0YNnAorfs4ZUMumIGUlQEZ5deDkTYYuPUIp5zk/vHbDt8OizA0
+oLxx/dGD+PeONM0gMgOnYDz50Cb/NJy4h8mfh1cOp2/qBOfuVBmZCkIJYl98
+frXI5W5tLC4lZ2Sku+9xvL48tXiqLpBArtHZq3K2szAhIMHluxrt1iOcgqVi
+IWUbCguhttX75WV+u4dFYgxCVnPA8YxKMwHy6n2VdushFiRQ5hvBkNKM2tAM
+vOc+sQ9fXi4RXOQA6H3yaBx+pbTp0z2Yy7AEUZKBk40VgoscUlLv+Ls4ebEE
+JizlZFa6fcCwSChnN9TasFDItVQcpIZQOW4REHLJHsL/C8nfjp+JJoEPkGGu
+XwAAAABJRU5ErkJgglBLBwha6qChMQIAACwCAABQSwMEFAAIAAgAlrp7VAAA
+AAAAAAAA7QAAAA0AHABpbWFnZXMvYmcucG5nVVQJAAMr1UBiK9VAYnV4CwAB
+BOgDAAAE6AMAAOsM8HPn5ZLiYmBg4PX0cAkC0gpALMrBBiTVz755BaQYi4Pc
+nRjWnZN5CeSwJXm7uzD8B8EFe5dPBopwFnhEFjMwcAuDMCPDrDkSQEH2Ek9f
+V/Z7TNwi3ApdUz4aAoUkS1wjSpzzc3NT80oYnItSE0tSUxTKM0syFNw9fQPC
+G/nEgYo8PF0cQzyOJ//5//9/fRsjiw8PM4+brMGrBsZyhsVfDt1iPNum47+/
+TsaXeTGfRMCBQwdsNuQl7FmqY7Dh5ofzDO0HMpRkSg80WDMwBJ/lsS9L+yoC
+NJPB09XPZZ1TQhMAUEsHCMjt4vvjAAAA7QAAAFBLAwQUAAgACACVuntUAAAA
+AAAAAACTAwAADQAcAGltYWdlcy91cy5wbmdVVAkAAyrVQGIq1UBidXgLAAEE
+6AMAAAToAwAAAZMDbPyJUE5HDQoaCgAAAA1JSERSAAAAIwAAABUIBgAAAMz6
+V+kAAAABc1JHQgCuzhzpAAAABmJLR0QAngAvADn7YavbAAAACXBIWXMAAAsT
+AAALEwEAmpwYAAAAB3RJTUUH3gIMFC4c0N9l6AAAABl0RVh0Q29tbWVudABD
+cmVhdGVkIHdpdGggR0lNUFeBDhcAAALuSURBVEjHzZTfb1J3GMY/B84BSik/
+hNJSoYFqpFW7xjBWE7u0XTJTtCa6Gy+2i9mLetdE/Te8W2rivXGJ3mh0bs5U
+7X5ocW5Tw4a6dGhqaanQAp4Cp3D4erG57N5zwZO8eS/ei/fJ58n7SuNjp4TX
+6yKXW8fv95DPl7DZLCiKjKbVsdoUyqUKbrcDVa3g7GinUKsznfkRV6MGkoRR
+kptNQf9AL6paJRIJUCqpuN0OvD4XpaKK3W6lslkjGPSRy20QDndT/nMJ194B
+tskCIyU3Gjr37/3B8ePjXLhwi1hsF4VCmU21SjjcTSqVYd++naRSLxgdG+LJ
+40XWllaJz52lu8tjrBmns52pqQnOnbvKiakEX1+8zY4dPfT2+slkVonHo9y5
+/YhDk8M8SD5ldGwI3WLlhyNf4BZbGMlGGjkwI6xWhenpSWZnrzAy8gFraxuA
+IBzp5rdf/2LPnjAPHz4jkRgmmUyTfpln5sU8rkbNUDOy3W5jYiLO+fPXSCQ+
+Ym7ud3q2e+nye3j2dIlwuIuffk6xf3iAu/OPGNzbR6FQ5uAv3xMIeBFCGEvG
+5WonFtvFwkKaUMhHtaohSSY8HgfLy3m8XicrK+tEoyGy2QLPMzm++mw3ne0W
+hIFspE/GT4tIJMAbtYLNZqVUVLFYFNraLOi6jhCgqjU6OtpoNpvY2ixkcm/4
+8vENnPUKAsnYa1IUhUZdR3aY0bQ6smzGZDLRaOgAaNoWTqcdXRfIsoy2UWTs
+5iUCXR5DYzIJIVhcfMXgYB+Zv1fo2e7DbDZRq2m43Q7K5QqhkJ/Xr4sEgz7W
+C2UqFQ1JNv9bsmElK4rC0WMfc/nSXQ4fHub6N0lCwU6CwU6y2TzRaIhkMs3o
+6BDp9EtiH0apSjLzk5/j1jVjT/vmtwtCiH+++n8d+P+Wd7N3akoS/VtFLKJp
+6NOThJGhv6+Z7+KftowZuWNnhJYh01IxPTh5pnViWr013zoxNarV1iGTvTHX
+OmSuBIdahsxbEBY0C5RtZxcAAAAASUVORK5CYIJQSwcIYAiOOpgDAACTAwAA
+UEsDBBQACAAIAJW6e1QAAAAAAAAAACIGAAANABwAaW1hZ2VzL2diLnBuZ1VU
+CQADKtVAYirVQGJ1eAsAAQToAwAABOgDAAABIgbd+YlQTkcNChoKAAAADUlI
+RFIAAAAjAAAAFQgGAAAAzPpX6QAAAAFzUkdCAK7OHOkAAAAGYktHRACeAC8A
+Ofthq9sAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeAgwUKB8fjJPU
+AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAABX1JREFU
+SMfNln1UzXccx1+/371XD0qFJkrCJPK0w8FYTBeTHEaea0OUzUNyqHaQRJvU
+2FBNNoZh2MwQjoc4Mg8HO55KZUTrsogeqHtv997f77c/Lo3JjsUfPud8//me
+8/383t/39/1+f35CQehspVncHGw83TGZLPx6JI/oZYcoLCgBWw21lslC4CBf
+NscOoLDnIJRqE4gijcPGc2vsRPy0K6CBbe1nJRlUIhPG9iC2T2Ok5SvR/36Z
+huM+RKw6dZ6rXfpTnJSKRqNi9OAO5B6cSVzUQFAAWeG1lKKAJNOhfTMu7pzC
+5w+yeDQuFEtZBe0vHsFzVQKiLjWdVisXc3vRCnI6+lO+PxM7Ww2LIvpx/Wgk
+gf5twWDGiqyOZZFwdLBlQ2oImUMcEIePpuSXA7Tcmka7k7up5+6G2SIhBkze
+wtCDVTgcy8BV25vrwyZxY8xUjNdv0tqzIRlrg9m9cQIt3F2g2vL/QEgyAOFT
++nJl2fv4fRWHbu5iGoaMpEPeCZwG9kVQq0lIPU6jbksRUQlknb6BT8g2Ulpp
+aZ6xBblQR27PIRQnpyHpDQzV+pBzYAYxM/tRT6MC6cUsCdY3AUmma1cvjqaM
+YKnhPKWjQ7EIIj6nM3CPn4va2Ymsc4X4DFxF7PLDPKqsRo0gPO6gkPB1Jmub
+OrF+SRLd889yOzaJ0m278UhagKPWj8SoAUwd143RM3fULovH0lC51OeLSH9m
+tzCSGzYFnSjimbaURsEjAKioNDIpehe7DuVaT6nExxdpOf/5a0oKffzasGZG
+DxzXfUfx9ztwGRmIR9ICbDw9ALhTUkljwUxuZy2K6YmbgnGOj6Hq0lXKpkVh
+yLtOo4lj8Eicj2hrA0BC6nES07OoemQEQXiW1aK/KpTnaQZJlrG3t6GRYz2k
+8grkKgOikyMqRwcQRQTAUlpOTkf/GjCu4cG4L4nBcr8U2WhEtLdD3dClpneV
+wUT5QyOKoiAgPGcJtWZ77ZSrAQm490JxCMh6PYok1VhXfyGbe2kbUMwvFrr6
+P/QuXGjs+5qC5NVL5A2qNwqMun73d+p2UgDFbEF/IdvqZ0DdxBWblp4gy3Vr
+qShKnTUj6Q1ke/euGZSun36M+6K5dWdG8Jr//K6sUN/ZjvhZWuZM7mXd0hv4
+M2IBpTv2Yufrjde2NWgcHZ4dWRars2RZQRQFqm8VoYtaQtnOfbiFjqUidDJT
+U85w8sQfNUH3rGY0KmqWSkTQqAgZ1ZXiMzE1QErWbuaKjx+Pjv5G573r2DQ8
+grCUs1TqTf8EEyArCqdy7tJpSCo3dWXYeDWn1U9r8T68jYcXsjEHBrGrl0DG
++hDeauZsDb2nvi8+Pd47tWvK6Z/D+WF5EA729ag6d4m894PQxSTg9cl4bqek
+02V5Domrj1FWYagtelAUhZxzt/AZuIrPkg+jN5hooPWjbdYu3ObNRLfoS7xj
+o7kc15MFkVqr+GQFFAURWcbFyZ7keQFcyphGj84emO+XUhS1hPx+Qdg62uO8
+cxPTK9sQELGT7BwdiMK/k/yZ+YQoYjJLLFt9DN+AFPZk5qGyt8MtahrtzmQg
+tvCgaEgwMwoyyds8lj7vtgZJQT20f3t2p4+3NjJbKN93hMKwuahdnPD8JpHt
+tm2IidxLVaXR+s6CALykW2zUFN4uY9iEjQQG+LIydjCt325J6+3plO/PRBed
+QPW3P7InPZHTocGonwAx3ijkxqgwzEV3cJs4ioJRHzFy4X7yr10EUahVcC+d
+AXYa9h3NZ9+xa8RF9CMm/D2cB2txCvDnbnIaBbMW4tHEFdFc8oBb4VHk9QzE
+pnkzbLeuJ1LsQu/xG8i/VvwUG68ar9ZflfjkQ7T7YDU79mdjNku4RU+n/cUj
+1O/Vjb8B/V8xmx554lgAAAAASUVORK5CYIJQSwcIYy26IicGAAAiBgAAUEsD
+BBQACAAIAJW6e1QAAAAAAAAAAMIAAAANABwAaW1hZ2VzL2h1LnBuZ1VUCQAD
+KtVAYirVQGJ1eAsAAQToAwAABOgDAADrDPBz5+WS4mJgYOD19HAJAtJyQCzC
+wQYkZ63uPQKkWIqdPEM4gKCGI6UDyOcs8IgsBqq/DsKMThqzK4CCkiWuESXB
++Wkl5YlFqQzl5eV6mXnZxcmJBal6+UXps9/ZSAEV2Xu6OIZ4dCbvSdL6Nj+R
+geGyQ4RV1scTG2a0Xr+X7KCT9uf///8ZZVJbKyoiz0RsVq1xCDJd7Kp/GCrE
+wxA9j1te5dbpX0CjGDxd/VzWOSU0AQBQSwcItsz2HbQAAADCAAAAUEsDBBQA
+CAAIAJa6e1QAAAAAAAAAALwAAAANABwAaW1hZ2VzL2VlLnBuZ1VUCQADK9VA
+YivVQGJ1eAsAAQToAwAABOgDAADrDPBz5+WS4mJgYOD19HAJAtJyQCzCwQYk
+Z63uPQKkWIqdPEM4gKCGI6UDyOcs8IgsBtIpIMxYMfGrN5AhWeIaURKcn1ZS
+nliUylBeXq6XmZddnJxYkKqXX5Q++52NFFCRpaeLY4hH59urgbwMBjxMF18H
+/ZeyWurD5snOdk98JxPn4T5m3j/sdwp0Cxh3Bj+ILTjfw6qnWcq1h6cufD3n
+kkBXxYtAQxg8Xf1c1jklNAEAUEsHCCzMKzuyAAAAvAAAAFBLAwQUAAgACACW
+untUAAAAAAAAAACcAQAADQAcAGltYWdlcy9jei5wbmdVVAkAAyvVQGIr1UBi
+dXgLAAEE6AMAAAToAwAA6wzwc+flkuJiYGDg9fRwCQLSckAswsEGJGet7j0C
+pFiKnTxDOICghiOlA8jnLPCILAbSKSDMWDHxqzeQIVniGlESnJ9WUp5YlMpQ
+Xl6ul5mXXZycWJCql1+UPvudjRQDA6Okp4tjiEfn3otnvZgCJdo/smfe9/oi
+dy43RVtQUN1FQH8hd0ZkN+PuZo3MGQKOAoLTvdZ2dy3qD317JTGAvbjLzHe2
+GkvgnxmV/3eXF/74WHBhy6b028L+VQf2iffKVWy9tVdDhnHDW86bOTNj3s05
+eMA1aeLLxVF7nTXnVv11FGPbsIbfaKbxp8rmhx+C+b6Fr7yzaIrf4o8a3Mxf
+fidfehnMxTr5osaNX60b7C/vcdScm/bZU4ztxddjS4LURbrFLc5Nl3lz3mBd
+oNfyq1X3OO5FPb/ov717sk/SRz329x8PKYbnfN5rtktI5vjTGWbW0iHreNhD
+d5rIHF/qMtvFYar3wcQQvZbk+npJt6cxEY+nKus5r57TmLxjyosNp6NfPLDX
+ibTcGx8U69Sdu7FdGhiSDJ6ufi7rnBKaAFBLBwjuxNmhnwEAAJwBAABQSwME
+FAAIAAgAlbp7VAAAAAAAAAAAUQIAAA0AHABpbWFnZXMvZ3IucG5nVVQJAAMq
+1UBiKtVAYnV4CwABBOgDAAAE6AMAAOsM8HPn5ZLiYmBg4PX0cAkC0gpALMrB
+DCQFhGVuACmWdEdfRwaGjf3cfxJZgXzG4iB3J4Z152ReglQnewT5MjBUqTEw
+NLQwMPwCCjW8YGAoNWBgeJXAwGA1g4FBvGDOrkAboMTSAJ8QV6A8A0Odn9/S
+P3/+vn//TV9/GgNDPSNjAzNzg4rKxEWLzq5efYmBocbXd7G+/hRT0xmfPv34
+//9/fPya2NjV/f1H/v799+XLz5qa3XFxa/LztyxffuH06Sf8/K2MjPUPH757
+8ODdq1efnz37+Pjxh507b2pqTpCV7ZGT65GS6kpKWvvx43cPjwXS0t0yMt3u
+7guuX3/56NE7BoZaP78l+vpTTU1nioh0RkevSkhYu3baqykgnyZ5u7sIPtpq
+uwvI4SzwiCwG0h5g7HYy2w7ImOXp4hiicb71/HG+QwYCLBciZeY4+HQqlkyT
+s2r59X8+m7iKt9kt9be5JrcYGVatWLHq4319AXVGP4frr1byu6RIaWVJGa0t
+e9a8ddvls9V/G2V53BeyqdvM80nmn1Fpdv4T6+eirfdE5Grydwf/PrzRYq5+
++DeH7Nh7ISXqvv0PJp878/x1ru05Hy3fBmNjnpkMOg6KDjoOWhPmi0gLMarI
+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
+====
+auxfiles